基於SSM的spring傳送郵件的實現
阿新 • • 發佈:2018-11-14
郵件傳送功能是我們在開發中非常常見的一個需求,對於各種賬號的註冊繫結和賬號啟用都是非常好用的。因此今天我們來學習一下在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的朋友可以去看下。
對於文中的不足和建議,歡迎各位大佬留言指正!