maven导入jar包
<modelVersion>4.0.0</modelVersion>
<groupId>MailTest</groupId>
<artifactId>MailTest</artifactId>
<packaging>WAR</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>MailTest Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<jstl.version>1.2</jstl.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<!-- jstl jsp标签 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<!-- servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.1.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
<scope>provided</scope>
</dependency>
<!-- commons jar -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
创建项目
编辑MailInfo
package util;
import java.util.List;
import java.util.Properties;
public class MailInfo {
private String mailServerHost; // 发送邮件的服务器的IP
private String mailServerPort = "587"; // 发送邮件的服务器端口
private String userName; // 登陆邮件发送服务器的用户名
private String userPassword; // 登陆邮件发送服务器的密码
private String fromAddress; // 邮件发送者的地址
private String toAddress; // 邮件接收者的地址管控
private String ccAddress; // 邮件抄送者的地址
private String fromUserName = "邮件测试"; // 邮件发送者的名称,显示在他人邮件的发件人
private String mailSubject; // 邮件主题
private String mailContent;// 邮件的文本内容
private String filename;//文件路径
private boolean authValidate = true; // 是否需要身份验证
private Properties properties; // 邮件会话属性
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
public MailInfo() {
}
public MailInfo(String serverHost, String user, String password, String fromAddress, String title, String content, List<String> receiver, List<String> ccList, String filename) {
this.mailServerHost = serverHost;
this.userName = user;
this.userPassword = password;
this.fromAddress = fromAddress;
this.toAddress = listToStringFormat(receiver);
this.ccAddress = ccList == null ? "" : listToStringFormat(ccList);
this.mailSubject = title;
this.mailContent = content;
this.filename = filename;
}
private synchronized String listToStringFormat(List<String> list) {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < list.size(); i++) {
if (i == list.size() - 1) {
stringBuilder.append(list.get(i));
} else {
stringBuilder.append(list.get(i)).append(",");
}
}
return stringBuilder.toString();
}
public String getMailServerHost() {
return mailServerHost;
}
public void setMailServerHost(String mailServerHost) {
this.mailServerHost = mailServerHost;
}
public String getMailServerPort() {
return mailServerPort;
}
public void setMailServerPort(String mailServerPort) {
this.mailServerPort = mailServerPort;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
public String getFromAddress() {
return fromAddress;
}
public void setFromAddress(String fromAddress) {
this.fromAddress = fromAddress;
}
public String getToAddress() {
return toAddress;
}
public void setToAddress(String toAddress) {
this.toAddress = toAddress;
}
public String getCcAddress() {
return ccAddress;
}
public void setCcAddress(String ccAddress) {
this.ccAddress = ccAddress;
}
public String getMailSubject() {
return mailSubject;
}
public void setMailSubject(String mailSubject) {
this.mailSubject = mailSubject;
}
public String getMailContent() {
return mailContent;
}
public void setMailContent(String mailContent) {
this.mailContent = mailContent;
}
public String getFromUserName() {
return fromUserName;
}
public void setFromUserName(String fromUserName) {
this.fromUserName = fromUserName;
}
public boolean isAuthValidate() {
return authValidate;
}
public void setAuthValidate(boolean authValidate) {
this.authValidate = authValidate;
}
public Properties getProperties() {
Properties p = new Properties();
p.put("mail.smtp.host", this.mailServerHost);
p.put("mail.smtp.port", this.mailServerPort);
p.put("mail.smtp.auth", authValidate ? "true" : "false");
p.put("mail.smtp.starttls.enable", "true");
return p;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
}
编辑MessageSender
package util;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
/**
*发送邮件工具类
*/
public class MessageSender {
private static final Logger logger = Logger.getLogger(MessageSender.class);
/**
*
* 发送邮件-邮件内容为文本格式
* @param mailInfo
* @return
*/
public static boolean sendMail(MailInfo mailInfo) {
try {
Message mailMessage = generateBaseInfo(mailInfo);
// 创建消息部分
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText(mailInfo.getMailContent());
// 创建多重消息
Multipart multipart = new MimeMultipart();
// 设置文本消息部分
multipart.addBodyPart(messageBodyPart);
// 附件部分
messageBodyPart = new MimeBodyPart();
// 设置要发送附件的文件路径
DataSource source = new FileDataSource(mailInfo.getFilename());
messageBodyPart.setDataHandler(new DataHandler(source));
// messageBodyPart.setFileName(filename);
// 处理附件名称中文(附带文件路径)乱码问题
messageBodyPart.setFileName(MimeUtility.encodeText(mailInfo.getFilename()));
multipart.addBodyPart(messageBodyPart);
// 发送完整消息
mailMessage.setContent(multipart);
// mailMessage.setText(mailInfo.getMailContent());// 设置邮件消息的主要内容
Transport.send(mailMessage); // 发送邮件
System.out.println("【 TEXT 邮件发送完毕,成功时间: " + System.currentTimeMillis()+ " 】");
return true;
} catch (MessagingException ex) {
ex.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return false;
}
/**
* 邮件内容为html格式
* @param mailInfo
* @return
*/
public static boolean sendHtmlMail(MailInfo mailInfo) {
try {
Message mailMessage = generateBaseInfo(mailInfo);
Multipart mainPart = new MimeMultipart();// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
BodyPart html = new MimeBodyPart();// 创建一个包含HTML内容的MimeBodyPart
html.setContent(mailInfo.getMailContent(), "text/html; charset=utf-8");// 设置HTML内容
mainPart.addBodyPart(html);
mailMessage.setContent(mainPart);// 将MiniMultipart对象设置为邮件内容
Transport.send(mailMessage);// 发送邮件
System.out.println("【 HTML 邮件发送完毕,成功时间: " + System.currentTimeMillis() + " 】");
System.out.println("send ok!");
return true;
} catch (MessagingException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return false;
}
/**
* 邮件信息安全转换
* @param mailInfo
* @return
* @throws UnsupportedEncodingException
* @throws MessagingException
*/
public static Message generateBaseInfo(MailInfo mailInfo) throws UnsupportedEncodingException, MessagingException {
// 判断是否需要身份认证
MailAuthenticator authenticator = null;
Properties pro = mailInfo.getProperties();
// pro.getProperty()
// 如果需要身份认证,则创建一个密码验证器
if (mailInfo.isAuthValidate()) {
authenticator = new MailAuthenticator(mailInfo.getUserName(),
mailInfo.getUserPassword());
}
// 根据邮件会话属性和密码验证器构造一个发送邮件的session
Session sendMailSession = Session.getInstance(pro, authenticator);
Message mailMessage = null;
mailMessage = new MimeMessage(sendMailSession); // 根据session创建一个邮件消息
Address from = new InternetAddress(mailInfo.getFromAddress(), mailInfo.getFromUserName()); // 创建邮件发送者地址
mailMessage.setFrom(from); // 设置邮件消息的发送者
if (mailInfo.getToAddress() != null && mailInfo.getToAddress().contains(",")) {
mailMessage.setRecipients(Message.RecipientType.TO, InternetAddress.parse(mailInfo.getToAddress()));// Message.RecipientType.TO属性表示接收者的类型为TO
} else {
Address to = new InternetAddress(mailInfo.getToAddress()); // 创建邮件的接收者地址,并设置到邮件消息中
mailMessage.setRecipient(Message.RecipientType.TO, to);// Message.RecipientType.TO属性表示接收者的类型为TO
}
if (StringUtils.isNotBlank(mailInfo.getCcAddress())) {
if (mailInfo.getCcAddress().contains(",")) {
mailMessage.setRecipients(Message.RecipientType.CC, InternetAddress.parse(mailInfo.getCcAddress())); // Message.RecipientType.CC属性表示接收者的类型为CC
} else {
Address cc = new InternetAddress(mailInfo.getCcAddress()); // 创建邮件的抄送者地址,并设置到邮件消息中
mailMessage.setRecipient(Message.RecipientType.CC, cc); // Message.RecipientType.CC属性表示接收者的类型为CC
}
}
mailMessage.setSubject(mailInfo.getMailSubject());// 设置邮件消息的主题
mailMessage.setSentDate(new Date());// 设置邮件消息发送的时间
return mailMessage;
}
}
编辑MailAuthenticator
package util;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
/**
* 邮件安全认证
*/
public class MailAuthenticator extends Authenticator {
String userName;
String userPassword;
public MailAuthenticator() {
super();
}
public MailAuthenticator(String user, String pwd) {
super();
userName = user;
userPassword = pwd;
}
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, userPassword);
}
}
写一个MailDemo进行测试
package test;
import java.util.ArrayList;
import java.util.List;
import util.MailInfo;
import util.MessageSender;
public class MailDemo {
public static void main(String[] args) {
mail();
}
public static void mail(){
String serverHost="smtp.qq.com";
String user="417028634@qq.com"; //用户名
String password="chcvuocdaffbbhfh"; //密码
String fromAddress=user; //邮件地址
String title="邮件测试Demo";
String content="邮件测试成功";
String fileName="E:\\a.txt";
List<String> receiver=new ArrayList<String>();
receiver.add("1141561145@qq.com");
List<String> ccReceiver=new ArrayList<String>();
//添加抄送人
ccReceiver.add("1942499853@qq.com");
ccReceiver.add("15136179776@163.com");
MailInfo mailInfo = new MailInfo(serverHost,user,password,fromAddress,title,content,receiver,ccReceiver, fileName);
MessageSender.sendMail(mailInfo);
}
}