SpringEmail


跟多文章訪問我的博客網站: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*****[email protected]");//發送人服務器的用戶名
            senderImpl.setPassword("h*********jg");//此處爲qq郵箱的授權碼,而非郵箱密碼。
            senderImpl.setPort(465);//端口 默認25 ,或者587
            
            SimpleMailMessage message = new SimpleMailMessage();
            message.setTo("29****[email protected]");//收信人郵箱
            message.setFrom("15*****[email protected]");//發送人郵箱
            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******[email protected]");//發送人服務器的用戶名
            senderImpl.setPassword("h**********hjg");//此處爲qq郵箱的授權碼,而非郵箱密碼。
            senderImpl.setPort(465);//端口 默認25 ,或者587
            
            
            MimeMessage message = senderImpl.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom("15*****[email protected]");//發送方
            helper.setTo("29******[email protected]");//收件人
            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********[email protected]");//發送人服務器的用戶名
            senderImpl.setPassword("h**********jg");//此處爲qq郵箱的授權碼,而非郵箱密碼。
            senderImpl.setPort(465);//端口 默認25 ,或者587
            
            MimeMessage message = senderImpl.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom("15******[email protected]");//發送方
            helper.setTo("29*******[email protected]");//收件人
            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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章