前言
電子郵件系統(Electronic mail system,E-mail)由用戶代理MUA(Mail User Agent)以及郵件傳輸代理MTA(Mail Transfer Agent),和郵件投遞代理MDA(Mail Delivery Agent)組成,MUA指用於收發Mail的程序,MTA指將來自MUA的信件轉發給指定用戶的程序,MDA就是將MTA接收的信件依照信件的流向(送到哪裏)將該信件放置到本機賬戶下的郵件文件中(收件箱),當用戶從 MUA 中發送一份郵件時,該郵件會被髮送送到MTA,而後在一系列MTA中轉發,直到它到達最終發送目標爲止。
SMTP 協議
SMTP 的全稱是“Simple Mail Transfer Protocol”,即簡單郵件傳輸協議。它是一組用於從源地址到目的地址傳輸郵件的規範,通過它來控制郵件的中轉方式。SMTP 協議屬於 TCP/IP 協議簇,它幫助每臺計算機在發送或中轉信件時找到下一個目的地。SMTP 服務器就是遵循 SMTP 協議的發送郵件服務器。
SMTP 認證,簡單地說就是要求必須在提供了賬戶名和密碼之後纔可以登錄 SMTP 服務器,這就使得那些垃圾郵件的散播者無可乘之機。增加 SMTP 認證的目的是爲了使用戶避免受到垃圾郵件的侵擾。
POP3 協議
POP3是Post Office Protocol 3的簡稱,即郵局協議的第3個版本,它規定怎樣將個人計算機連接到Internet的郵件服務器和下載電子郵件的電子協議。它是因特網電子郵件的第一個離線協議標準,POP3允許用戶從服務器上把郵件存儲到本地主機(即自己的計算機)上,同時刪除保存在郵件服務器上的郵件,而POP3服務器則是遵循POP3協議的接收郵件服務器,用來接收電子郵件的。但目前的 POP3 郵件服務器大都可以“只下載郵件,服務器端並不刪除”,也就是改進的 POP3 協議。SMTP 和 POP3 是最初的兩個協議,隨着郵件的不斷髮展後來又增加了兩個協議:
IMAP 協議
IMAP全稱是Internet Mail Access Protocol,即交互式郵件存取協議,它是跟POP3類似郵件訪問標準協議之一。不同的是,開啓了IMAP後,您在電子郵件客戶端收取的郵件仍然保留在服務器上,同時在客戶端上的操作都會反饋到服務器上,如:刪除郵件,標記已讀等,服務器上的郵件也會做相應的動作。所以無論從瀏覽器登錄郵箱或者客戶端軟件登錄郵箱,看到的郵件以及狀態都是一致的。
Mime 協議
MIME的英文全稱是"Multipurpose Internet Mail Extensions" 多功能Internet 郵件擴充服務,它是一種多用途網際郵件擴充協議,在1992年最早應用於電子郵件系統,但後來也應用到瀏覽器。MIME意爲多目Internet郵件擴展,它設計的最初目的是爲了在發送電子郵件時附加多媒體數據,讓郵件客戶程序能根據其類型進行處理。然而當它被HTTP協議支持之後,它的意義就更爲顯著了。它使得HTTP傳輸的不僅是普通的文本,而變得豐富多彩。
1、QQ郵箱配置步驟,獲取授權碼
QQ郵箱->設置->賬戶->POP3/SMTP服務:開啓服務後會獲得QQ的授權碼。注:需要開通POP3和IMAP服務。
2、pom.xml文件
<!--mail-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
3、application.properties配置文件
#系統郵箱配置
spring.mail.host=smtp.qq.com
spring.mail.port=587
spring.mail.username=系統郵箱
#授權碼
spring.mail.password = 授權碼
spring.mail.protocol = smtp
spring.mail.default-encoding = UTF-8
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class = javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.smtp.connectiontimeout = 15000
spring.mail.properties.mail.smtp.timeout = 25000
spring.mail.properties.mail.smtp.writetimeout = 15000
4、JavaMailSender
(Spring已經幫我們內置了JavaMailSender,可以直接在項目中引用)
/**
* @ClassName: MailServiceImpl
* @Author: liuyaolong
* @Description: 發送郵件實現類
*/
@Service
public class MailServiceImpl {
@Autowired
private JavaMailSender mailSender;
private static final Logger logger = LoggerFactory.getLogger(MailServiceImpl.class);
@Value("${spring.mail.username}")
String EMAIL_FROM;
public void sendSimpleMail() {
SimpleMailMessage message = new SimpleMailMessage();
try {
message.setTo("接收郵件地址");//多個地址可用String[]
message.setCc("抄送郵件地址");//多個地址可用String[]
message.setFrom(String.valueOf(new InternetAddress(EMAIL_FROM)));//發送郵件地址
message.setSubject("郵件主題");
message.setText("郵件正文內容");
} catch (AddressException e){
logger.error("發送文本郵件異常,錯誤信息:{}",e.getMessage());
}
mailSender.send(message);
}
public void sendAttachmentsMail() {
MimeMessage mimeMessage = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
helper.setFrom(String.valueOf(new InternetAddress(EMAIL_FROM)));//發送郵件地址
helper.setSubject("郵件主題");
helper.setText("郵件正文內容");
helper.setCc("抄送郵件地址");
helper.addAttachment("附件名",new FileSystemResource("附件"));
helper.setTo("接收郵件地址");
} catch (MessagingException e){
logger.error("發送附件郵件異常,錯誤信息:{}",e.getMessage());
}
mailSender.send(mimeMessage);
}
public void sendHtmlMail() {
MimeMessage mimeMessage = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
helper.setTo("接收郵件地址");
helper.setCc("抄送郵件地址");
helper.setFrom(String.valueOf(new InternetAddress(EMAIL_FROM)));//發送郵件地址
helper.setSubject("郵件主題");
helper.setText("郵件正文內容");
} catch (MessagingException e){
logger.error("發送富文本郵件異常,錯誤信息:{}",e.getMessage());
}
mailSender.send(mimeMessage);
}
}
以上就是本文的全部內容,希望對大家的學習有所幫助,歡迎評論交流。能get到知識點不要忘了關注點個贊~ 拒絕白嫖從我們做起hh~