利用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="username" value=”123456@qq.com“/>

        <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]”);

 

解決辦法:設置網站發送郵件的郵箱地址爲[email protected]

 

 

5.結論

以上配置主要還是取決於開放平臺的POP3/SMTP提供的服務,這一點很重要。

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章