javamail发送邮件《带附件》

时间:2022-01-05 18:10:28

package com.XXX.XXX;
import java.io.File;
import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.MessagingException;
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 com.huateng.ebank.framework.util.RcmsDateUtil;

public class SimpleAliDMSendMail {
// 后缀以发件人邮箱地址为主
private static final String ALIDM_SMTP_HOST = “smtp.163.com”;
private static final int ALIDM_SMTP_PORT = 25;

public static void main(String[] args) throws MessagingException {
// 配置发送邮件的环境属性
final Properties props = new Properties();
// 表示SMTP发送邮件,需要进行身份验证
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", ALIDM_SMTP_HOST);
props.put("mail.smtp.port", ALIDM_SMTP_PORT);


// 发件人的账号
props.put("mail.user", "XXXXX@163.com");
// 访问SMTP服务时需要提供的密码
props.put("mail.password", "PASSWORD");

// 构建授权信息,用于进行SMTP进行身份验证
Authenticator authenticator = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
// 用户名、密码
String userName = props.getProperty("mail.user");
String password = props.getProperty("mail.password");
return new PasswordAuthentication(userName, password);
}
};
// 使用环境属性和授权信息,创建邮件会话
Session mailSession = Session.getInstance(props, authenticator);
// 创建邮件消息
MimeMessage message = new MimeMessage(mailSession);
// 设置发件人
InternetAddress form = new InternetAddress(
props.getProperty("mail.user"));
message.setFrom(form);

// 设置收件人
InternetAddress to = new InternetAddress("XXXXX@163.com");
message.setRecipient(MimeMessage.RecipientType.TO, to);

// 设置邮件标题
message.setSubject("测试邮件");
// 设置邮件的内容体

// <p text-indent:4em>设置顶格空出
StringBuffer emailMsg = new StringBuffer();
emailMsg.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">")
.append("<html>")
.append("<head>")
.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">")
.append("<title>测试邮件</title>")
.append("<style type=\"text/css\">")
.append("p{ text-indent:4em;}")
.append("</style>")
.append("</head>")
.append("<body>")
.append("<h3>测试邮件:</h3>")
.append("<p>测试人:" + "栗子" + "</p>")
.append("<p text-indent:4em>所在公司" + "XXX傻公司" + "</p>")
.append("<p>我的假想存款:" + "60,000.000.000,00" + "</p>")
.append("<p>地址:" + "XXXX" +"</p>")
.append("<p>性别:" + "男" + "</p>")
.append("<strong>邮件系统</strong><br>")
.append("</body>")
.append("</html>");
// 只发送正文内容不带附件,直接用此方法

// message.setContent(emailMsg.toString(), “text/html;charset=UTF-8”);

 // 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
Multipart multipart = new MimeMultipart();
// 设置邮件的文本内容
BodyPart contentPart = new MimeBodyPart();
// 设置编码
contentPart.setContent(emailMsg.toString(), "text/html;charset=UTF-8");
multipart.addBodyPart(contentPart);
//添加附件
BodyPart messageBodyPart= new MimeBodyPart();
DataSource source = new FileDataSource(new File("E:\\123\\123.pdf"));
//添加附件的内容
messageBodyPart.setDataHandler(new DataHandler(source));
//添加附件的标题
//这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码
sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
messageBodyPart.setFileName("=?GBK?B?"+enc.encode("123.pdf".getBytes())+"?=");
multipart.addBodyPart(messageBodyPart);

//将multipart对象放到message中
message.setContent(multipart);
//保存邮件

// message.saveChanges();
// 发送邮件
// Transport transport = session.getTransport(“smtp”);
//连接服务器的邮箱
//把邮件发送出去
// transport.sendMessage(message, message.getAllRecipients());

    // 发送邮件--send方法包含上面保存邮件部分
Transport.send(message);
}

}