SpringEmail

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31351071/article/details/79978002


跟多文章访问我的博客网站:http://www.caoyong.xin:8080/blogger

SpringEmail

       今天来说一说使用Spring来发送邮件,在一些项目中会遇到用户注册的时候,需要提供邮箱地址,提供邮箱地址的目的在于,进行邮箱验证,所以我们需要在用户点击注册的时候,发送一封邮件给用户,然后用户点击邮箱中的邮件里的地址。我们这样就可以确认该用户,同意注册。


目录

  1. :准备环境

  2. :了解API

  3. :代码展示


1:准备环境

  今天使用的是Spring+QQ。使用Spring给我们的QQ发送一封邮件。SpringEmail封装了JavaEmail的API,在此基础上开发的。所以使用更加方便。

 首先,我们要有一些理论知识,发送邮件的大体过程是什么样的。

20170625163649311.png

通俗来说就是发送方邮件服务器和收件方邮件服务器之间的通信。在我们这里,QQ邮件服务器,既是发送方邮件服务器也是收件方邮件服务器(听不懂,接着往下看)。我们使用SpringEmail来演示,自己的QQ邮箱给别人发送一封QQ邮件,我们发送邮件是在QQ邮件服务器上发送的,而别人接受邮件也是通过QQ邮件服务器的。所以,QQ邮件服务器,既是发送方邮件服务器也是收件方邮件服务器。


接下来我们要去我们的QQ邮箱去设置一些东西。

1.1:登录自己的QQ邮箱,点击设置》账户

QQ截图20180417160110.png

QQ截图20180417160238.png

开启POP3/SMTP服务,这个时候会生成授权码,记住这个授权码,稍后会用。


1.2:准备架包

使用Spring的Email功能除Spring核心jar之外还需要Spring-support、javax.mail等jar包支持,需要构建到项目中。

<!-- springMVCEmail -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>4.3.14.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.7</version>
        </dependency>



2:了解API

Spring中将Javaemail的API封装好了,我们只需要拿来使用,所以我们要了解一下,有哪些API。

JavaMailSenderImpl类

   该类是JavaMailSender的实现类在spring-context-support架包中,用于设置邮件服务器的一些参数,比如服务器地址,端口,发送人用户名,授权码等等。下面我们就来了解一下

QQ截图20180417162025.png

setJavaMailProperties:需要一个Properties类型的参数,设置一些安全协议。

setHost:设置邮件服务器地址

setPort:设置端口号

setUserName :发件人的用户名

setPassword:发件人的密码或者授权码

send():我们可以看到重载了很多的send()方法,已发送不同类型的邮件,有普通邮件,有带附件的邮件,有带html的邮件。


MailMessage接口

这是一个借口用于设置发送的邮件的内容,收件人信息等内容,他有两个实现类MimeMailMessage和SimpleMailMessage


MailMessage定义的方法

QQ截图20180417163253.png

setFrom();发送人邮箱

setCc():抄送地址

setBcc():暗送地址

setTo():收件人邮箱地址,可以群发多人,使用字符串数组存储,收件人的邮件地址

setSubject():设置邮件主题

setText():设置文本格式的邮件内容


MimeMessageHelper类

是Spring封装用于发送邮件的工具类,可以发送带附件的,带图片的,带HTML格式的邮件

QQ截图20180417165918.png


3:代码展示

3.1:发送文本格式的邮件

public void senderEmail() {
        try {
            JavaMailSenderImpl senderImpl = new JavaMailSenderImpl();
            senderImpl.setHost("smtp.qq.com");//邮件服务器 如qq smtp.qq.com  163网易 smtp.163.com
            senderImpl.setUsername("15*****14@qq.com");//发送人服务器的用户名
            senderImpl.setPassword("h*********jg");//此处为qq邮箱的授权码,而非邮箱密码。
            senderImpl.setPort(465);//端口 默认25 ,或者587
            
            SimpleMailMessage message = new SimpleMailMessage();
            message.setTo("29****18@qq.com");//收信人邮箱
            message.setFrom("15*****14@qq.com");//发送人邮箱
            message.setSubject("这是邮件主题");//邮件主题
            message.setText("这是邮件内容");//邮件内容
            
            Properties prop = new Properties();
            MailSSLSocketFactory sf = new MailSSLSocketFactory();//安全协议
            sf.setTrustAllHosts(true);
            prop.put("mail.smtp.ssl.enable", "true");
            prop.put("mail.smtp.ssl.socketFactory", sf);
            prop.put("mail.smtp.auth", "true");//自动验证发送人邮箱用户名和授权码
            prop.put("mail.smtp.timeout", "25000");//超时时间
            senderImpl.setJavaMailProperties(prop);
            senderImpl.send(message);
            System.out.println("发送成功");
        } catch (GeneralSecurityException e) {
            e.printStackTrace();
        }
    }

结果:

QQ截图20180417171508.png



3.2:发送带附件的邮件

public void senderEmailAttachment() {
        try {
            JavaMailSenderImpl senderImpl = new JavaMailSenderImpl();
            senderImpl.setHost("smtp.qq.com");//邮件服务器 如qq smtp.qq.com  163网易 smtp.163.com
            senderImpl.setUsername("15******4@qq.com");//发送人服务器的用户名
            senderImpl.setPassword("h**********hjg");//此处为qq邮箱的授权码,而非邮箱密码。
            senderImpl.setPort(465);//端口 默认25 ,或者587
            
            
            MimeMessage message = senderImpl.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom("15*****4@qq.com");//发送方
            helper.setTo("29******8@qq.com");//收件人
            helper.setSubject("Spring Email Test1");//主题
            helper.setText("这是一个带有附件的邮件1");//内容
            File file = new File("E:\\attachment.txt");
            FileSystemResource attachment = new FileSystemResource(file);
            helper.addAttachment("您的附件", attachment);//附件
            
            Properties prop = new Properties();
            MailSSLSocketFactory sf = new MailSSLSocketFactory();//安全协议
            sf.setTrustAllHosts(true);
            prop.put("mail.smtp.ssl.enable", "true");
            prop.put("mail.smtp.ssl.socketFactory", sf);
            prop.put("mail.smtp.auth", "true");//自动验证发送人邮箱用户名和授权码
            prop.put("mail.smtp.timeout", "25000");//超时时间
            senderImpl.setJavaMailProperties(prop);
            senderImpl.send(message);
            System.out.println("邮件发送完毕");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

结果:

QQ截图20180417172002.png


3.3:发送HTML格式的邮件

public void senderEmailHtml() {
        try {
            JavaMailSenderImpl senderImpl = new JavaMailSenderImpl();
            senderImpl.setHost("smtp.qq.com");//邮件服务器 如qq smtp.qq.com  163网易 smtp.163.com
            senderImpl.setUsername("15********4@qq.com");//发送人服务器的用户名
            senderImpl.setPassword("h**********jg");//此处为qq邮箱的授权码,而非邮箱密码。
            senderImpl.setPort(465);//端口 默认25 ,或者587
            
            MimeMessage message = senderImpl.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom("15******14@qq.com");//发送方
            helper.setTo("29*******8@qq.com");//收件人
            helper.setSubject("Spring Email Test2");//主题
            
            StringBuilder info = new StringBuilder();//编写HTML
            info.append("<html><body><img src='cid:image'>");
            info.append("<h2>Hello Word!</h2>");
            info.append("</body></html>");
            helper.setText(info.toString(),true);
            ClassPathResource image = new ClassPathResource("01.jpg");
            helper.addInline("image", image);//添加图片
            
            Properties prop = new Properties();
            MailSSLSocketFactory sf = new MailSSLSocketFactory();//安全协议
            sf.setTrustAllHosts(true);
            prop.put("mail.smtp.ssl.enable", "true");
            prop.put("mail.smtp.ssl.socketFactory", sf);
            prop.put("mail.smtp.auth", "true");//自动验证发送人邮箱用户名和授权码
            prop.put("mail.smtp.timeout", "25000");//超时时间
            senderImpl.setJavaMailProperties(prop);
            senderImpl.send(message);
            System.out.println("邮件发送完毕");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

结果:

QQ截图20180417172407.png


阅读更多
想对作者说点什么?