发送HTML内容的邮件
package com.xxxx.mail;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
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 java.util.Date;
import java.util.Properties;
/**
* 发送HTML内容的邮件
*/
public class MailTest02 {
public static void main(String[] args) throws Exception {
// 定义邮箱服务器配置
Properties prop = new Properties();
// 设置邮件服务器主机名 (163 邮件服务器地址:"mail.smtp.host" "smtp.163.com")
prop.setProperty("mail.smtp.host", "smtp.163.com");
// 设置邮件服务器的端口
prop.setProperty("mail.smtp.port", "25");
// 设置邮件服务器认证属性 (设置为true表示发送服务器需要身份验证)
prop.setProperty("mail.smtp.auth", "true");
// 使用JavaMail发送邮件的5个步骤
// 1. 创建session
Session session = Session.getInstance(prop);
// 开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
session.setDebug(true);
// 2. 通过session得到transport对象
Transport ts = session.getTransport();
// 3. 使用邮箱的用户名和密码连上邮件服务器(用户名只需写@前面的即可,密码是指授权码)
ts.connect("smtp.163.com", "用户名", "密码");
// 4. 创建邮件
// 发送HTML内容的邮件
Message message = createHtmlMail(session);
// 5. 发送邮件
ts.sendMessage(message, message.getAllRecipients());
// 关闭transport对象
ts.close();
}
/**
* HTML内容邮件
* 创建一封包含html内容的邮件
*/
public static MimeMessage createHtmlMail(Session session) throws Exception {
// 创建邮件对象
MimeMessage message = new MimeMessage(session);
// 设置邮件的发件人的邮箱地址
message.setFrom(new InternetAddress("发件人的邮箱地址"));
// 设置邮件的收件人的邮箱地址 (现在发件人和收件人是一样的,那就是自己给自己发)
message.setRecipient(Message.RecipientType.TO, new InternetAddress("收件人的邮箱地址"));
// 邮件的主题
message.setSubject("测试HTML邮件");
// 设置发送日期
message.setSentDate(new Date());
// 准备邮件数据
/**
* Message表示一个邮件,messgaes.getContent()返回一个Multipart对象。
* 一个Multipart对象包含一个或多个BodyPart对象,来组成邮件的正文部分(包括附件)。
*/
// 创建多媒体对象
MimeMultipart multipart = new MimeMultipart();
// 创建邮件体对象
MimeBodyPart bodyPart = new MimeBodyPart();
// 设置HTML内容
StringBuffer sb = new StringBuffer();
sb.append("
百度一下");bodyPart.setContent(sb.toString(), "text/html;charset=UTF-8");
// 将bodyPart对象设置到multipart对象中
multipart.addBodyPart(bodyPart);
// 将multipart对象设置到message对象中 (setContent():)
message.setContent(multipart);
// 返回创建好的邮件对象
return message;
}
}
效果如下:
发送包含附件的邮件
package com.xxxx.mail;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
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 java.util.Date;
import java.util.Properties;
/**
* 发送包含附件的邮件
*/
public class MailTest03 {
public static void main(String[] args) throws Exception {
// 定义邮箱服务器配置
Properties prop = new Properties();
// 设置邮件服务器主机名 (163 邮件服务器地址:"mail.smtp.host" "smtp.163.com")
prop.setProperty("mail.smtp.host", "smtp.163.com");
// 设置邮件服务器的端口
prop.setProperty("mail.smtp.port", "25");
// 设置邮件服务器认证属性 (设置为true表示发送服务器需要身份验证)
prop.setProperty("mail.smtp.auth", "true");
// 使用JavaMail发送邮件的5个步骤
// 1. 创建session
Session session = Session.getInstance(prop);
// 开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
session.setDebug(true);
// 2. 通过session得到transport对象
Transport ts = session.getTransport();
// 3. 使用邮箱的用户名和密码连上邮件服务器(用户名只需写@前面的即可,密码是指授权码)
ts.connect("smtp.163.com", "用户名", "密码");
// 4. 创建邮件
// 发送包含附件的邮件
Message message = createAttachMail(session);
// 5. 发送邮件
ts.sendMessage(message, message.getAllRecipients());
// 关闭transport对象
ts.close();
}
/**
* 包含附件的邮件
* 创建一封包含附件的邮件
* @param session
* @return
* @throws MessagingException
*/
public static MimeMessage createAttachMail(Session session) throws MessagingException {
// 创建邮件对象
MimeMessage message = new MimeMessage(session);
// 设置邮件的发件人的邮箱地址
message.setFrom(new InternetAddress("发件人的邮箱地址"));
// 设置邮件的收件人的邮箱地址 (现在发件人和收件人是一样的,那就是自己给自己发)
message.setRecipient(Message.RecipientType.TO, new InternetAddress("收件人的邮箱地址"));
// 邮件的主题
message.setSubject("测试包含附件的邮件");
// 设置发送日期
message.setSentDate(new Date());
// 创建邮件正文
MimeBodyPart bodyPart = new MimeBodyPart();
bodyPart.setContent("使用JavaMail创建的带附件的邮件", "text/html;charset=UTF-8");
// 创建附件
MimeBodyPart attachPart = new MimeBodyPart();
// 本地文件
DataHandler dh = new DataHandler(new FileDataSource("C:\\work\\邮件附件.txt"));
attachPart.setDataHandler(dh);
// 附件名
attachPart.setFileName(dh.getName());
// 创建容器描述数据关系
MimeMultipart multipart = new MimeMultipart();
// 添加正文
multipart.addBodyPart(bodyPart);
// 添加附件
multipart.addBodyPart(attachPart);
// 如果在邮件中要添加附件,设置为mixed;。
multipart.setSubType("mixed");
// 设置邮件的内容
message.setContent(multipart);
// 返回创建好的邮件对象
return message;
}
}
效果如下:
Java Mail 邮件发送封装
创建邮件发送信息类
package com.xxxx.mail;
import java.util.List;
/**
* 邮件发送信息类
* 定义发送邮件时 邮件服务器 端口 发送方用户名 密码等字段
*/
public class MailSendInfo {
private String serverHost; // 服务器主机
private String serverPort; // 服务器端口
private String fromAddress;// 发送方邮箱地址
private List toAddress; // 接收方邮箱地址
private String userName; // 邮件服务器用户名
private String userPwd; // 邮件服务器密码(授权密码)
private String subject; // 邮件主题
private String content; // 邮件内容
private Boolean flag = true; // 是否需要身份认证
private List attachFileNames; // 附件文件名
public Boolean getFlag() {
return flag;
}
public void setFlag(Boolean flag) {
this.flag = flag;
}
public String getServerHost() {
return serverHost;
}
public void setServerHost(String serverHost) {
this.serverHost = serverHost;
}
public String getServerPort() {
return serverPort;
}
public void setServerPort(String serverPort) {
this.serverPort = serverPort;
}
public String getFromAddress() {
return fromAddress;
}
public void setFromAddress(String fromAddress) {
this.fromAddress = fromAddress;
}
public List getToAddress() {
return toAddress;
}
public void setToAddress(List toAddress) {
this.toAddress = toAddress;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public List getAttachFileNames() {
return attachFileNames;
}
public void setAttachFileNames(List attachFileNames) {
this.attachFileNames = attachFileNames;
}
}
创建认证类
package com.xxxx.mail;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
/**
* 认证类
*/
public class MyAuthenticator extends Authenticator {
private String userName; // 邮箱
private String userPwd; // 密码(授权码)
public MyAuthenticator(String userName, String userPwd) {
this.userName = userName;
this.userPwd = userPwd;
}
/**
* 邮件服务器发送邮件时,进行身份验证
* @return
*/
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, userPwd);
}
}