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);
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值