您的位置:首页 > 编程语言 > Java开发

Spring中javaMail通过SMTP发送邮件

2017-05-02 10:09 369 查看
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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息