Java通过JavaMail发送带HTML内容邮件实例
在Java开发中,系统自动通知通常需要通过邮件发送。默认情况下邮件为纯文本,若需发送包含标题、颜色、表格等富文本内容的HTML邮件,关键在于正确配置JavaMail的Session与MimeMessage属性。
实现原理与关键配置
Java发送邮件主要依赖 javax.mail 包。要实现HTML邮件,必须满足两个条件:
- 会话配置:指定SMTP服务器地址、认证方式及传输协议。
- 内容类型设置:在使用
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)
动作:
- 创建
InternetAddress对象分别代表发件人和收件人。 - 调用
setFrom和addRecipient绑定地址。 - 设置主题时进行编码处理:
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开发技巧的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













