利用Spring框架封裝的JavaMail現實郵件傳送
最近發現使用自己的POP3伺服器給使用者傳送郵件總是有不同型別的郵件收不到,比如我的郵件是地址是123456@qq.com 傳送給126郵箱可以,傳送給qq郵箱就不行。經過半天的研究和考證最終確定了方案使用qq的POP3/SMTP郵件伺服器,具體設定和配置如下:
1.JAVA框架spring整合Email郵件服務程式碼配置
<!--①郵件伺服器-->
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="protocol" value="smtp"/>
<property name="host" value="smtp.qq.com"/>
<property name="port" value="465" /><!--不同的郵件提供商提供的埠不同-->
<property name="password" value="123456"/>
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.starttls.enable">true</prop>
<prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
<!--QQ要求的ssl連線郵件伺服器開啟SSL連線驗證- ->
</props>
</property>
</bean>
會員中心,使用者用郵箱找回密碼配置
<!-- 會員中心Action -->
<bean id="web.member.IndexAction" class="com.tch.action.member.IndexAction" scope="prototype">
<property name="tchMemberService" ref="tchMemberService"></property>
<property name="mailSender" ref="mailSender"></property>
</bean>
2.JAVA傳送郵件類
import java.util.Date;
import javax.mail.internet.MimeMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
public class SpringMail {
/**
* 傳送html郵件
* @param sender 郵件傳送人實體
* @param toEmail 接收人的郵件地址
* @param fromEmail 傳送人的郵件地址
* @param titleEmail 傳送郵件的標題
* @param contentEmail 傳送郵件的內容
* @throws Exception
*/
public void sendHTMLMail(JavaMailSender sender,String toEmail,String fromEmail,String titleEmail,String contentEmail)throws Exception {
MimeMessage msg = sender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(msg,true, "UTF-8");
// MimeMessageHelper helper = new MimeMessageHelper(msg);
helper.setTo(toEmail);
System.out.println(fromEmail+" >> "+toEmail);
helper.setFrom(fromEmail);
helper.setSubject(titleEmail);
helper.setSentDate(new Date());
helper.setText(contentEmail,true);
sender.send(msg);
System.out.println("成功傳送郵件!");
}
}
3.開始測試,不成功,控制檯報錯,錯誤資訊如下:
org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.AuthenticationFailedException
[15:24:47.678] {http--8080-2$13326029} org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.AuthenticationFailedException
許可權驗證失敗?
解決辦法:(我這裡建議使用QQ郵箱)
如果遇到該異常,應該先考慮一下你所配的傳送郵箱,有沒有對外開放POP3/SMTP服務,據我所知,現在網易已不對外開放了,QQ郵箱就有,但是QQ郵 箱在預設狀態下,也是沒有開啟這個服務的,得自己到“郵箱設定》賬戶”手動設定開啟POP3/SMTP服務,其它的郵箱伺服器,就只有嘗試下在說了。
4.繼續測試 還是不成功,錯誤資訊如下:
501 mail from address must be same as authorization user
原因:
主要原因是傳送類中 helper.setFrom(fromEmail);
setFrom的郵箱賬號必須和驗證伺服器的郵箱賬號相同。比如以上事例中的必須是helper.setFrom(“[email protected]”);
5.結論
以上配置主要還是取決於開放平臺的POP3/SMTP提供的服務,這一點很重要。