之前在项目中遇到一个需要用阿里云邮箱带附件发送电子邮件的,分享一下
/**
* 发送电子邮件
*
* @return
*/
public static void sendMail(String toMail) {
try {
// 收件人电子邮箱
String to = toMail;
// 发件人电子邮箱
String from = "xxxxx@onaliyun.com";
// 指定发送邮件的主机为
String host = "smtp.mxhichina.com"; //阿里云 邮件服务器
// 获取系统属性
Properties properties = System.getProperties();
// 设置邮件服务器
properties.setProperty("mail.smtp.host", host);
properties.put("mail.smtp.auth", "true");
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
properties.put("mail.smtp.ssl.enable", "true");
properties.put("mail.smtp.ssl.socketFactory", sf);
// 获取默认session对象
Session session = Session.getDefaultInstance(properties, new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() { //阿里云邮箱服务器账户、第三方登录授权码
return new PasswordAuthentication("XXX@onaliyun.com", "XXXX"); //发件人邮件用户名、密码
}
});
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from, "XXXX"));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("XXXX");
//创建消息部分
BodyPart messageBodyPart = new MimeBodyPart();
//消息
messageBodyPart.setText("XXXXX");
//创建多重消息
Multipart multipart = new MimeMultipart();
//设置文本消息部分
multipart.addBodyPart(messageBodyPart);
//附件部分
messageBodyPart = new MimeBodyPart();
//设置要发送附件的文件路径
String filename = ItineraryListFile;
//设置附件中显示的文件名,通过filename解析出来
String receiveName = ItineraryListFile;
DataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
//处理附件名称中文(附带文件路径)乱码问题
messageBodyPart.setFileName(MimeUtility.encodeText(receiveName));
multipart.addBodyPart(messageBodyPart);
//发送完整消息
message.setContent(multipart);
//保存邮件
message.saveChanges();
//发送消息
Transport.send(message);
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
System.out.println("邮件结束");
}