1. 程式人生 > >基於SSM的spring傳送郵件的實現

基於SSM的spring傳送郵件的實現

郵件傳送功能是我們在開發中非常常見的一個需求,對於各種賬號的註冊繫結和賬號啟用都是非常好用的。因此今天我們來學習一下在spring中實現傳送郵件的功能。

1.匯入jar包。首先我們需要在我們spring專案中新增以下兩個jar包(我是使用的maven所以直接配置依賴資訊)
 

<!--spring支援-->
<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>5.0.0.RELEASE</version>
</dependency>
<!--郵件傳送-->
<dependency>
      <groupId>com.sun.mail</groupId>
      <artifactId>javax.mail</artifactId>
      <version>1.6.1</version>
</dependency>

2.配置郵件伺服器等資訊。

先在郵箱中設定開啟smtp和pop3服務然後拿到授權碼:

 

mail.properties檔案:

#伺服器主機名 smtp.xx.com
mail.smtp.host=smtp.163.com
[email protected]
#密碼/客戶端授權碼
mail.smtp.password=XXXXXXXXX
#編碼字元
mail.smtp.defaultEncoding=utf-8
#是否進行使用者名稱密碼校驗
mail.smtp.auth=true
#設定超時時間
mail.smtp.timeout=20000


3.配置spring-mybatis.xml。在配置檔案中匯入properties檔案的屬性:

 <!--郵件配置-->
<context:property-placeholder location="classpath:config/mail.properties" ignore-unresolvable="true"/>
    

其中ignore-unresolvable="true"屬性是配置檔案中存在多個property-placeholder時出現解析不了的佔位符進行忽略掉,詳細解釋可以參考這位大神的部落格:property-placeholder

然後注入一個郵件傳送的bean介面:

<!--配置郵件介面-->
<bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
     <property name="host" value="${mail.smtp.host}"/>
     <property name="username" value="${mail.smtp.username}"/>
     <property name="password" value="${mail.smtp.password}"/>
     <property name="defaultEncoding" value="${mail.smtp.defaultEncoding}"/>
     <property name="javaMailProperties">
         <props>
             <prop key="mail.smtp.auth">${mail.smtp.auth}</prop>
             <prop key="mail.smtp.timeout">${mail.smtp.timeout}</prop>
         </props>
     </property>
</bean>

所有配置都完成了

4.編寫一個測試類來測試一下:

package com.ssm.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.io.IOException;
import java.util.Properties;

/**
 * created by viking on 2018/07/17
 * 測試郵件傳送controller
 */
@RestController
@RequestMapping("mail")
public class SendMailController {
    @Autowired
    private JavaMailSender javaMailSender;//在spring中配置的郵件傳送的bean

    @RequestMapping("send")
    public Object sendMail03(){
        MimeMessage mMessage=javaMailSender.createMimeMessage();//建立郵件物件
        MimeMessageHelper mMessageHelper;
        Properties prop = new Properties();
        String from;
        try {
            //從配置檔案中拿到發件人郵箱地址
            prop.load(this.getClass().getResourceAsStream("/config/mail.properties"));
            from = prop.get("mail.smtp.username")+"";
            mMessageHelper=new MimeMessageHelper(mMessage,true);
            mMessageHelper.setFrom(from);//發件人郵箱
            mMessageHelper.setTo("[email protected]");//收件人郵箱
            mMessageHelper.setSubject("Spring的郵件傳送");//郵件的主題
            mMessageHelper.setText("<p>這是使用spring的郵件功能傳送的一封郵件</p><br/>" +
                    "<a href='https://blog.csdn.net/Mr__Viking'>開啟我的部落格主頁</a><br/>" +
                    "<img src='cid:fengye'>",true);//郵件的文字內容,true表示文字以html格式開啟
            File file=new File("F:/img/楓葉.png");//在郵件中新增一張圖片
            FileSystemResource resource=new FileSystemResource(file);
            mMessageHelper.addInline("fengye", resource);//這裡指定一個id,在上面引用
            mMessageHelper.addAttachment("楓葉.png", resource);//在郵件中新增一個附件
            javaMailSender.send(mMessage);//傳送郵件
        } catch (MessagingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "傳送成功";
    }
}

5.測試結果。直接上圖:

     訪問介面執行程式

    檢視郵箱的收到的郵件資訊

收到的郵件和我們預期的一樣,說明我們的功能完美的實現了。

這個郵件傳送功能的實現我參考了下面這位博主的部落格:傳送門 他是用spring實現的,如果是隻用了spring的朋友可以去看下。

對於文中的不足和建議,歡迎各位大佬留言指正!