`

java mail发送邮件

阅读更多

业务场景

       在公司内部的linux主机上,通过shell调用java application来连接公司的邮件服务器,进行邮件发送

 

实现方式

       1>通过shell读取ini文件中的配置参数,并export成系统环境变量,然后调用java程序

       2>java程序里读取环境变量进行邮件发送

 

mail.ini

 

MAIL_HOST="192.168.1.21"
MAIL_FROM="system@xxx.com"
MAIL_TO_USERS="user1@xxx.com"
MAIL_CC_USERS="user2@xxx.com,user3@xxx.com"
MAIL_ATTACH_PATH="/application/attach"

 

mail.sh

 

#!/bin/sh

while read line;do
    eval "$line"
done < mail.ini

export MAIL_HOST=$MAIL_HOST
export MAIL_FROM=$MAIL_FROM

export MAIL_TO=$MAIL_TO_USERS
export MAIL_CC=$MAIL_CC_USERS
export MAIL_SUBJECT="hello"
export MAIL_CONTENT="good morning!"
export MAIL_ATTACHMENT=$MAIL_ATTACH_PATH

java -jar mailer.jar
RETCODE=$?
if [ $RETCODE -eq 0 ]; 
then 
exit 0
else
exit 2
fi

 

Mailer.java

 

import java.io.File;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMultipart;

public class Mailer {
	
	private String mailHost;
	private String mailFrom;
	private String mailTo;
	private String mailCc;
	private String mailSubject;
	private String mailContent;
	private String mailAttachmentPath;
	private String mailAttachmentFile;
	private final String MAIL_CONTENT="text/html;charset=shift_jis";
	private static int returnCode;
	
	public Mailer(){
		this.mailHost = System.getenv("MAIL_HOST");
		this.mailFrom = System.getenv("MAIL_FROM");
		this.mailTo = System.getenv("MAIL_TO");
		this.mailCc = System.getenv("MAIL_CC");
		this.mailSubject = System.getenv("MAIL_SUBJECT");
		this.mailContent = System.getenv("MAIL_CONTENT");
		this.mailAttachmentPath = System.getenv("MAIL_ATTACHMENT");
	}
	
	public void sendMail() throws MessagingException{
		Properties prop = new Properties();
		prop.setProperty("mail.host",this.mailHost);
		prop.setProperty("mail.transport.protocol","smtp");
		prop.setProperty("mail.smtp.auth","false");
		
		Session session = Session.getInstance(prop);
		
		Transport transport = null;
		
		try {
			transport = session.getTransport();
			transport.connect();
			if(transport.isConnected()){
				System.out.println("Connected successfully!");
			}
			
			Message message = null;
			this.mailAttachmentFile = this.getAttachment();
			if(!"".equals(this.mailAttachmentFile)){
				message =  this.createAttachMail(session);
			} else {
				message = this.createSimpleMail(session);
			}
			
			transport.sendMessage(message,message.getAllRecipients());
		} catch (NoSuchProviderException e) {
			throw e;
		} catch (MessagingException e) {
			throw e;
		} finally {
			try {
				if(transport.isConnected()){
					transport.close();
				}
				System.out.println("Disconnected successfully!");
			} catch (MessagingException e) {
				throw e;
			}
		}
	}
	
	private MimeMessage createSimpleMail(Session session) throws AddressException, MessagingException{
		MimeMessage message = new MimeMessage(session);
		message.setFrom(new InternetAddress(mailFrom));
		message.setRecipients(Message.RecipientType.TO,InternetAddress.parse(mailTo));
		if(mailCc != null && !"".equals(mailCc)){
			message.setRecipients(Message.RecipientType.CC,InternetAddress.parse(mailCc));
		}
		message.setSubject(mailSubject);
		message.setContent(mailContent, MAIL_CONTENT);
		return message;
	}
	
	private MimeMessage createAttachMail(Session session) throws AddressException, MessagingException{
		MimeMessage message = new MimeMessage(session);
		message.setFrom(new InternetAddress(mailFrom));
		message.setRecipients(Message.RecipientType.TO,InternetAddress.parse(mailTo));
		if(mailCc != null && !"".equals(mailCc)){
			message.setRecipients(Message.RecipientType.CC,InternetAddress.parse(mailCc));
		}
		message.setSubject(mailSubject);
		
		MimeBodyPart text = new MimeBodyPart();
		text.setContent(mailContent, MAIL_CONTENT);
		
		MimeBodyPart attach = new MimeBodyPart();
		DataHandler dh = new DataHandler(new FileDataSource(this.mailAttachmentFile));
		attach.setDataHandler(dh);
		attach.setFileName(dh.getName());
		
		MimeMultipart mp = new MimeMultipart();
		mp.addBodyPart(text);
		mp.addBodyPart(attach);
		mp.setSubType("mixed");
		message.setContent(mp);
		message.saveChanges();
		
		return message;
	}
	
	private String getAttachment(){
		if(this.mailAttachmentPath != null && !"".equals(this.mailAttachmentPath)){		
			File file = new File(this.mailAttachmentPath);
			File[] fileArray = file.listFiles();
			
			if(1 == fileArray.length){
				return fileArray[0].getAbsolutePath();
			}
			
			if( 0 == fileArray.length){
				return "";
			}
			
			long newTime = 0;
			int newIndex = 0;
			for(int i=0; i < fileArray.length; i++){
				long curTime = fileArray[i].lastModified();
				if(curTime > newTime){
					newTime = curTime;
					newIndex = i;
				}
			}
			
			return fileArray[newIndex].getAbsolutePath();
		}
		return "";
	}
	
	public static void main(String[] args){
		try {
			Mailer mailer = new Mailer();
			mailer.sendMail();
			returnCode = 0;
		} catch (Exception e) {
			returnCode = 1;
		} finally {
			System.exit(returnCode);
		}
	}
}

 

分享到:
评论

相关推荐

    java mail发邮件

    在你提供的压缩包文件中,包含了三个关键元素:activation.jar、mail.jar以及SendMail.java,这些都是Java Mail发邮件所需的基本组件。 `activation.jar` 是JavaBeans Activation Framework (JAF) 的一部分,它是...

    java Mail 发送邮件及邮件附件

    Java Mail 发送邮件及邮件附件 Java Mail 是一个广泛使用的 Java 库,用于发送电子邮件。以下是 Java Mail 发送邮件及邮件附件的知识点。 Java Mail 简介 Java Mail 是一个 Java 库,提供了发送电子邮件的功能。...

    Java Mail 发送邮件

    ### Java Mail 发送邮件知识点详解 #### 一、概述 Java Mail API 是一个用于发送与接收电子邮件的标准 Java 库,支持多种协议如 SMTP (Simple Mail Transfer Protocol) 和 POP3 (Post Office Protocol version 3) ...

    java mail 发送邮件

    Java Mail 是一个用于处理电子邮件的开源API,它允许开发者通过编程方式发送、接收和管理邮件。在Java应用程序中,我们通常使用JavaMail API来实现邮件的自动化操作,比如发送带有附件的邮件、群发邮件等。下面将...

    java mail 发送邮件代码与架包

    Java Mail 是一个用于处理电子邮件的开源API,它允许开发者通过编程方式发送、接收和操作邮件。这个API提供了广泛的协议支持,包括SMTP(简单邮件传输协议)用于发送邮件,POP3和IMAP4用于接收邮件。在Java Mail中,...

    Java mail发送邮件

    利用Java mail发送邮件,用到的一些类,一些方法,写的很简陋

    使用 java mail 发送邮件

    要使用Java Mail发送邮件,首先需要添加相应的依赖库到项目中。对于Android项目,通常会通过Gradle来引入。 1. 添加依赖: 在项目的build.gradle文件中,添加以下依赖: ```groovy dependencies { ...

    Java Mail发送邮件脚本及所需全部Jar包

    下面我们将详细探讨Java Mail发送邮件脚本的核心知识点,以及在实际操作中可能需要的Jar包。 1. **JavaMail API**:JavaMail API是Java中处理电子邮件的标准库,由JavaMail项目维护。它提供了一系列接口和类,包括`...

    java mail 发邮件 demo程序

    这个“java mail 发邮件 demo程序”是为了演示如何使用JavaMail API发送电子邮件而创建的一个简单示例。在这个DEMO程序中,我们将深入探讨JavaMail API的核心概念以及如何构建一个实际的邮件发送功能。 首先,...

    Java mail发送邮件(源代码带注释)

    这个标题“Java mail发送邮件(源代码带注释)”表明我们将讨论如何使用JavaMail API来实现电子邮件的发送功能。描述提到,通过简单的赋值和测试,我们可以快速实现邮件发送,这表明提供的源代码应该是一个易于理解且...

    用java mail发邮件源码,支持多种邮局,支持单发和群发

    Java Mail 是一个用于处理电子邮件的开源API,它允许开发者通过编程方式发送、接收和管理邮件。这个源码可能包含了一套完整的解决方案,可以与多种邮局(如Gmail, Yahoo, Hotmail等)进行交互,并且支持单个收件人和...

    java mail发送邮件(源代码+注释)

    Java Mail 是一个强大的开源API,用于处理电子邮件的发送和接收。这个API允许开发者在Java应用程序中集成邮件功能,包括SMTP(简单邮件传输协议)和POP3(邮局协议第三版)等邮件服务协议。本教程将详细介绍如何使用...

    java mail 邮件发送

    以下是一个简单的Java Mail发送邮件的示例代码: ```java import javax.mail.*; import javax.mail.internet.*; public class EmailSender { public static void main(String[] args) throws Exception { // ...

    java mail 发送QQ邮件

    要使用Java Mail发送QQ邮件,首先需要在QQ邮箱设置中开启“POP3/SMTP/IMAP”服务,并获取授权码。授权码是QQ邮箱为第三方应用提供的一种安全验证方式,不同于普通密码。 ### 3. 添加依赖 在Java项目中,我们需要...

    Java Mail邮件发送源码下载

    Java Mail邮件发送是Java开发中常见的一项功能,用于在应用程序中发送电子邮件。Java Mail API提供了一个标准的接口,使得开发者可以方便地实现SMTP(简单邮件传输协议)和其他邮件协议的功能。下面将详细介绍Java ...

    Java Mail demo (仅发送邮件)

    下面是一个简化的Java Mail发送邮件的步骤,展示了一些关键API的使用: 1. 引入Java Mail依赖:首先确保项目中包含了Java Mail的相关库,通常通过Maven或Gradle等构建工具添加依赖。 2. 创建Properties对象:设置...

Global site tag (gtag.js) - Google Analytics