java发送邮件工具类
JavaMailSenderImpl
JavaMailSenderImpl 类是 Spring 框架提供的一个实现了 JavaMailSender 接口的邮件发送类,用于发送邮件,提供接口如下:
setJavaMailProperties:设置属性Properties
setProtocol:设置邮件协议(SMTP、POP3等)
setHost:设置邮件服务器地址
setPort:设置邮件服务器端口
setUsername:设置邮件服务器认证用户名
setPassword:设置邮件服务器认证用户名密码
setDefaultEncoding:设置邮件字符集
send:发送邮件SimpleMailMessage
send:发送邮件MimeMessage
send:发送邮件MimeMessagePreparator
createMimeMessage:创建邮件消息MimeMessage
testConnection:测试链接
Properties
Properties 类是 Java 标准库提供的一个类,用于处理配置信息。它可以保存一组键值对形式的配置数据,通过获取和设置键值对来读取和修改配置信息,包含接口如下:
setProperty:设置属性key-value键值对,如:prop.setProperty("mail.transport.protocol", "smtp");
load:加载配置文件
常用配置项如下:
mail.smtp.host:指定 SMTP 服务器的地址。例如 smtp.example.com。
mail.smtp.port:指定 SMTP 服务器的端口号。常用的端口号有 25、465 和 587 等。
mail.smtp.auth:指定是否需要进行认证,默认情况下为 false。如果需要认证,可以设置为 true。
mail.smtp.starttls.enable:指定是否启用 STARTTLS 加密,默认情况下为 false。如果需要启用 STARTTLS,可以设置为 true。
mail.smtp.auth.mechanisms:指定认证机制。常用的认证机制有 PLAIN、LOGIN 和 NTLM 等。如果要使用匿名认证,可以设置为 ANONYMOUS。
mail.smtp.ssl.enable:指定是否启用 SSL 加密,默认情况下为 false。如果需要使用 SSL 加 密, 可以设置为 true。
mail.smtp.ssl.checkserveridentity:指定是否检查服务器的身份验证,默认情况下为 false。如果 需要检查服务器身份验证,可以设置为 true。
MimeMessage
MimeMessage 类是 JavaMail API 提供的一个类,用于构造和处理邮件的内容和属性,常用函数如下:
void setFrom(Address from):设置发件人地址。
void addRecipient(Message.RecipientType type, Address address):添加收件人地址。
void addRecipients(Message.RecipientType type, Address[] addresses):添加多个收件人地址。
void setReplyTo(Address[] addresses) :添加抄送人地址。
void setSubject(String subject):设置邮件主题。
void setContent(Multipart mp):设置邮件内容,支持多种格式的文本和附件。
MimeMessageHelper
MimeMessageHelper 类是 Spring 框架提供的一个辅助类,用于更方便地构建 MimeMessage 和 MimeMessage 中的邮件内容,常用接口如下:
void setFrom(String from):设置发件人地址。
void setTo(String to):设置收件人地址。
void setSubject(String subject):设置邮件主题。
void setText(String text):设置邮件内容。
void addAttachment(String attachmentName, File file):添加附件。
邮件发送认证及加密方式
相关参数说明
mail.smtp.auth 参数:
功能:启用SMTP服务器身份验证。
默认值:false
可选值:true/false
说明:当该参数设置为 true 时,表示需要进行SMTP服务器的身份验证,发送邮件前需要提供用户名和密码进行验证,以确保邮件的发送权限。如果设置为 false,不进行身份验证,可能会导致邮件发送失败。
mail.smtp.starttls.enable 参数:
功能:启用SMTP服务器的 STARTTLS 加密连接。
默认值:false
可选值:true/false
说明:当该参数设置为 true 时,表示需要使用 STARTTLS 加密连接发送邮件。STARTTLS 是为了增加SMTP协议的安全性,通过加密传输防止邮件内容被截获或篡改。如果设置为 false,不使用 STARTTLS 加密连接发送邮件。
mail.smtp.auth.mechanisms 参数:
功能:指定具体的SMTP身份验证机制。
默认值:PLAIN
可选值:LOGIN/PLAIN/NTLM
LOGIN 是一种SMTP身份验证机制,要求在认证过程中使用 BASE64 编码用户名和密码。
PLAIN 是一种SMTP身份验证机制,要求在认证过程中使用 BASE64 编码的用户名和密码,并以明文方式发送给SMTP服务器。
NTLM 是一种基于Windows操作系统的身份验证机制,适用于与Windows域控制器进行交互的服务器。
推荐的组合方式:
mail.smtp.auth=true
mail.smtp.starttls.enable=true
这个组合方式表示启用SMTP服务器的身份验证,并使用 STARTTLS 加密连接发送邮件。在这种方式下,邮件发送时会先进行身份验证,验证成功后建立安全的加密连接进行邮件传输,提高邮件的安全性。
mail.smtp.auth=true
mail.smtp.starttls.enable=false
这个组合方式表示启用SMTP服务器的身份验证,但不使用加密连接。在这种方式下,邮件发送时会进行身份验证,但邮件内容在传输过程中不会进行加密,可能存在被截获或篡改的风险。
mail.smtp.auth=false
mail.smtp.starttls.enable=true
这个组合方式表示不进行SMTP服务器的身份验证,但使用 STARTTLS 加密连接。在这种方式下,邮件发送时不需要提供用户名和密码进行身份验证,但在传输过程中会使用加密连接增加安全性。
mail.smtp.auth=true
mail.smtp.starttls.enable=false
mail.smtp.auth.mechanisms=LOGIN
这个组合方式表示启用SMTP服务器的身份验证,仅支持 LOGIN 机制进行认证,并不使用 STARTTLS 加密连接。邮件发送时会提供用户名和密码进行认证。
mail.smtp.auth=true
mail.smtp.starttls.enable=true
mail.smtp.auth.mechanisms=PLAIN
这个组合方式表示启用SMTP服务器的身份验证,使用 PLAIN 机制进行认证,并启用 STARTTLS 加密连接。邮件发送时会提供 BASE64 编码的用户名和密码进行认证,并使用加密连接传输邮件内容。
SSL加密
要使用 SSL 加密进行认证,需要确保以下几个参数正确配置:
mail.smtp.auth 设置为 true,启用SMTP服务器的身份验证。
mail.smtp.starttls.enable 设置为 false,禁用 STARTTLS 加密连接。
mail.smtp.socketFactory.port 设置为 SMTP 服务器的 SSL 端口号,通常是 465。
mail.smtp.socketFactory.class 设置为 javax.net.ssl.SSLSocketFactory,指定使用 SSL 加密的 Socket Factory 类。
那么,mail.smtp.auth.mechanisms 参数就可以不设置,使用默认的机制。常见情况下,SMTP 服务器会默认使用 PLAIN 或 LOGIN 机制进行 SSL 加密认证。
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "false");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); //使用默认信任证书,通过TrustManager实现自定义信任证书
认证方式及加密方式(自总结)
认证方式:表示身份验证方式,包括:匿名认证、账号密码认证
加密方式:表示通信加密方式,包括:名文、STARTTLS加密、SSL加密
组合方式:
匿名认证_名文
props.put("mail.smtp.auth", "false");
props.put("mail.smtp.starttls.enable", "false");
匿名认证_STARTTLS加密
props.put("mail.smtp.auth", "false");
props.put("mail.smtp.starttls.enable", "true");
匿名认证_SSL加密
props.put("mail.smtp.auth", "false");
props.put("mail.smtp.starttls.enable", "false");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
账号密码认证_名文
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "false");
账号密码认证_STARTTLS加密
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
账号密码认证_SSL加密
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "false");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");