1. 程式人生 > >用Spring的郵件封裝類JavaMailSenderImpl傳送郵件:注意埠號不需要設定(設定了反而linux上釋出後傳送失敗)

用Spring的郵件封裝類JavaMailSenderImpl傳送郵件:注意埠號不需要設定(設定了反而linux上釋出後傳送失敗)

===》###注意埠號不需要設定:》加不加埠:window都行,linux加了埠反而發不出去!

是的。配置了埠,Windows沒問題。linux就有問題了。仔細檢視錯誤資訊:

發現是 JavaMail API 程式碼問題。排除了是我的程式碼邏輯問題。

而且是埠超時問題。

看到這個部落格,有了點思路。去掉了埠。本地windows測試通過。

於是給測試同學重新發版。可以了。

部落格:https://blog.csdn.net/qq_33556185/article/details/51028952

====》以下轉載:其內容。

 JavaMailSenderImpl是spring封裝的郵件傳送封裝類,支援普通文字、附件、html。博主今天用到了用qq郵箱傳送普通文字,以後若用到了其他,再補充在下面。用qq郵箱的smtp郵件伺服器,前提之一是關閉登入保護,開啟郵箱登入保護,無法使用smtp服務。若開啟了,前往安全中心關閉。

前提之二是開啟smtp服務,在郵箱的設定-賬號設定-開啟服務裡檢視是否開啟了POP3/SMTP服務。開啟之後,會顯示一個授權碼。此授權碼作為發件方的密碼,qq郵箱可能作為安全考慮,防止郵箱密碼洩露。

 修改郵箱密碼之後,授權碼會失效,要想獲取新的授權碼,開啟服務的下方點選生成授權碼連結,即可得到新的16位授權碼。

 

上面的前提步驟滿足後,JavaMailSenderImpl就能正常使用。

傳送郵件5步驟:1加入spring的mail包;2建立郵件伺服器;3加認證機制;4建立郵件內容;5傳送郵件。

建立郵件伺服器的時候,注意埠號不需要設定

,郵件伺服器會訪問預設埠。博主試過加上埠號反而郵件發不出去,不加埠號卻能正常傳送。

 

JavaMailSenderImpl的幾個屬性設定說明如下:

Host:郵箱伺服器主機。

Port:埠號。

Username:發件方賬戶。

Password:密碼,qq郵箱的話此處設定16位授權碼,不是郵箱密碼,切記!

mail.smtp.auth:認證機制開關,記得開啟。

mail.smtp.starttls.enable:TLS通訊協議開關,連線qq的SMTP伺服器,需使用此通訊協議。

mail.smtp.timeout :連線超時時間,單位毫秒。

傳送文字訊息用SimpleMailMessage類

它的幾個重要屬性說明如下:

From發件方的賬戶,和Username的值相同

To收件方

Subject郵件主題

Text郵件內容

public void simpleMailSend(String email,String subject,String msg) {
	 //建立郵件傳送伺服器
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();  
        mailSender.setHost("smtp.qq.com");
//      mailSender.setPort(465);
        mailSender.setUsername("[email protected]");
        mailSender.setPassword("");
        //加認證機制
        Properties javaMailProperties = new Properties();
    	javaMailProperties.put("mail.smtp.auth", true); 
    	javaMailProperties.put("mail.smtp.starttls.enable", true); 
    	javaMailProperties.put("mail.smtp.timeout", 5000); 
        mailSender.setJavaMailProperties(javaMailProperties);
        //建立郵件內容
        SimpleMailMessage message=new SimpleMailMessage();
        message.setFrom("[email protected]");
        message.setTo(email);
        message.setSubject(subject);
        message.setText(msg);
        //傳送郵件
        mailSender.send(message);
	}