Spring中javaMail通过SMTP发送邮件

1、maven项目中,引入依赖包:

<dependency>
	<groupId>org.apache.commons</groupId>
	<artifactId>commons-email</artifactId>
	<version>1.3.3</version>
</dependency>

2、创建MailUtils类

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;

import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class MailUtils {
	public static final String HOST = "smtp.exmail.qq.com";
	public static final String PROTOCOL = "smtp";
	public static final int PORT = 25;
	public static final String FROM = "*****.****";
	public static final String PWD = "*****";

	/**
	 * 获取Session
	 * 
	 * @return
	 */
	public static void send(String toEmail, String subject, String htmlMsg) {
		HtmlEmail email = new HtmlEmail();// 可以发送html类型的邮件
		email.setHostName(HOST);// 指定要使用的邮件服务器
		email.setAuthentication(FROM, PWD);// 使用163的邮件服务器需提供在163已注册的用户名、密码
		email.setCharset("UTF-8");
		try {
			email.setFrom(FROM);// 设置发件人
			email.addTo(toEmail);// 设置收件人
			email.setSubject(subject);// 设置主题
			email.setHtmlMsg(htmlMsg);// 可以发送html
			email.send();
		} catch (EmailException e) {
			e.printStackTrace();
		}
	}

	public boolean sendWithFile(String userName, List<String> emailList,
			String subject, String htmlMsg, String docName) {
		boolean flag = false;
		String docPath = "D:/doc/brief/";
		// 判断是否需要身份认证
		Authenticator au = new MyAuthenticator(FROM, PWD);
		Properties prop = new Properties();
		prop.setProperty("mail.smtp.host", HOST);
		prop.setProperty("mail.smtp.auth", "true");// 是否采用认证
		// 根据邮件会话属性和密码验证器构造一个发送邮件的session
		try {
			Session session = Session.getDefaultInstance(prop, au);
			// 创建邮件信息的载体message
			Message message = new MimeMessage(session);
			message.setFrom(new InternetAddress(FROM));
			InternetAddress[] adrs = new InternetAddress[emailList.size()];
			for (int i = 0; i < emailList.size(); i++) {
				adrs[i] = new InternetAddress(emailList.get(i));
			}
			message.setRecipients(Message.RecipientType.TO, adrs);

			message.setSubject(subject);
			message.setSentDate(new Date());

			// 采用XML模板,可以让邮件带有HTML的格式
			ClassLoader classLoader = getClass().getClassLoader();
			File file = new File(classLoader.getResource("file/email.txt").getFile());
			// 采用XML模板,可以让邮件带有HTML的格式
			String str = new ReaderXML().read(file);

			Object[] obj = new Object[] { userName, "123456", "x" };// X为任意标识
			// MessageFormat 格式化字符串
			str = MessageFormat.format(str, obj);
			MimeBodyPart mbp1 = new MimeBodyPart();  
	        mbp1.setContent(str, "text/html;charset=utf-8"); 
			/*
			 * 附件上传
			 */
	        MimeBodyPart mbp3 = new MimeBodyPart();  
            FileDataSource fds2 = new FileDataSource(docPath+docName);  
            DataHandler dh2 = new DataHandler(fds2);  
            mbp3.setDataHandler(dh2);  
            mbp3.setFileName(MimeUtility.encodeText(fds2.getName())); 
	       
			Multipart mp = new MimeMultipart();
		    mp.addBodyPart(mbp1);
		    mp.addBodyPart(mbp3);
			message.setContent(mp);
			// 发送
			Transport.send(message);
			flag = true;

		} catch (Exception e) {
			e.printStackTrace();
			flag = false;
		}
		return flag;
	}

	static class MyAuthenticator extends javax.mail.Authenticator {
		private String strUser;
		private String strPwd;

		public String getStrUser() {
			return strUser;
		}

		public void setStrUser(String strUser) {
			this.strUser = strUser;
		}

		public String getStrPwd() {
			return strPwd;
		}

		public void setStrPwd(String strPwd) {
			this.strPwd = strPwd;
		}

		public MyAuthenticator(String user, String password) {
			this.strUser = user;
			this.strPwd = password;
		}

		protected PasswordAuthentication getPasswordAuthentication() {
			return new PasswordAuthentication(strUser, strPwd);
		}

	}

	class ReaderXML {
		public String read(File file) {
			String str = null;
			str = reader(file);
			return str;
		}

		private String reader(File file) {
			SAXReader reader = new SAXReader();
			String str = null;
			Document document;
			try {
				document = reader.read(new BufferedReader(
						new InputStreamReader(new FileInputStream(file),
								"UTF-8")));
				Element e = document.getRootElement();
				Element htmle = e.element("html");
				str = htmle.asXML();
			} catch (UnsupportedEncodingException | FileNotFoundException
					| DocumentException e1) {
				e1.printStackTrace();
			}

			return str;
		}

	}

	public static void main(String[] args) throws UnsupportedEncodingException {
		MailUtils mail = new MailUtils();

		List<String> list = new ArrayList<String>();
		list.add("******@qq.com");
        
		Boolean b = mail.sendWithFile("", list, "*****", "", "******");
		System.err.println(b);
	}

}
3、xml文件

<?xml version="1.0" encoding="utf-8"?>    
    <xml-body>    
        <html>       
            <body>    
               <div id="email">
			<p> 尊敬的用户:</p>
			<p style="text-indent:2em;">您好!以下是这次邮件的内容:</p>
               </div>
								
            </body>    
        </html>    
        
</xml-body>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值