/**
* 使用Java Mail同步发送邮件,只包含发送功能,不处理Exception等问题
* @param copyTo 抄送方邮件地址
* @param subject 主题
* @param content 正文内容
* @param attachPaths [0]文件uuid [1]附件名称
*/
public static void sendSyncEmail(String email, Collection<String> copyTo, String subject,
String content, String[] attachPaths) throws MessagingException, UnsupportedEncodingException, GeneralSecurityException, MalformedURLException {
//阻止程序自动切割超长文件名,文件名经过base64编码后很容易超长,会导致文件名出错
//参考链接:https://blog.csdn.net/sunroyfcb/article/details/88971647
System.setProperty("mail.mime.splitlongparameters", "false");
// 设置邮件服务器参数
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", mail_host);//设置邮件服务器 smtp.163.com
properties.put("mail.smtp.auth", true);
properties.put("mail.smtp.port", "25");
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
properties.put("mail.smtp.ssl.socketFactory", sf);
//某些邮箱服务器要求 SMTP 连接需要使用 SSL 安全认证
// properties.put("mail.smtp.ssl.enable", true);
// 根据设置好的系统properties参数获取默认session对象
Session session = Session.getDefaultInstance(properties, new Authenticator() {
// qq邮箱服务器账户、第三方登录授权码
@Override
public PasswordAuthentication getPasswordAuthentication() {
// 发件人邮件用户名、密码
return new PasswordAuthentication(mailFrom, password_mailFrom);
}
});
// 根据session创建默认的 MimeMessage 对象
MimeMessage message = new MimeMessage(session);
// set 发件人地址及 *邮箱别名*
message.setFrom(new InternetAddress(mailFrom, "发件人别名", "UTF-8"));
// set 收件人信息(可以使用上面的格式为每个收件人或抄送人设置别名)
message.addRecipient(Message.RecipientType.TO, new InternetAddress(mailTo));
message.setSubject(subject, "UTF-8");
BodyPart mimeBodyPart = new MimeBodyPart();
// set 邮件正文,支持html标签解析(正文内容类型为html)
mimeBodyPart.setContent(mailText, "text/html; charset=UTF-8");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(mimeBodyPart);
// 处理邮件附件:每一个attachPath都是一个文件的绝对路径
for (String attachPath : attachPaths) {
mimeBodyPart.setDataHandler(new DataHandler(new MyFileDataSource()));
// 为附件设置文件名:MimeUtility.encodeText() 方法可防止文件名乱码
mimeBodyPart.setFileName(MimeUtility.encodeText(attachPath));
multipart.addBodyPart(mimeBodyPart);
}
// 设置抄送:抄送地址必须满足标准email地址格式,否则报错
for (String copy : copyTo) {
message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(copy));
}
//set 邮件内容并发送
message.setContent(multipart);
Transport.send(message);
}
JAVA发送邮件
最新推荐文章于 2024-09-07 15:57:39 发布