今天某同学在研究使用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;
}
}
}
经过验证,某同事就可以发送邮件了,大多数情况还是个思路问题。慢慢去提升自己思考问题的能力。