當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
SpringBoot 配合126邮箱实现邮件发送功能
生活随笔
收集整理的這篇文章主要介紹了
SpringBoot 配合126邮箱实现邮件发送功能
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
126郵箱郵件發送
- 授權碼申請
- pom依賴
- 郵件配置
- 代碼編寫
- 原始手工方式發送郵件
- Bean與配置自動裝載
- 發送純文本的郵件
- 發送包含HTML標簽的郵件
- 發送包含附件的郵件
- 發送包含靜態資源的文件
- 測試
SpringBoot 提供了系統級別郵箱服務,只需要導入一個郵箱啟動器然后進行配置就可以使用郵件發送
的功能了,簡直太方便了。
實現功能期間也踩了一些坑,為了方便后來者快速接入,特意記錄下來供有需要的人進行參考。
授權碼申請
開啟POP3/SMTP,然后按照步驟獲取授權碼
pom依賴
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId> </dependency>郵件配置
## 126郵箱配置 # 指定默認MimeMessage的編碼,默認為: UTF-8 spring.mail.default-encoding=UTF-8 spring.mail.host=smtp.126.com spring.mail.username=你的126郵箱地址 ## 指定SMTP server登陸授權碼 spring.mail.password=授權碼 # 指定SMTP server使用的協議,默認為: smtp spring.mail.protocol=smtp spring.mail.port=465 # 下面的四項是必須配置的,否則會因為驗證不通過而無法連接上郵件服務器, 這里一定要注意是ssl不是其它的認證方式 spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.ssl.enable=true spring.mail.properties.mail.smtp.ssl.required=true spring.mail.properties.mail.smtp.socketFactoryClass=javax.net.ssl.SSLSocketFactory #spring.mail.properties.mail.smtp.starttls.enable=true #spring.mail.properties.mail.smtp.starttls.required=true # 表示開啟debug模式,郵件發送過程的日志會在控制臺打印出來,方便排查問題 spring.mail.properties.mail.debug=true # 指定是否在啟動時測試郵件服務器連接,默認為false spring.mail.test-connection=false# 郵件接收者 #spring.mail.to.user=panyongjie@hfitech.com spring.mail.to.user=771006587@qq.com代碼編寫
原始手工方式發送郵件
這里提供一個手動的硬編碼的方式發送郵件的代碼示例是為了更好的理解自動讀取配置發送郵件所需要的流程
/*** 通過手動配置郵件信息,發送郵件* */ @Test public void sendEmailByManualConfig() throws MessagingException {String from = "你的126郵箱地址";String toUser = "771006587@qq.com";JavaMailSenderImpl mailSender = new JavaMailSenderImpl();// 郵箱服務器mailSender.setHost("smtp.126.com");// 端口號mailSender.setPort(465); // 25 465 994// 發送郵件的郵箱地址mailSender.setUsername(from);// 這里要用登錄授權碼,不是你登錄郵箱的密碼mailSender.setPassword("登錄授權碼");// 設置屬性, 下面各項缺一不可Properties pro = System.getProperties();// 打開調試開關pro.put("mail.debug", "true");pro.put("mail.smtp.auth", "true");pro.put("mail.smtp.ssl.enable", "true");pro.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");mailSender.setJavaMailProperties(pro);// 默認編碼方式mailSender.setDefaultEncoding("utf-8");// 協議類型mailSender.setProtocol("smtp");// 測試gongmailSender.testConnection();MimeMessage message = mailSender.createMimeMessage();try {MimeMessageHelper helper = new MimeMessageHelper(message, true);helper.setFrom(from); // 發送人helper.setTo(toUser); // 收件人helper.setSubject("使用JavaMailSenderImpl和MimeMessageHelper發送郵件"); // 標題helper.setText("這是我用Springboot自帶的mail啟動器給你發送的郵件,當前時間是: " + simpleDateFormat.format(new Date())); // 內容mailSender.send(message);System.out.println("郵件發送完畢!!!");} catch (Exception e) {e.printStackTrace();} }首先先對全局配置加載,后面會用到這些全局配置
Bean與配置自動裝載
import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.core.io.FileSystemResource; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMessageHelper;import javax.mail.MessagingException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeUtility; import java.io.File; import java.io.UnsupportedEncodingException; import java.util.Properties;/*** 郵箱測試** @author panyongjie* @date 2022/12/28*/ @SpringBootTest public class MallTest {/*** 自動注入的Bean*/@Autowiredprivate JavaMailSender mailSender;/*** 讀取配置文件中的郵件發送者*/@Value("${spring.mail.username}")private String from;/*** 讀取配置文件中的郵件接收者*/@Value("${spring.mail.to.user}")private String toUser;private final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); }發送純文本的郵件
/*** 讀取配置文件,自動轉載郵件發送Bean,然后發送純文本的郵件* */ @Test public void sendSimpleMail() {SimpleMailMessage message = new SimpleMailMessage();message.setFrom(from);message.setTo(toUser);message.setSubject("使用JavaMailSender和SimpleMailMessage發送郵件");message.setText("這是我用Springboot自帶的mail啟動器給你發送的郵件,當前時間是: " + simpleDateFormat.format(new Date())); // 內容mailSender.send(message); }發送包含HTML標簽的郵件
/*** 發送包含HTML標簽的郵件* */ @Test public void sendHtmlMessage() {MimeMessage message;message = mailSender.createMimeMessage();try {MimeMessageHelper helper = new MimeMessageHelper(message, true);// 創建郵件發送者地址helper.setFrom(new InternetAddress(MimeUtility.encodeText("發送者") + "<" + from + ">"));// 創建郵件發送者地址helper.setTo(new InternetAddress(MimeUtility.encodeText("接收方") + "<" + toUser + ">"));//標題helper.setSubject("這是一份內容包含HTML標簽的網頁");String content = "<h1>中獎通知</h1>" +"<p style='color:red;'>恭喜你獲得大樂透三等獎,點擊此處<a>https://www.baidu.com<a>進行領獎</p>";//第二個參數指定發送的是HTML格式helper.setText(content, true);} catch (MessagingException | UnsupportedEncodingException e) {e.printStackTrace();}mailSender.send(message); }發送包含附件的郵件
/** * 發送包含附件的郵件 * */ @Test public void sendAttachmentsMail() {MimeMessage message = null;try {message = mailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message, true);// 創建郵件發送者地址helper.setFrom(new InternetAddress(MimeUtility.encodeText("發送者") + "<" + from + ">"));// 創建郵件發送者地址helper.setTo(new InternetAddress(MimeUtility.encodeText("接收方") + "<" + toUser + ">"));helper.setSubject("報銷申請-報銷明細在附件里");String content = "<h1>報銷單</h1>" +"<p style='color:red;'>報銷詳情請下載附件進行查看</p>";//第二個參數指定發送的是HTML格式helper.setText(content, true);//添加附件helper.addAttachment("報銷費用.png", new FileSystemResource(new File("src/main/resources/static/fee.png")));} catch (Exception e) {e.printStackTrace();}mailSender.send(message); }發送包含靜態資源的文件
/*** 發送包含靜態資源的文件* 靜態資源可以包含在HTML標簽中進行展示,不用和附件一樣需要下載或者預覽才能看到內容* */ @Test public void sendInlineMail() {MimeMessage message = null;try {message = mailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message, true);// 創建郵件發送者地址helper.setFrom(new InternetAddress(MimeUtility.encodeText("發送者") + "<" + from + ">"));// 創建郵件發送者地址helper.setTo(new InternetAddress(MimeUtility.encodeText("接收方") + "<" + toUser + ">"));helper.setSubject("郵件里包含靜態資源,請注意查收");//第二個參數指定發送的是HTML格式helper.setText("<html><body>帶靜態資源的郵件內容 圖片:<img src='cid:fee'/></body></html>", true);FileSystemResource file = new FileSystemResource(new File("src/main/resources/static/fee.png"));helper.addInline("fee", file);} catch (Exception e) {e.printStackTrace();}mailSender.send(message); }測試
每一個測試用例都運行一遍,再去查看郵箱,可以看到各種樣式的郵件都發送成功了。
總結
以上是生活随笔為你收集整理的SpringBoot 配合126邮箱实现邮件发送功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UNCTF2022部分题解
- 下一篇: Docker上部署SpringBoot项