java: send mail using javamail 1.6.2
<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency> <dependency> <groupId>javax.activation</groupId> <artifactId>activation</artifactId> <version>1.1.1</version> </dependency>
/**
*geovindu,Geovin Du,涂聚文
*
*/
public static void sendEmail() {
// 配置邮件服务器属性
Properties properties = new Properties();
properties.put("mail.smtp.host", "smtp.qq.com");
properties.put("mail.smtp.port", "465");
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.ssl.enable", "true");
properties.put("mail.debug", "true");
// 创建会话对象并提供身份验证
Session session = Session.getInstance(properties, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
// 请替换为你的邮箱和授权码
return new PasswordAuthentication("463588883@qq.com", "0000000");
}
});
try {
// 创建邮件消息
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress("463588883@qq.com"));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse("geovindu@163.com"));
message.setSubject("JavaMail 测试邮件");
message.setSentDate(new Date());
// 1. 创建图片BodyPart
MimeBodyPart imagePart = new MimeBodyPart();
String imagePath = "resources/附件.jpg";
File imageFile = new File(imagePath);
if (!imageFile.exists()) {
System.err.println("图片文件不存在: " + imageFile.getAbsolutePath());
return;
}
DataHandler imageDataHandler = new DataHandler(new FileDataSource(imageFile));
imagePart.setDataHandler(imageDataHandler);
imagePart.setContentID("mailTestPic");
// 2. 创建文本BodyPart
MimeBodyPart textPart = new MimeBodyPart();
String htmlContent = "这是一封通过 JavaMail 发送的测试邮件。<br><br>" +
"测试内容这是一张图片<br/><a href='http://www.cnblogs.com/geovindu'>" +
"<img src='cid:mailTestPic' alt='测试图片' border='0'/></a>";
textPart.setContent(htmlContent, "text/html;charset=UTF-8");
// 3. 创建文本+图片的related部分
MimeMultipart relatedMultipart = new MimeMultipart("related");
relatedMultipart.addBodyPart(textPart);
relatedMultipart.addBodyPart(imagePart);
// 4. 将related部分包装成一个BodyPart
MimeBodyPart relatedBodyPart = new MimeBodyPart();
relatedBodyPart.setContent(relatedMultipart);
// 5. 创建附件BodyPart
MimeBodyPart attachmentPart = new MimeBodyPart();
String attachmentPath = "resources/附件.zip";
File attachmentFile = new File(attachmentPath);
if (!attachmentFile.exists()) {
System.err.println("附件文件不存在: " + attachmentFile.getAbsolutePath());
return;
}
DataHandler attachmentDataHandler = new DataHandler(new FileDataSource(attachmentFile));
attachmentPart.setDataHandler(attachmentDataHandler);
// 设置附件文件名
String fileName = attachmentFile.getName();
try {
attachmentPart.setFileName(MimeUtility.encodeText(fileName, "UTF-8", "B"));
} catch (Exception e) {
attachmentPart.setFileName(fileName);
e.printStackTrace();
}
// 6. 创建最终的mixed multipart(包含related部分和附件)
MimeMultipart mixedMultipart = new MimeMultipart("mixed");
mixedMultipart.addBodyPart(relatedBodyPart);
mixedMultipart.addBodyPart(attachmentPart);
// 7. 设置邮件内容
message.setContent(mixedMultipart);
// 8. 发送邮件
Transport.send(message);
System.out.println("邮件发送成功!");
} catch (MessagingException e) {
System.err.println("邮件发送失败: " + e.getMessage());
e.printStackTrace();
}
}


1. 同步发送邮件(默认方式)
// 根据系统资源和邮件服务器限制配置线程池
private static final ExecutorService executorService = new ThreadPoolExecutor(
5, // 核心线程数
10, // 最大线程数
60, // 空闲线程存活时间
TimeUnit.SECONDS,
new LinkedBlockingQueue<>(100), // 任务队列
new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略
);
错误处理和重试机制
public static CompletableFuture<Boolean> sendEmailWithRetry(String to, String subject, String content, int maxRetries) {
return CompletableFuture.supplyAsync(() -> {
for (int i = 0; i < maxRetries; i++) {
try {
// 发送邮件逻辑
return true;
} catch (Exception e) {
if (i == maxRetries - 1) {
System.err.println("邮件发送失败,已重试" + maxRetries + "次: " + e.getMessage());
return false;
}
System.err.println("邮件发送失败,将重试(" + (i + 1) + "/" + maxRetries + "): " + e.getMessage());
try {
Thread.sleep(1000 * (i + 1)); // 指数退避
} catch (InterruptedException ie) {
Thread.currentThread().interrupt();
return false;
}
}
}
return false;
});
}
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
浙公网安备 33010602011771号