国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

結(jié)合Spring發(fā)送郵件的四種正確姿勢,你知道幾種?

doodlewind / 2309人閱讀

摘要:我拿網(wǎng)易郵箱賬號舉例子,那么我們?nèi)绾尾拍茏屇愕泥]箱賬號可以利用第三方發(fā)送郵件這里的第三方就是我們即將編寫的程序。

一 前言 測試所使用的環(huán)境

測試使用的環(huán)境是企業(yè)主流的SSM 框架即 SpringMVC+Spring+Mybatis。為了節(jié)省時間,我直接使用的是我上次的“SSM項目中整合Echarts開發(fā)”該項目已經(jīng)搭建完成的SSM環(huán)境。

標(biāo)題說的四種姿勢指的是哪四種姿勢?

發(fā)送text格式的郵件

發(fā)送HTML格式的郵件

基于FreeMarker模板引擎發(fā)送郵件

基于Velocity模板引擎發(fā)送郵件

如何獲取以及運行我的Demo

Github地址:https://github.com/Snailclimb/J2ee-Advanced。

你可以選擇直接下載或者直接在DOS窗口運行:git clone https://github.com/Snailclimb/J2ee-Advanced.git命令,這樣項目就被拷貝到你的電腦了。

然后選擇導(dǎo)入Maven項目即可(不懂Maven的可以自行百度學(xué)習(xí)).

二 準(zhǔn)備工作

既然要發(fā)送郵件,那么你首先要提供一個能在第三方軟件上發(fā)送郵件功能的賬號。在這里,我選擇的網(wǎng)易郵箱賬號。

我拿網(wǎng)易郵箱賬號舉例子,那么我們?nèi)绾尾拍茏屇愕泥]箱賬號可以利用第三方發(fā)送郵件(這里的第三方就是我們即將編寫的程序)。

大家應(yīng)該清楚:客戶端和后臺交互數(shù)據(jù)的時候用到了Http協(xié)議,那么相應(yīng)的,郵箱傳輸也有自己的一套協(xié)議,如SMTP,POP3,IMAP。

開啟POP3/SMTP/IMAP服務(wù)

所以,我們第一步首先要去開啟這些服務(wù),如下圖所示:

如果你未開啟該服務(wù)的話,運行程序會報如下錯誤(配置文件中配置的密碼是你的授權(quán)碼而不是你登錄郵箱的密碼,授權(quán)碼是你第三方登錄的憑證):

HTTP Status 500 - Request processing failed; nested exception is org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.AuthenticationFailedException: 550 User has no permission
JavaMail介紹

我們需要用到的發(fā)郵件的核心jar包,所以這里好好介紹一下。

JavaMail是由Sun定義的一套收發(fā)電子郵件的API,不同的廠商可以提供自己的實現(xiàn)類。但它并沒有包含在JDK中,而是作為JavaEE的一部分。廠商所提供的JavaMail服務(wù)程序可以有選擇地實現(xiàn)某些郵件協(xié)議,常見的郵件協(xié)議包括:

SMTP:簡單郵件傳輸協(xié)議,用于發(fā)送電子郵件的傳輸協(xié)議;

POP3:用于接收電子郵件的標(biāo)準(zhǔn)協(xié)議;

IMAP:互聯(lián)網(wǎng)消息協(xié)議,是POP3的替代協(xié)議。

這三種協(xié)議都有對應(yīng)SSL加密傳輸?shù)膮f(xié)議,分別是SMTPS,POP3S和IMAPS。

我們?nèi)绻褂肑avaMail的話,需要自己引用相應(yīng)的jar包,如下圖所示:

        
            javax.mail
            mail
            1.4.7
        
相關(guān)配置文件

下圖是除了pom.xml之外用到的其他所有配置文件

pom.xml

需要用到的jar包。

        
        
              org.springframework
              spring-context-support
              5.0.0.RELEASE
        
        
        
            javax.mail
            mail
            1.4.7
        
        
        
            org.freemarker
            freemarker
            2.3.23
        
        
        
            org.apache.velocity
            velocity
            1.7
        
        
            org.apache.velocity
            velocity-tools
            2.0
        
mail.properties
#服務(wù)器主機名
mail.smtp.host=smtp.163.com
#你的郵箱地址
mail.smtp.username=koushuangbwcx@163.com
#你的授權(quán)碼
mail.smtp.password=cSdN153963000
#編碼格式
mail.smtp.defaultEncoding=utf-8
#是否進行用戶名密碼校驗
mail.smtp.auth=true
#設(shè)置超時時間
mail.smtp.timeout=20000

如果你的授權(quán)碼填寫錯誤的話,會報如下錯誤:

TTP Status 500 - Request processing failed; nested exception is org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.AuthenticationFailedException: 535 Error: authentication failed
velocity.properties
input.encoding=UTF-8  
output.encoding=UTF-8  
contentType=ext/html;charset=UTF-8
directive.foreach.counter.name=loopCounter  
directive.foreach.counter.initial.value=0
applicationContext-email.xml



    
    

    
    
        
        
        
        
        
            
                ${mail.smtp.auth}
                ${mail.smtp.timeout}
            
        
    
    
    
        
        
        
            
                UTF-8
            
        
    


    
    
        
        
    

三 開始編寫工具類

我這里說是工具類,其實只是我自己做了簡單的封裝,實際項目使用的話,可能會需要根據(jù)需要簡單修改一下。

所有用到的類如下圖所示:

發(fā)送Text或者HTML格式的郵件的方法
    /**
     * 
     * Text或者HTML格式郵件的方法
     * 
     * @param text
     *            要發(fā)送的內(nèi)容
     * @param subject
     *            郵件的主題也就是郵件的標(biāo)題
     * @param location
     *            文件的地址
     * @param emailAdress
     *            目的地
     * @param javaMailSender
     *            發(fā)送郵件的核心類(在xml文件中已經(jīng)配置好了)
     * @param type
     *            如果為true則代表發(fā)送HTML格式的文本
     * @return
     * @throws TemplateException
     */
    public String sendMail(String text, String subject, String location, String emailAdress,
            JavaMailSender javaMailSender, Boolean type) {
        MimeMessage mMessage = javaMailSender.createMimeMessage();// 創(chuàng)建郵件對象
        MimeMessageHelper mMessageHelper;
        Properties prop = new Properties();
        try {
            // 從配置文件中拿到發(fā)件人郵箱地址
            prop.load(this.getClass().getResourceAsStream("/mail.properties"));
            String from = prop.get("mail.smtp.username") + "";
            mMessageHelper = new MimeMessageHelper(mMessage, true, "UTF-8");
            // 發(fā)件人郵箱
            mMessageHelper.setFrom(from);
            // 收件人郵箱
            mMessageHelper.setTo(emailAdress);
            // 郵件的主題也就是郵件的標(biāo)題
            mMessageHelper.setSubject(subject);
            // 郵件的文本內(nèi)容,true表示文本以html格式打開
            if (type) {
                mMessageHelper.setText(text, true);
            } else {
                mMessageHelper.setText(text, false);
            }

            // 通過文件路徑獲取文件名字
            String filename = StringUtils.getFileName(location);
            // 定義要發(fā)送的資源位置
            File file = new File(location);
            FileSystemResource resource = new FileSystemResource(file);
            FileSystemResource resource2 = new FileSystemResource("D:/email.txt");
            mMessageHelper.addAttachment(filename, resource);// 在郵件中添加一個附件
            mMessageHelper.addAttachment("JavaApiRename.txt", resource2);//
            // 在郵件中添加一個附件
            javaMailSender.send(mMessage);// 發(fā)送郵件
        } catch (MessagingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return "發(fā)送成功";
    }

我在sendMail()方法中添加了一個boolean類型的變量type作為標(biāo)志,如果為ture就表示發(fā)送html格式的郵件否則直接發(fā)送text格式的郵件。實現(xiàn)起來很簡單,我們通過下面的判斷語句就可以實現(xiàn)了

            if (type) {
                //表示文本以html格式打開
                mMessageHelper.setText(text, true);
            } else {
                mMessageHelper.setText(text, false);
            }

效果:

基于FreeMarker模板引擎發(fā)送郵件

下圖是我們用到的FreeMarker模板文件以及Velocity模板文件的位置。

    /**
     * FreeMarker模板格式的郵件的方法
     * 
     * @param subject
     *            郵件的主題也就是郵件的標(biāo)題
     * @param location
     *            文件的地址
     * @param emailAdress
     *            目的地
     * @param javaMailSender
     *            發(fā)送郵件的核心類(在xml文件中已經(jīng)配置好了)
     * @param freeMarkerConfiguration
     *            freemarker配置管理類
     * @return
     * @throws TemplateException
     */
    public String sendMailFreeMarker(String subject, String location, String emailAdress, JavaMailSender javaMailSender,
            Configuration freeMarkerConfiguration) {
        MimeMessage mMessage = javaMailSender.createMimeMessage();// 創(chuàng)建郵件對象
        MimeMessageHelper mMessageHelper;
        Properties prop = new Properties();
        try {
            // 從配置文件中拿到發(fā)件人郵箱地址
            prop.load(this.getClass().getResourceAsStream("/mail.properties"));
            String from = prop.get("mail.smtp.username") + "";
            mMessageHelper = new MimeMessageHelper(mMessage, true);
            // 發(fā)件人郵箱
            mMessageHelper.setFrom(from);
            // 收件人郵箱
            mMessageHelper.setTo(emailAdress);
            // 郵件的主題也就是郵件的標(biāo)題
            mMessageHelper.setSubject(subject);
            // 解析模板文件
            mMessageHelper.setText(getText(freeMarkerConfiguration), true);
            // 通過文件路徑獲取文件名字
            String filename = StringUtils.getFileName(location);
            // 定義要發(fā)送的資源位置
            File file = new File(location);
            FileSystemResource resource = new FileSystemResource(file);
            mMessageHelper.addAttachment(filename, resource);// 在郵件中添加一個附件
            javaMailSender.send(mMessage);// 發(fā)送郵件
        } catch (MessagingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return "發(fā)送成功";
    }
    
      /**
     * 讀取freemarker模板的方法
     */
    private String getText(Configuration freeMarkerConfiguration) {
        String txt = "";
        try {
            Template template = freeMarkerConfiguration.getTemplate("email.ftl");
            // 通過map傳遞動態(tài)數(shù)據(jù)
            Map map = new HashMap();
            map.put("user", "Snailclimb");
            // 解析模板文件
            txt = FreeMarkerTemplateUtils.processTemplateIntoString(template, map);
            System.out.println("getText()->>>>>>>>>");// 輸出的是HTML格式的文檔
            System.out.println(txt);
        } catch (IOException e) {
            // TODO 異常執(zhí)行塊!
            e.printStackTrace();
        } catch (TemplateException e) {
            // TODO 異常執(zhí)行塊!
            e.printStackTrace();
        }

        return txt;
    }

我們通過getText(Configuration freeMarkerConfiguration)方法讀取freemarker模板,返回的格式如下圖所示:




測試



你好Snailclimb

其實就是HTML,然后我們就可以像前面發(fā)送HTML格式郵件的方式發(fā)送這端消息了。

email.ftl




測試



你好${user}

效果:

不知道為啥,騰訊每次把我使用模板引擎發(fā)的郵件直接放到垃圾箱。大家如果遇到接收不到郵件,但是又沒報錯的情況,可以看看是不是到了自己郵箱的垃圾箱。

基于Velocity模板引擎發(fā)送郵件
    /**
     * 
     * @param subject
     *            郵件主題
     * @param location
     *            收件人地址
     * @param emailAdress
     *            目的地
     * @param javaMailSender
     *            發(fā)送郵件的核心類(在xml文件中已經(jīng)配置好了)
     * @param velocityEngine
     *            Velocity模板引擎
     * @return
     */
    public String sendMailVelocity(String subject, String location, String emailAdress, JavaMailSender javaMailSender,
            VelocityEngine velocityEngine) {
        MimeMessage mMessage = javaMailSender.createMimeMessage();// 創(chuàng)建郵件對象
        MimeMessageHelper mMessageHelper;
        Properties prop = new Properties();
        try {
            // 從配置文件中拿到發(fā)件人郵箱地址
            prop.load(this.getClass().getResourceAsStream("/mail.properties"));
            System.out.println(this.getClass().getResourceAsStream("/mail.properties"));
            String from = prop.get("mail.smtp.username") + "";
            mMessageHelper = new MimeMessageHelper(mMessage, true, "UTF-8");
            // 發(fā)件人郵箱
            mMessageHelper.setFrom(from);
            // 收件人郵箱
            mMessageHelper.setTo(emailAdress);
            // 郵件的主題也就是郵件的標(biāo)題
            mMessageHelper.setSubject(subject);
            Map map = new HashMap<>();
            // 獲取日期并格式化
            Date date = new Date();
            DateFormat bf = new SimpleDateFormat("yyyy-MM-dd E a HH:mm:ss");
            String str = bf.format(date);
            map.put("date", str);
            String content = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, "email.vm", "UTF-8", map);
            mMessageHelper.setText(content, true);
            // 通過文件路徑獲取文件名字
            String filename = StringUtils.getFileName(location);
            // 定義要發(fā)送的資源位置
            File file = new File(location);
            FileSystemResource resource = new FileSystemResource(file);
            mMessageHelper.addAttachment(filename, resource);// 在郵件中添加一個附件
            // mMessageHelper.addAttachment("JavaApiRename.txt", resource2);//
            // 在郵件中添加一個附件
            javaMailSender.send(mMessage);// 發(fā)送郵件
        } catch (MessagingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return "發(fā)送成功";
    }

email.vm




    
    
 

今天的日期是:${date}

效果:

controller層
/**
 * 測試郵件發(fā)送controller
 * @author Snailclimb
 */
@RestController
@RequestMapping("mail")
public class SendMailController {
    @Autowired
    private JavaMailSender javaMailSender;// 在spring中配置的郵件發(fā)送的bean
    @Autowired
    private Configuration configuration;
    @Autowired
    private VelocityEngine velocityEngine;

    // text
    @RequestMapping("send")
    public String sendEmail() {
        EmailUtils emailUtils = new EmailUtils();
        return emailUtils.sendMail("大傻子大傻子大傻子,你好!!!", "發(fā)送給我家大傻子的~", "D:/picture/meizi.jpg", "1361583339@qq.com",
                javaMailSender, false);
    }

    // html
    @RequestMapping("send2")
    public String sendEmail2() {
        EmailUtils emailUtils = new EmailUtils();
        return emailUtils.sendMail(
                "

大傻子大傻子大傻子,你好!!!


" + " 四 總結(jié)

上面我們總結(jié)了Spring發(fā)送郵件的四種正確姿勢,并且將核心代碼提供給了大家。代碼中有我很詳細的注釋,所以我對于代碼以及相關(guān)類的講解很少,感興趣的同學(xué)可以自行學(xué)習(xí)。最后,本項目Github地址:https://github.com/Snailclimb/J2ee-Advanced。

五 推薦一個自己的開源的后端文檔

Java-Guide: Java面試通關(guān)手冊(Java學(xué)習(xí)指南)。(star:1.4k)

Github地址:https://github.com/Snailclimb/Java-Guide

文檔定位:一個專門為Java后端工程師準(zhǔn)備的開源文檔,相信不論你是Java新手還是已經(jīng)成為一名Java工程師都能從這份文檔中收獲到一些東西。

你若盛開,清風(fēng)自來。 歡迎關(guān)注我的微信公眾號:“Java面試通關(guān)手冊”,一個有溫度的微信公眾號。公眾號有大量資料,回復(fù)關(guān)鍵字“1”你可能看到想要的東西哦!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/76677.html

相關(guān)文章

  • Spring Boot 2.x(四):整合Mybatis四種方式

    摘要:前言目前的大環(huán)境下,使用作為持久層框架還是占了絕大多數(shù)的,下面我們來說一下使用的幾種姿勢。測試測試的程序與之前的一致,我們直接訪問,可以看到成功的結(jié)果姿勢三使用的姿勢和可以與上面兩種方式進行結(jié)合,。。。接口的實現(xiàn)是通過。然后我們將的改為。 前言 目前的大環(huán)境下,使用Mybatis作為持久層框架還是占了絕大多數(shù)的,下面我們來說一下使用Mybatis的幾種姿勢。 姿勢一:零配置注解開發(fā) 第...

    felix0913 評論0 收藏0
  • @ConfigurationProperties 注解使用姿勢,這一篇就夠了

    摘要:在項目中,為滿足以上要求,我們將大量的參數(shù)配置在或文件中,通過注解,我們可以方便的獲取這些參數(shù)值使用配置模塊假設(shè)我們正在搭建一個發(fā)送郵件的模塊。這使得在不影響其他模塊的情況下重構(gòu)一個模塊中的屬性變得容易。 在編寫項目代碼時,我們要求更靈活的配置,更好的模塊化整合。在 Spring Boot 項目中,為滿足以上要求,我們將大量的參數(shù)配置在 application.properties 或...

    SolomonXie 評論0 收藏0
  • @ConfigurationProperties 注解使用姿勢,這一篇就夠了

    摘要:在項目中,為滿足以上要求,我們將大量的參數(shù)配置在或文件中,通過注解,我們可以方便的獲取這些參數(shù)值使用配置模塊假設(shè)我們正在搭建一個發(fā)送郵件的模塊。這使得在不影響其他模塊的情況下重構(gòu)一個模塊中的屬性變得容易。 在編寫項目代碼時,我們要求更靈活的配置,更好的模塊化整合。在 Spring Boot 項目中,為滿足以上要求,我們將大量的參數(shù)配置在 application.properties 或...

    KoreyLee 評論0 收藏0
  • Java開發(fā) 大廠面試整理

    摘要:用戶態(tài)不能干擾內(nèi)核態(tài)所以指令就有兩種特權(quán)指令和非特權(quán)指令不同的狀態(tài)對應(yīng)不同的指令。非特權(quán)指令所有程序均可直接使用。用戶態(tài)常態(tài)目態(tài)執(zhí)行非特權(quán)指令。 這是我今年從三月份開始,主要的大廠面試經(jīng)過,有些企業(yè)面試的還沒來得及整理,可能有些沒有帶答案就發(fā)出來了,還請各位先思考如果是你怎么回答面試官?這篇文章會持續(xù)更新,請各位持續(xù)關(guān)注,希望對你有所幫助! 面試清單 平安產(chǎn)險 飛豬 上汽大通 浩鯨科...

    Scorpion 評論0 收藏0
  • Spring Boot 郵件發(fā)送的 5 種姿勢

    摘要:也就是說用戶先將郵件投遞到騰訊的服務(wù)器這個過程就使用了協(xié)議,然后騰訊的服務(wù)器將郵件投遞到網(wǎng)易的服務(wù)器這個過程也依然使用了協(xié)議,服務(wù)器就是用來收郵件。 郵件發(fā)送其實是一個非常常見的需求,用戶注冊,找回密碼等地方,都會用到,使用 JavaSE 代碼發(fā)送郵件,步驟還是挺繁瑣的,Spring Boot 中對于郵件發(fā)送,提供了相關(guān)的自動化配置類,使得郵件發(fā)送變得非常容易,本文我們就來一探究竟!看...

    W4n9Hu1 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<