1. 程式人生 > >Spring Boot 使用465埠傳送郵件

Spring Boot 使用465埠傳送郵件

最近做的一個專案中有個郵件傳送功能,傳送郵件預設是25埠,但是公司用的伺服器是阿里雲的,會遮蔽25埠,所以部署到伺服器後連線不上郵件伺服器,需要使用SSL協議(使用465埠)。

       需要注意的是Spring Boot 的版本問題,低版本只支援使用預設的25埠進行傳送,或者使用SSL協議時的配置有所區別,我的Spring Boot 的版本資訊最開始是1.3.0.RELEASE,在開發完成後測試的時候發現使用465埠死活連不上郵件伺服器,只能通過25埠傳送,對比了以前我做的專案,發現只有boot的版本不一樣,於是我修改了一下版本資訊,修改後如下所示:

  1. <parent>

  2. <groupId>org.springframework.boot</groupId>

  3. <artifactId>spring-boot-starter-parent</artifactId>

  4. <version>1.4.7.RELEASE</version>

  5. </parent>

程式碼實現細節如下

一、新增maven依賴

  1. <dependency>

  2. <groupId>org.springframework.boot</groupId>

  3. <artifactId>spring-boot-starter-mail</artifactId>

  4. </dependency>

二、新增配置資訊

  1. #郵件配置

  2. spring.mail.host=郵件伺服器地址

  3. spring.mail.username=使用者名稱

  4. spring.mail.password=密碼

  5. spring.mail.default-encoding=UTF-8

  6. #登入伺服器是否需要認證

  7. spring.mail.properties.mail.smtp.auth=true

  8. #SSL證書Socket工廠

  9. spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory

  10. #使用SMTPS協議465埠

  11. spring.mail.properties.mail.smtp.socketFactory.port=465

  12. #顯示在收件人郵箱裡面的發件人名稱

  13. spring.mail.self.username=使用者名稱

三、Java程式碼

  1. import java.io.File;

  2. import java.util.List;

  3. import javax.mail.MessagingException;

  4. import javax.mail.internet.InternetAddress;

  5. import javax.mail.internet.MimeMessage;

  6. import javax.mail.internet.MimeMessage.RecipientType;

  7. import org.apache.commons.lang3.StringUtils;

  8. import org.springframework.beans.factory.annotation.Autowired;

  9. import org.springframework.beans.factory.annotation.Value;

  10. import org.springframework.mail.javamail.JavaMailSender;

  11. import org.springframework.mail.javamail.MimeMessageHelper;

  12. import org.springframework.stereotype.Service;

  13. /**

  14. * @類名: MailSender<br>

  15. * @描述: 郵件傳送<br>

  16. */

  17. @Service

  18. public class MailSendService {

  19. @Autowired

  20. JavaMailSender mailSender;

  21. //發件人名稱設定

  22. @Value("${spring.mail.self.username}")

  23. private String sendUser;

  24. public void sendEmail(String toMail, String title, String content) throws MessagingException {

  25. final MimeMessage mimeMessage = mailSender.createMimeMessage();

  26. final MimeMessageHelper message = new MimeMessageHelper(mimeMessage);

  27. message.setFrom(sendUser);

  28. message.setTo(toMail);

  29. message.setSubject(title);

  30. message.setText(content);

  31. mailSender.send(mimeMessage);

  32. }

  33. /**

  34. * @方法名: sendSimpleMail<br>

  35. * @描述: 傳送普通文字格式的郵件<br>

  36. * @param toMail 收件人,多個用英文格式逗號分隔

  37. * @param replyTo 抄送人,多個用英文格式逗號分隔

  38. * @param title 郵件主題

  39. * @param content 郵件內容

  40. * @param flies 附件

  41. * @throws Exception

  42. */

  43. public void sendSimpleMail(String toMail, String replyTo, String title, String content, List<File> files) throws Exception {

  44. final MimeMessage mimeMessage = mailSender.createMimeMessage();

  45. final MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);

  46. helper.setFrom(sendUser);

  47. helper.setSubject(title);

  48. helper.setText(content);

  49. //設定多個收件人

  50. String[] toAddress = toMail.split(",");

  51. helper.setTo(toAddress);

  52. //設定多個抄送

  53. if(StringUtils.isNotBlank(replyTo)) {

  54. //helper.setReplyTo(replyTo);

  55. InternetAddress[] internetAddressCC = InternetAddress.parse(replyTo);

  56. mimeMessage.setReplyTo(internetAddressCC);

  57. }

  58. //新增附件

  59. if(null != files) {

  60. for (File file : files) {

  61. helper.addAttachment(file.getName(), file);

  62. }

  63. }

  64. mailSender.send(mimeMessage);

  65. }

  66. /**

  67. * @方法名: sendHtmlMail<br>

  68. * @描述: 傳送HTML格式的郵件<br>

  69. * @param toMail 收件人,多個用英文格式逗號分隔

  70. * @param replyTo 抄送人,多個用英文格式逗號分隔

  71. * @param title 郵件主題

  72. * @param htmlContent 郵件內容

  73. * @param files 附件

  74. * @throws Exception

  75. */

  76. public void sendHtmlMail(String toMail, String replyTo, String title, String htmlContent, List<File> files) throws Exception {

  77. final MimeMessage mimeMessage = mailSender.createMimeMessage();

  78. final MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);

  79. helper.setFrom(sendUser);

  80. helper.setSubject(title);

  81. helper.setText(htmlContent, true);

  82. //設定多個收件人

  83. String[] toAddress = toMail.split(",");

  84. helper.setTo(toAddress);

  85. //設定多個抄送

  86. if(StringUtils.isNotBlank(replyTo)) {

  87. //helper.setReplyTo(replyTo);

  88. InternetAddress[] internetAddressCC = InternetAddress.parse(replyTo);

  89. mimeMessage.setRecipients(RecipientType.CC,internetAddressCC);

  90. }

  91. //新增附件

  92. if(null != files) {

  93. for (File file : files) {

  94. helper.addAttachment(file.getName(), file);

  95. }

  96. }

  97. mailSender.send(mimeMessage);

  98. }