天天看点

【java】Spring Mail 发送邮件示例

      今天某同学在研究使用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;
		}
	}
}
           

经过验证,某同事就可以发送邮件了,大多数情况还是个思路问题。慢慢去提升自己思考问题的能力。