Java通过JavaMail发送带HTML内容邮件实例

Oliver
Oliver
发布时间:2026-10-13 | 3人浏览过
原创

在Java开发中,系统自动通知通常需要通过邮件发送。默认情况下邮件为纯文本,若需发送包含标题、颜色、表格等富文本内容的HTML邮件,关键在于正确配置JavaMail的Session与MimeMessage属性。

实现原理与关键配置

Java发送邮件主要依赖 javax.mail 包。要实现HTML邮件,必须满足两个条件:

  1. 会话配置:指定SMTP服务器地址、认证方式及传输协议。
  2. 内容类型设置:在使用 MimeMessage.setContent() 时,必须将 MIME 类型显式指定为 text/html;charset=gb2312(或 utf-8),否则邮件客户端会直接显示HTML源代码而非渲染后的页面。

具体操作步骤

第1步:导入必要的JavaMail包

操作入口:项目类路径。 动作:确保项目中包含 javax.mail 相关JAR包。需要引入的核心类包括 Session, Transport, MimeMessage, InternetAddress 以及用于处理字符编码的 MimeUtility。

第2步:配置SMTP会话属性

目的:建立与邮件服务器的连接基础。 入口:java.util.Properties 动作:实例化Properties对象,并设置以下关键参数:

  • mail.smtp.auth:设置为 true,表示需要用户名和密码验证。
  • mail.smtp.host:填入SMTP服务器地址(如公司的内部邮箱服务器或公共服务的host)。
  • mail.transport.protocol:固定为 smtp。
java.util.Properties props = new java.util.Properties();
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.smtp.host", smtpHost);
props.put("mail.transport.protocol", "smtp");
Session mailSession = Session.getDefaultInstance(props); 
// 调试模式可设为false
mailSession.setDebug(false); 

第3步:构建HTML消息内容

目的:组装包含HTML标签的字符串主体。 入口:StringBuffer 或 StringBuilder 动作:拼接HTML字符串。注意,如果主题中包含中文,建议使用 MimeUtility.encodeText 进行编码处理,以防乱码。正文部分直接使用HTML语法编写,例如添加字体颜色、插入分隔线或生成表格。

StringBuffer theMessage = new StringBuffer();
theMessage.append("<h2><font color=red>这倒霉孩子</font></h2>");
theMessage.append("<hr>");
theMessage.append("<i>年年失望年年望</i>");
theMessage.append("<table border='1'><tr><td>aaa</td><td>bbb</td></tr><tr><td>ccc</td><td>ddd</td></tr></table>"); 

第4步:实例化MimeMessage并设置发送人信息

目的:完善邮件的信封信息(发件人、收件人、日期、主题)。 入口:MimeMessage(mailSession) 动作:

  1. 创建 InternetAddress 对象分别代表发件人和收件人。
  2. 调用 setFrom 和 addRecipient 绑定地址。
  3. 设置主题时进行编码处理:
MimeMessage testMessage = new MimeMessage(mailSession);
testMessage.setFrom(fromAddress);
testMessage.addRecipient(javax.mail.Message.RecipientType.TO, toAddress);
testMessage.setSentDate(new java.util.Date());
// 对Subject进行GB2312编码,防止中文乱码
testMessage.setSubject(MimeUtility.encodeText(subject, "gb2312", "B"));

// 关键:指定内容为 text/html,并声明编码
testMessage.setContent(messageText, "text/html;charset=gb2312"); 

第5步:连接服务器并发送

目的:通过SMTP协议将邮件推送到服务器。
风险提醒:代码中的账号密码属于敏感信息,实际生产中请通过配置文件读取,严禁硬编码。且该示例代码使用了特定的测试账号和IP,请勿直接在公共网络环境运行涉及真实生产数据的版本。

动作:获取 Transport 实例,连接服务器,发送消息后关闭连接。

Transport transport = mailSession.getTransport("smtp");
// 连接时需替换为真实的用户名和密码
transport.connect(smtpHost, "your_username", "your_password");
transport.sendMessage(testMessage, testMessage.getAllRecipients());
transport.close(); 

常见问题排错

邮件内容为乱码

检查点:testMessage.setSubject 是否使用了 MimeUtility.encodeText;testMessage.setContent 是否正确声明了 charset。推荐统一使用 UTF-8 编码以避免兼容性问题。

发送失败或超时

检查点:SMTP服务器地址是否正确?防火墙是否拦截了 SMTP 端口(通常为 25, 465 或 587)?网络连接是否正常?

总结

Java发送HTML邮件的核心在于将消息内容类型明确指定为 text/html。通过合理配置 Session 属性并使用 MimeMessage 构造标准RFC822邮件格式,即可实现带格式的自动化邮件发送。以上就是Java发送带html标签内容的邮件实例代码的全部内容,更多关于Java开发技巧的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表