package com.levelcoder.demo;
import java.io.IOException;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
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;
public class Demo3 {
public static void main(String[] args) throws MessagingException, IOException {
Properties props = new Properties();
props.setProperty("mail.smtp.auth", "true");//发送邮件是否需要认证 true 需要认证 false 不需要认证
props.setProperty("mail.transport.protocol", "smtp");//配置邮件协议
props.setProperty("mail.host", "smtp.126.com");//指定smtp服务器
props.setProperty("mail.port", "25");//指定服务器端口
Session session = Session.getInstance(props,
new Authenticator() {//创建一个Authenticator子类对象
//实现 Authenticator 子类
protected PasswordAuthentication getPasswordAuthentication(){
// userName 用户名, password 密码 使用的是策略设计模式
return new PasswordAuthentication("邮箱地址", "密码");
}
}
);//验证信息返回
session.setDebug(true);
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress("\""+MimeUtility.encodeText("想展示的名称")+"\"<对应发件人邮件地址>"));
message.setSubject("测试附件邮件发送");//邮件主题
//"\""+MimeUtility.encodeText("想展示的名称")+"\"<JavaZhangYong@126.com>") 在邮件发送人中 友好展示,展示出发件人信息,不展示邮件信息
message.setReplyTo(new Address[]{new InternetAddress("\""+MimeUtility.encodeText("想展示的名称")+"\"<对应邮件回复邮件地址>")});//设置邮件回复人信息
MimeMultipart mimeMultipart = new MimeMultipart("mixed");//混合的
message.setContent(mimeMultipart);
MimeBodyPart content = new MimeBodyPart();//文本
MimeBodyPart attch1 = new MimeBodyPart();//附件一
MimeBodyPart attch2 = new MimeBodyPart();//附件二
mimeMultipart.addBodyPart(attch1);
mimeMultipart.addBodyPart(attch2);
mimeMultipart.addBodyPart(content);
//第一个附件
DataSource ds = new FileDataSource("F:\\资源\\Spring REST.pdf");//传输文件名地址
DataHandler dataHandler = new DataHandler(ds);
attch1.setDataHandler(dataHandler);//把数据进行封装
attch1.setFileName(MimeUtility.encodeText("中文附件测试"));//设置附件文件名,可提供下载; MimeUtility.encodeText可提供在文件中的中文转换
//第二个附件
DataSource ds2 = new FileDataSource("F:\\资源\\phone\\PhoneNumberParser.java");//传输文件名地址
DataHandler dataHandler2 = new DataHandler(ds2);
attch2.setDataHandler(dataHandler2);//把数据进行封装
attch2.setFileName("PhoneNumberParser.java");//设置附件文件名,可提供下载;
//正文内容
MimeMultipart bodyMultipart = new MimeMultipart("related");//related 依赖
MimeBodyPart htmlBodyPart = new MimeBodyPart();//文本
MimeBodyPart picBodyPart = new MimeBodyPart();//文本
content.setContent(bodyMultipart);
bodyMultipart.addBodyPart(htmlBodyPart);//对正文增加HTML文本信息
bodyMultipart.addBodyPart(picBodyPart);//对正文增加图片信息
//拼装图片信息
DataSource picds = new FileDataSource("F:\\1496804644.png");//传输文件名地址
DataHandler picdh = new DataHandler(picds);
picBodyPart.setDataHandler(picdh);//把数据进行封装
//拼装HTML文本信息
htmlBodyPart.setContent("<span>你好测试复杂邮件</span>", "text/html;charset=utf-8");
//生成复杂文本
message.saveChanges();
// //写入文件
// OutputStream os = new FileOutputStream("");
// message.writeTo(os);
// os.close();
//发送邮件 InternetAddress.parse("收件人地址").可以把 String类型地址转换为邮件发送时所需要的数组类型
message.setRecipients(RecipientType.TO, InternetAddress.parse("收件人地址"));//收件人类型type, 收件人地址:address
Transport.send(message);
}
}
看看效果