• Home
  • About
    • yukiiris photo

      yukiiris

      少说话,多读书

    • Learn More
    • Twitter
    • Facebook
    • Instagram
    • Github
    • Steam
  • Posts
    • All Posts
    • All Tags
  • Projects
  • Moon

Java中使用spring发送邮件

11 Aug 2017

Reading time ~1 minute

前言

     Javamail以及spring中使用JavaMail都会踩到许多坑,记录一下,省得下次再配一晚上。

Mail

package spittr.util;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;

public class Mail {
    @Autowired
    private JavaMailSender mailSender;
    public void send(SimpleMailMessage mail)
    {
        mailSender.send(mail);
    }
}

JavaMailSender是一个接口,定义了send方法,可以发送一条MailMessage。这里采用自动注入的方式为Mail类里注入一个JavaMailsender。

xml的配置

 <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="host" value="${mail.host}"></property>
        <property name="port" value="${mail.port}"></property>
        <property name="javaMailProperties">
            <props>
                <prop key="mail.smtp.auth">true</prop>
                <prop key="mail.smtp.timeout">25000</prop>
                <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
                <prop key="mail.smtp.starttls.enable">true</prop>
            </props>
        </property>
        <property name="username" value="${mail.username}"></property>
        <property name="password" value="${mail.password}"></property>
    </bean>

在applicationContext.xml中(或者可以新建配置文件),加入这段代码。JavaMailSenderImpl是JavaMailSender的实现,可以在xml中为它配置一些属性。包括host、port等。这里要注意的是,如果要使用QQ邮箱,因为它的安全措施,要将mail.smtp.socketFactory.class设置为javax.net.ssl.SSLSocketFactory,mail.smtp.auth设置为true。

properties的配置

mail.host = smtp.qq.com
mail.username = {username}
mail.password = ********
mail.port = 465

QQ邮箱的host是smtp.qq.com,smtp协议的默认端口是465,写好username和password即可。

测试

public static void main(String[] args)
{
    ApplicationContext ac =
            new FileSystemXmlApplicationContext("src\\main\\webapp\\WEB-INF\\applicationContext.xml");
    Mail mail = (Mail)ac.getBean("mail");
    SimpleMailMessage message = new SimpleMailMessage();
    message.setTo("");
    message.setFrom("");
    message.setSubject("hello spring");
    message.setText("hello world");
    mail.send(message);
}

这里我原来用ClassPathXmlApplicationContext来加载配置文件,但一直失败,换成FileSystemXmlApplicationContext就行了不知道为什么orz。填入要发送的对象和自己的邮箱发送即可,可以看见发送成功。

注意事项

  • xml配置中要开启安全验证,尤其是ssl
  • 发送邮件的邮箱要开启smtp服务
  • JavaMail默认端口是25,不一样的话要改
  • QQ邮箱以及其它一些邮箱的第三方服务要求填写的密码是独立密码而不是原本的密码,独立密码要在邮箱里获取
  • 发送者要和配置的邮箱一致


Java, Spring Share Tweet +1