000 基於Spring boot發送郵件


  發送郵件的程序,使用QQ的服務器,經過測試,完全可行。可復現

一:准備工作

1.找到賬號的授權碼

  這個是程序需要使用的。

  在設置中查找。

 

2.新建項目的目錄

  

 

二:完整的程序代碼

1.pom.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6 
 7     <groupId>com.jun</groupId>
 8     <artifactId>message</artifactId>
 9     <version>1.0-SNAPSHOT</version>
10 
11     <dependencies>
12         <dependency>
13             <groupId>org.springframework</groupId>
14             <artifactId>spring-context-support</artifactId>
15             <version>5.1.7.RELEASE</version>
16         </dependency>
17         <dependency>
18             <groupId>org.springframework.boot</groupId>
19             <artifactId>spring-boot-starter-mail</artifactId>
20             <version>2.1.6.RELEASE</version>
21         </dependency>
22         <dependency>
23             <groupId>org.springframework.boot</groupId>
24             <artifactId>spring-boot-starter-test</artifactId>
25             <version>2.1.5.RELEASE</version>
26             <scope>test</scope>
27         </dependency>
28     </dependencies>
29 </project>

 

2.mail.properties

  這個需要寫在測試類的配置文件中,因為在讀取的時候,使用的是測試類中的配置文件

1 #======================當前自己發送端的信息====================
2 #郵件服務器主機名
3 mailserver.host=smtp.qq.com
4 #郵件服務器監聽的端口號
5 mailserver.port=465
6 #用戶名稱
7 mailserver.username=1354440850@qq.com
8 #開啟服務器后,生成的授權碼
9 mailserver.password=ohikrolx

 

3.MailConfig

 1 package spittr.config;
 2 
 3 import org.springframework.context.annotation.Bean;
 4 import org.springframework.context.annotation.ComponentScan;
 5 import org.springframework.context.annotation.Configuration;
 6 import org.springframework.context.annotation.PropertySource;
 7 import org.springframework.core.env.Environment;
 8 import org.springframework.mail.javamail.JavaMailSenderImpl;
 9 
10 import java.util.Properties;
11 
12 @Configuration
13 @ComponentScan("spittr")
14 @PropertySource("classpath:mail.properties")
15 public class MailConfig {
16     @Bean
17     public JavaMailSenderImpl mailSender(Environment env) {
18         //spring自帶了一個MailSender的實現接口
19         JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
20         //郵件服務器主機名
21         mailSender.setHost(env.getProperty("mailserver.host"));
22         //郵件服務器監聽的端口號
23         mailSender.setPort(Integer.parseInt(env.getProperty("mailserver.port")));
24         //用戶名稱
25         mailSender.setUsername(env.getProperty("mailserver.username"));
26         //密碼,這里不是郵箱的密碼,而是開啟服務器后,生成的授權碼
27         mailSender.setPassword(env.getProperty("mailserver.password"));
28         //ssl加密,需要加,否則無法運行
29         Properties props = System.getProperties();
30         final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
31         props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
32         mailSender.setJavaMailProperties(props);
33         return mailSender;
34     }
35 }

 

4.spitter.java

 1 package spittr.domain;
 2 
 3 public class Spitter {
 4     //編號
 5      private Long id;
 6     //用戶名稱
 7     private String username;
 8     //用戶密碼
 9     private String password;
10     //發件人的名稱
11     private String fullName;
12     //收件人的郵箱
13     private String email;
14     //判斷郵件是否帶有附件
15     private boolean updateByEmail;
16 
17     public Spitter(Long id, String username, String password, String fullName, String email, boolean updateByEmail){
18         this.id=id;
19         this.username=username;
20         this.password=password;
21         this.fullName=fullName;
22         this.email=email;
23         this.updateByEmail=updateByEmail;
24     }
25 
26     public Long getId() {
27         return id;
28     }
29 
30     public void setId(Long id) {
31         this.id = id;
32     }
33 
34     public String getUsername() {
35         return username;
36     }
37 
38     public void setUsername(String username) {
39         this.username = username;
40     }
41 
42     public String getPassword() {
43         return password;
44     }
45 
46     public void setPassword(String password) {
47         this.password = password;
48     }
49 
50     public String getFullName() {
51         return fullName;
52     }
53 
54     public void setFullName(String fullName) {
55         this.fullName = fullName;
56     }
57 
58     public String getEmail() {
59         return email;
60     }
61 
62     public void setEmail(String email) {
63         this.email = email;
64     }
65 
66     public boolean isUpdateByEmail() {
67         return updateByEmail;
68     }
69 
70     public void setUpdateByEmail(boolean updateByEmail) {
71         this.updateByEmail = updateByEmail;
72     }
73 }

 

5.Sputtle

 1 package spittr.domain;
 2 
 3 import java.util.Date;
 4 
 5 public class Spittle {
 6     //編號
 7     private final Long id;
 8     //郵件的內容
 9     private final String text;
10     //發送的時間
11     private final Date postedTime;
12     //郵件信息的對象
13     private Spitter spitter;
14 
15     public Spittle(Long id, String text, Date postedTime, Spitter spitter) {
16         this.id = id;
17         this.text = text;
18         this.postedTime = postedTime;
19         this.spitter = spitter;
20     }
21 
22     public Long getId() {
23         return id;
24     }
25 
26     public String getText() {
27         return text;
28     }
29 
30     public Date getPostedTime() {
31         return postedTime;
32     }
33 
34     public Spitter getSpitter() {
35         return spitter;
36     }
37 
38     public void setSpitter(Spitter spitter) {
39         this.spitter = spitter;
40     }
41 }

 

6.SpitterMailService

 1 package spittr.email;
 2 
 3 import spittr.domain.Spittle;
 4 
 5 import javax.mail.MessagingException;
 6 
 7 public interface SpitterMailService {
 8     public abstract void sendSimpleSpittleEmail(String to, Spittle spittle);
 9     public abstract void sendSpittleEmailWithAttachment(String to, Spittle spittle) throws MessagingException;
10     public abstract void sendRichSpitterEmail(String to,Spittle spittle)throws MessagingException;
11 
12 }

 

7.SpitterMailServiceImpl

 1 package spittr.email;
 2 
 3 //import org.apache.velocity.app.VelocityEngine;
 4 import org.springframework.beans.factory.annotation.Autowired;
 5 import org.springframework.core.io.ClassPathResource;
 6 import org.springframework.mail.SimpleMailMessage;
 7 import org.springframework.mail.javamail.JavaMailSender;
 8 import org.springframework.mail.javamail.MimeMessageHelper;
 9 import org.springframework.stereotype.Component;
10 import spittr.domain.Spittle;
11 
12 import javax.mail.MessagingException;
13 import javax.mail.internet.MimeMessage;
14 
15 @Component
16 public class SpitterMailServiceImpl implements SpitterMailService {
17     //郵件發送的核心類
18     private JavaMailSender mailSender;
19 
20     //通過構造方法將JavaMailSender依賴注入進來
21     @Autowired
22     public SpitterMailServiceImpl(JavaMailSender mailSender) {
23         this.mailSender = mailSender;
24     }
25 
26     /* 創建一封簡單的郵件 */
27     public void sendSimpleSpittleEmail(String to, Spittle spittle) {
28         //通過這個對象封裝信息,相當於信封
29         SimpleMailMessage message = new SimpleMailMessage();
30         //獲取spittle對象中的收件人名字
31         String spitterName = spittle.getSpitter().getFullName();
32         //發件人
33         message.setFrom("1354440850@qq.com");
34         //收件人
35         message.setTo(to);
36         //郵件主題
37         message.setSubject("New spittle from " + spitterName);
38         //郵件內容
39         message.setText("haha,hui,這個是通過程序發送的!");
40         //發送郵件
41         mailSender.send(message);
42     }
43 
44     /* 創建一封帶有圖片附件的郵件 */
45     public void sendSpittleEmailWithAttachment(String to, Spittle spittle) throws MessagingException {
46         //通過郵件發送器的createMimeMessage方法構建可含附件的郵件
47         MimeMessage message = mailSender.createMimeMessage();
48         // 第一個參數是郵件的對象
49         // 第二個參數為true表示這個消息是multipart類型的消息(表示是帶有附件的郵件)
50         // 第三個參數是防止中文亂碼
51         MimeMessageHelper helper = new MimeMessageHelper(message, true, "utf-8");
52         //獲取收件人名,用於后面發送郵件做主題
53         String spitterName = spittle.getSpitter().getFullName();
54         //寄件人
55         helper.setFrom("1354440850@qq.com");
56         //收件人
57         helper.setTo(to);
58         //郵件的主題內容
59         helper.setSubject("New spittle from " + spitterName);
60         //郵件的發送內容
61         helper.setText(spitterName + " says: " + spittle.getText());
62         //通過路徑獲取圖片附件
63         ClassPathResource couponImage = new ClassPathResource("/collateral/coupon.jpg");
64         //第一個參數是圖片的名稱,到時候收件人收到的附件名
65         //第二個參數是圖片附件的資源
66         helper.addAttachment("Coupon.jpg", couponImage);
67         //send方法是發送郵件的方法
68         mailSender.send(message);
69 
70     }
71 
72 
73     /*  創建一封嵌套圖片的文本郵件*/
74     public void sendRichSpitterEmail(String to, Spittle spittle) throws MessagingException {
75         //創建一封富文本郵件
76         MimeMessage message = mailSender.createMimeMessage();
77         //第二個參數表明傳遞進來的第一個參數是html文本
78         MimeMessageHelper helper = new MimeMessageHelper(message, true, "utf-8");
79         //發件人
80         helper.setFrom("1354440850@qq.com");
81         //收件人
82         helper.setTo(to);
83         //發送的郵件主題
84         helper.setSubject("New spittle from " + spittle.getSpitter().getFullName());
85         //cid:spitterLogo,標記一個變量,后面為這個變量添加一張圖片
86         //第二個參數表示傳遞的第一個參數是html
87         helper.setText("<html><body><img src='cid:spittleLogo'>" + "<h4>" +
88                 spittle.getSpitter().getFullName() + "says...</h4>" + "<i>" + spittle.getText() +
89                 "</i>" + "</body></html>", true);
90         //創建一個變量存放圖片
91         ClassPathResource image = new ClassPathResource("/collateral/coupon.jpg");
92         //為消息添加嵌入式的圖片
93         helper.addInline("spittleLogo", image);
94         //發送郵件
95         mailSender.send(message);
96     }
97 }

 

8.測試類

 1 package spittr.email;
 2 
 3 import org.junit.Test;
 4 import org.junit.runner.RunWith;
 5 import org.springframework.beans.BeansException;
 6 import org.springframework.beans.factory.annotation.Autowired;
 7 import org.springframework.context.ApplicationContext;
 8 import org.springframework.context.ApplicationContextAware;
 9 import org.springframework.mail.javamail.JavaMailSenderImpl;
10 import org.springframework.test.context.ContextConfiguration;
11 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
12 import spittr.config.MailConfig;
13 import spittr.domain.Spitter;
14 import spittr.domain.Spittle;
15 
16 import java.util.Date;
17 
18 @RunWith(SpringJUnit4ClassRunner.class)
19 @ContextConfiguration(classes=MailConfig.class)
20 public class SpitterMailServiceImplTest implements ApplicationContextAware {
21     @Autowired
22      private SpitterMailService mailService;
23 
24     @Autowired
25     private ApplicationContext applicationContext;
26 
27     @Test
28     public void sendSimpleSpittleEmail() throws Exception {
29         JavaMailSenderImpl beanName = (JavaMailSenderImpl)applicationContext.getBean("mailSender");
30 
31         Spitter spitter = new Spitter(1L, "", null, "coffie", "1354440850@qq.com", true);
32         Spittle spittle = new Spittle(1L, "Hiya!",new Date(),spitter);
33         //第一個參數是收件人,第二個參數是郵件
34 //        mailService.sendSimpleSpittleEmail(spitter.getEmail(),spittle);
35 //        mailService.sendSpittleEmailWithAttachment(spitter.getEmail(), spittle);
36         mailService.sendRichSpitterEmail(spitter.getEmail(),spittle);
37     }
38 
39     public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
40         this.applicationContext=applicationContext;
41     }
42 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM