今天某同學在研究使用Java程序來發送郵件,使用的javax.mail來發送郵件,使用的騰訊的qq郵件服務器,用了原生的約定俗成的java代碼,調試了很長時間未果,出現了各種錯誤信息,然後對錯誤信息進行分析,當我看到的時候,我的頭腦閃現出了Spring Mail,原來看文章的時候,看過這個詞,但是沒有真正的去用這個框架去寫發送郵件的代碼,今天正好有機會,我就來幫某同學寫一段代碼。
我們來思考一個問題,Spring框架一般的思路是在applicationContext.xml裏面對所需Bean進行配置,然後在程序裏面自動注入(IOC)該類,那我們自己就寫一個Service,直接調用該bean就基本能實現我們的功能了。
現在就來看下自己用5分鐘寫的代碼,有不對的地方,歡迎大家留言指正。
applicationContext.xml
<!-- Spring Mail -->
<bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="${mail.smtp.host}" />
<property name="port" value="${mail.smtp.port}" />
<property name="username" value="${mail.smtp.username}" />
<property name="password" value="${mail.smtp.password}" />
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.timeout">${mail.smtp.timeout}</prop>
<prop key="mail.smtp.auth">${mail.smtp.auth}</prop>
<prop key="mail.smtp.starttls.enable">${mail.smtp.starttls.enable}</prop>
<prop key="mail.smtp.socketFactory.port">${mail.smtp.port}</prop>
<prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
<prop key="mail.smtp.socketFactory.fallback">false</prop>
</props>
</property>
</bean>
email.properties
mail.smtp.host=smtp.qq.com
mail.smtp.port=465
#QQ郵箱,寫自己的QQ郵箱,此處爲瞎寫的QQ郵箱
[email protected]
#QQ授權碼
mail.smtp.password=hhvngsvchtapbjia
mail.smtp.timeout=50000
mail.smtp.auth=true
mail.smtp.starttls.enable=true
SendEmailService.java
package com.nw.promotion.business.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
/**
*
* @author
* @date 2018-02-07
* @note 發送郵件服務,暫時配置騰訊郵箱
*/
@Service
public class SendEmailService {
private String setFrom;
private SimpleMailMessage simpleMailMessage;
public SendEmailService(){
setFrom = "[email protected]";//寫自己的QQ郵箱,此處爲瞎寫的QQ郵箱
}
@Autowired
private JavaMailSender javaMailSender;
/**
* @param mailTo 收件人
* @param subject 郵件主題
* @param context 郵件內容
* @throws Exception
*/
public void sendMail(String mailTo,String subject,String context) throws Exception {
Assert.notNull(mailTo);
Assert.notNull(subject);
Assert.notNull(context);
try {
simpleMailMessage = new SimpleMailMessage();
// 收件人
simpleMailMessage.setTo(mailTo);
// 郵件主題
simpleMailMessage.setSubject(subject);
// 郵件內容
simpleMailMessage.setText(context);
// 發件人
simpleMailMessage.setFrom(setFrom);
// 發送郵件
javaMailSender.send(simpleMailMessage);
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
}
經過驗證,某同事就可以發送郵件了,大多數情況還是個思路問題。慢慢去提升自己思考問題的能力。