Spring发送邮件案例

今天主要分享出spring框架辅助发邮件的功能,文章里的知识大部分来源于互联网,所以就开源出来了:

  • 问题分析
  • spring xml的配置
  • 发送简单文本邮件
  • 发送html风格的邮件

问题分析

从《Spring实战》中以及网上大多数关于借助spring发送邮件的代码都使用不了,主要的差别体现在IMAP,即Internet Message Access Protocol(互联网邮件访问协议)。 —— [ 百度百科 ]

每一个公司的邮箱关于这个IMAP的设置都不太一样,而且你需要自己去开启它们,同时阅读他们的IMAP服务开启的要求。
因为我主要使用的是qq邮箱,所以在这里教大家如何使用spring使用qq邮箱发送邮件。
首先需要做的是登录你的qq邮箱,点击邮箱设置然后账户,找到这个地方开启你的IMAP服务:

springboot qq 邮箱email_html


可以看到因为我已经打开

IMAP

服务,所以显示的是已开启。开启期间可能会出现关于你qq密码安全级别的设置,按照要求操作就行。


开启成功后会生成你的授权码,如果没有自动生成你就自己去点击生成授权码。


将这个授权码记录好,后面有用。


可以看一下qq邮箱官网的说明文档关于邮件服务器和端口的设置要求,默认情况下你的邮箱服务器端口是

25


springboot qq 邮箱email_发送邮件_02


关于密码这一项,改成你刚才生成的授权码。

spring xml的配置

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="host" value="smtp.qq.com"/>
    <property name="javaMailProperties">
        <props>
            <prop key="mail.smtp.auth">true</prop>
            <prop key="mail.smtp.timeout">25000</prop>
            <prop key="mail.smtp.port">465</prop>   
            <prop key="mail.smtp.socketFactory.fallback">false</prop>  
            <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop> 
        </props>
    </property>
    <property name="username" value="你的qq邮箱"/>
    <property name="password" value="你的授权码"/>
</bean>
这样配置的话,你的MailSender就配置好了。然后是测试的JAVA代码:

发送简单文本邮件

ApplicationContext ctx = new ClassPathXmlApplicationContext(
                "applicationContext-mail-qq.xml");
        JavaMailSender sender = (JavaMailSender) ctx.getBean("mailSender");
        SimpleMailMessage mail = new SimpleMailMessage();
        mail.setTo("邮件接收者的邮箱地址");
        mail.setFrom("邮件发送者的邮箱地址");

        mail.setSubject("邮件的主题");// 主题
        mail.setText("Hello Mail");// 邮件内容
        sender.send(mail);

发送html风格的邮件

除次之外,你还可以发送一些带有HTML格式的邮件,现在大部分收到的邮件都带有HTML格式,比如京东给你推荐的商品,facebook给你推荐的好友等等。
具体的代码如下,当然你可以自由发挥形成更漂亮的样子。

public static void sendSimpleHtml() throws MessagingException {
        // 获取JavaMailSender bean
        ApplicationContext ctx = new ClassPathXmlApplicationContext(
                "applicationContext-mail-qq.xml");
        JavaMailSender sender = (JavaMailSender) ctx.getBean("mailSender");
        JavaMailSenderImpl senderImpl = new JavaMailSenderImpl();
        MimeMessage mailMessage = senderImpl.createMimeMessage();
        // 设置utf-8或GBK编码,否则邮件会有乱码
        MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage,
                true, "utf-8");
        try {
            messageHelper.setTo("邮件接收者的邮箱地址");// 接受者
            messageHelper.setFrom("邮件发送者的邮箱地址");// 发送者
            messageHelper.setSubject("带有html风格的邮件");// 主题
            // 邮件内容,注意加参数true,表示启用html格式
             messageHelper.setText( 
                        "<html>" + 
                          "<body>" +
                            "<br>" +
                            "<div align='center'>" +
                              "<img src='cid:imageid'/>" +
                              "<br>" +
                              "<h4>" +
                                "<a href='http://www.baidu.com'>百度一下你就知道了</a>" +
                              "</h4>" +
                            "</div>" +
                          "</body>" +
                        "</html>", true);
             ClassPathResource image = new ClassPathResource("images/baidu.jpg");

             messageHelper.addInline("imageid", image);
            sender.send(mailMessage);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
如果想要在你的邮件中添加附件的话只需要在代码里面加上这些代码:
File file=new File("文件地址"); 
messageHelper.addAttachment(MimeUtility.encodeWord(file.getName()), file);