使用QQ邮箱为例
一,开启邮箱SMTP服务(qq需要手动开启)
163默认开启
二,添加jar
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${springVersion}</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
三,添加配置属性
mail.server=smtp.qq.com
mail.port=465
mail.userName=xxxxxxx@qq.com
mail.password=qq邮箱授权码(163邮箱可以是密码,也可以是授权码)
mail.defaultEncoding=UTF-8
mail.smtp.timeout=100000
mail.smtp.auth=true
mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
mail.smtp.socketFactory.port=465
java配置方式实例化bean
四,编写controller
五,调用接口测试(发送成功)
QQ邮箱为啥不使用25端口
QQ邮箱官方链接说明:https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=371
如果使用POP协议,必须启用ssl,并且使用995端口
如果使用SMTP协议,必须启用ssl,并且使用465端口
阿里云ECS服务器无法使用25端口发送
阿里云为了防止垃圾邮件泛滥,关闭了25端口,并建议使用加密端口
由于加密端口使用的是ssl协议,ssl协议需要加密的ssl连接,所以需要通过 javax.net.ssl.SSLSocketFactory 获取加密的SSLSocket
另一种方法,如果存在特殊场景,您必须在云服务器上使用TCP 25端口进行对外连接,请在安全管控平台中提交25端口解封申请。
mail.server的几种配置
POP3服务器: pop.163.com pop.qq.com
SMTP服务器: smtp.163.com smtp.qq.com
IMAP服务器: imap.163.com imap.qq.com
通过163邮箱发送到qq邮箱,邮件在垃圾箱中
接受邮件的邮件服务器系统设置了垃圾邮件规则,接收方一般根据发信邮箱的地址、主题、内容等来判别是否是垃圾邮件 ,许多邮箱有垃圾邮件举报功能,但各自的垃圾规则又不完全一样,比如126里面可以收到正常的邮件,但是在QQ和hotmail里面收到的邮件都被视为垃圾邮件。
有的邮件可以这样避开他的垃圾邮件规则msg.setFrom(new InternetAddress("邮箱名", "myname")),但并不是所有邮件都有效,因为各自的垃圾规则又不完全一样
所以,程序没有根本解决之道,只能从各邮件接收端自行设置了(从垃圾箱中移除),或者使用本邮箱发送,即qq发送到qq.163发往163.
或者把服务放在阿里云服务器上边,可以避免这个问题(原因暂不明白)
参考链接:https://www.cnblogs.com/panchanggui/p/9962651.html
http://www.360doc.com/content/18/0124/10/7831345_724640547.shtml