使用javax.mail发送邮件
一、导入maven依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mail</groupId> <artifactId>mail</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <!-- https://mvnrepository.com/artifact/com.sun.mail/javax.mail --> <dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.6.2</version> </dependency> </dependencies> </project>
二、封装邮件发送信息
package com.mail.entity; public class Mail { private String mailHostKey;//设置邮箱客户端(mail.smtp.host) private String mailHostValue;//设置邮箱客户端(smtp.qq.com) private String mailSubject;//设置邮件主题 private String mailBody;//设置邮件正文 private String mailSender;//设置邮件发件人 private String mailPassword;//设置邮件发件人密码 private String mailRecipientTO;//设置邮件收件人(多个收件人,以逗号隔开) private String mailRecipientCC;//设置邮件抄送人(多个抄送人,以逗号隔开) private boolean mailIsAuth;//是否设置身份认证 private String mailAuth;//设置smtp身份认证(mail.smtp.auth) public Mail() { super(); // TODO Auto-generated constructor stub } public Mail(String mailHostKey, String mailHostValue, String mailSubject, String mailBody, String mailSender, String mailPassword, String mailRecipientTO, String mailRecipientCC, boolean mailIsAuth, String mailAuth) { super(); this.mailHostKey = mailHostKey; this.mailHostValue = mailHostValue; this.mailSubject = mailSubject; this.mailBody = mailBody; this.mailSender = mailSender; this.mailPassword = mailPassword; this.mailRecipientTO = mailRecipientTO; this.mailRecipientCC = mailRecipientCC; this.mailIsAuth = mailIsAuth; this.mailAuth = mailAuth; } public String getMailHostKey() { return mailHostKey; } public void setMailHostKey(String mailHostKey) { this.mailHostKey = mailHostKey; } public String getMailHostValue() { return mailHostValue; } public void setMailHostValue(String mailHostValue) { this.mailHostValue = mailHostValue; } public String getMailSubject() { return mailSubject; } public void setMailSubject(String mailSubject) { this.mailSubject = mailSubject; } public String getMailBody() { return mailBody; } public void setMailBody(String mailBody) { this.mailBody = mailBody; } public String getMailSender() { return mailSender; } public void setMailSender(String mailSender) { this.mailSender = mailSender; } public String getMailPassword() { return mailPassword; } public void setMailPassword(String mailPassword) { this.mailPassword = mailPassword; } public String getMailRecipientTO() { return mailRecipientTO; } public void setMailRecipientTO(String mailRecipientTO) { this.mailRecipientTO = mailRecipientTO; } public String getMailRecipientCC() { return mailRecipientCC; } public void setMailRecipientCC(String mailRecipientCC) { this.mailRecipientCC = mailRecipientCC; } public boolean isMailIsAuth() { return mailIsAuth; } public void setMailIsAuth(boolean mailIsAuth) { this.mailIsAuth = mailIsAuth; } public String getMailAuth() { return mailAuth; } public void setMailAuth(String mailAuth) { this.mailAuth = mailAuth; } }
三、封装发送邮件的工具类
package com.mail.util; import java.util.Properties; import javax.mail.Address; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; 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.mail.entity.Mail; public class SendMail { public static String sendMail(Mail mail) { String msg = "设置系统属性"; Properties props = System.getProperties();// 获得系统属性对象 props.put(mail.getMailHostKey(), mail.getMailHostValue()); // 设置SMTP主机 System.out.println(msg + "成功......"); msg = "获取邮件会话对象"; Session session = Session.getDefaultInstance(props, null); // 获取邮件会话对象! System.out.println(msg + "成功......"); msg = "创建MIME邮件对象"; MimeMessage mimeMsg = new MimeMessage(session); // 创建MIME邮件对象 Multipart mp = new MimeMultipart(); //设置smtp身份认证:mail.smtp.auth props.put(mail.getMailAuth(), mail.isMailIsAuth()); try { msg = "设置邮件主题"; mimeMsg.setSubject(mail.getMailSubject() == null ? "" : mail.getMailSubject()); System.out.println(msg + "成功......"); msg = "设置邮件正文"; BodyPart bp = new MimeBodyPart(); bp.setContent("" + mail.getMailBody() == null ? "" : mail.getMailBody(), "text/html;charset=GBK"); mp.addBodyPart(bp); System.out.println(msg + "成功......"); msg = "设置邮件收件人"; mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(mail.getMailRecipientTO())); System.out.println(msg + "【" + mail.getMailRecipientTO() + "】"); if(mail.getMailRecipientCC()!= null) { msg = "设置邮件抄送人"; mimeMsg.setRecipients(Message.RecipientType.CC, (Address[]) InternetAddress.parse(mail.getMailRecipientCC())); System.out.println(msg + "【" + mail.getMailRecipientCC() + "】"); } msg = "设置邮件发信人"; mimeMsg.setFrom(new InternetAddress(mail.getMailSender())); // 设置发信人 System.out.println(msg + "【" + mail.getMailSender() + "】"); mimeMsg.setContent(mp); mimeMsg.saveChanges(); System.out.println("正在发送邮件...."); msg = "邮件发送"; Session mailSession = Session.getInstance(props, null); Transport transport = mailSession.getTransport("smtp"); transport.connect(mail.getMailHostValue(), mail.getMailSender(), mail.getMailPassword()); transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO)); if (mimeMsg.getRecipients(Message.RecipientType.CC) != null) { transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.CC)); } System.out.println(msg + "成功......"); transport.close(); } catch (MessagingException e) { System.out.println(msg + "失败......"); e.printStackTrace(); System.out.println(e.getLocalizedMessage()); return msg + "失败......"; } return msg + "成功......"; } }
四、测试
package com.mail.test; import com.mail.util.SendMail; public class TestMail { public static void main(String[] args) { com.mail.entity.Mail mail = new com.mail.entity.Mail("mail.smtp.host", "smtp.qq.com", "主题", "内容", "发送人@qq.com", "发送人密码", "收件人1@qq.com,收件人2@qq.com", null, true, "mail.smtp.auth"); String msg = SendMail.sendMail(mail); System.out.println(msg); } }
五、结果显示
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决