郵件發(fā)送支持的內(nèi)容類型如下:
發(fā)送模板郵件需要用到spring-boot-starter-thymeleaf,其他其他郵件內(nèi)容不需要該依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
spring.mail.host=smtp.163.com
spring.mail.username=xxx@163.com
# 注意這里的密碼不是郵箱的登錄密碼
spring.mail.password=郵箱客戶端授權(quán)碼
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
注意:如果密碼不對(duì)在發(fā)送郵件中會(huì)報(bào)異常javax.mail.AuthenticationFailedException: 535 Error, 如果設(shè)置了也開(kāi)啟了還是不行再重新設(shè)置一下
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
@Component
public class MailUtil {
private final Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
JavaMailSender mailSender;
@Autowired
TemplateEngine templateEngine;
/**
* 發(fā)送簡(jiǎn)單郵件
* @param from 發(fā)送人
* @param to 接收人
* @param carbonCopy 抄送人
* @param subject 主題
* @param content 內(nèi)容
*/
public void sendSimpleEmail(String from, String[] to, String[] carbonCopy, String subject, String content) {
long startTimestamp = System.currentTimeMillis();
logger.info("Start send mail ... ");
try {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
message.setTo(to);
message.setCc(carbonCopy);
message.setSubject(subject);
message.setText(content);
mailSender.send(message);
logger.info("Send mail success, cost {} million seconds", System.currentTimeMillis() - startTimestamp);
} catch (MailException e) {
logger.error("Send mail failed, error message is : {} \n", e.getMessage());
}
}
/**
* 發(fā)送html郵件
*/
public void sendHtmlEmail(String deliver, String[] receiver, String[] carbonCopy, String subject, String content, boolean isHtml) {
long startTimestamp = System.currentTimeMillis();
logger.info("Start send email ...");
try {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(message);
messageHelper.setFrom(deliver);
messageHelper.setTo(receiver);
messageHelper.setCc(carbonCopy);
messageHelper.setSubject(subject);
messageHelper.setText(content, isHtml);
mailSender.send(message);
logger.info("Send email success, cost {} million seconds", System.currentTimeMillis() - startTimestamp);
} catch (MessagingException e) {
logger.error("Send email failed, error message is {} \n", e.getMessage());
e.printStackTrace();
}
}
/**
* 發(fā)送帶附件的郵件
*/
public void sendAttachmentFileEmail(String deliver, String[] receiver, String[] carbonCopy, String subject, String content, boolean isHtml, String fileName, File file) {
long startTimestamp = System.currentTimeMillis();
logger.info("Start send mail ...");
try {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
messageHelper.setFrom(deliver);
messageHelper.setTo(receiver);
messageHelper.setCc(carbonCopy);
messageHelper.setSubject(subject);
messageHelper.setText(content, isHtml);
messageHelper.addAttachment(fileName, file);
mailSender.send(message);
logger.info("Send mail success, cost {} million seconds", System.currentTimeMillis() - startTimestamp);
} catch (MessagingException e) {
logger.error("Send mail failed, error message is {}\n", e.getMessage());
e.printStackTrace();
}
}
/**
* 發(fā)送模板郵件
*/
public void sendTemplateEmail(String deliver, String[] receiver, String[] carbonCopy, String subject, String template, Context context) {
long startTimestamp = System.currentTimeMillis();
logger.info("Start send mail ...");
try {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(message);
String content = templateEngine.process(template, context);
messageHelper.setFrom(deliver);
messageHelper.setTo(receiver);
messageHelper.setCc(carbonCopy);
messageHelper.setSubject(subject);
messageHelper.setText(content, true);
mailSender.send(message);
logger.info("Send mail success, cost {} million seconds", System.currentTimeMillis() - startTimestamp);
} catch (MessagingException e) {
logger.error("Send mail failed, error message is {} \n", e.getMessage());
e.printStackTrace();
}
}
}
src/main/resource/templates/mailTemplate.html
<!DOCTYPE html>
<html xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
[[${content}]] <br/>
[[${content}]] <br/>
[[${content}]] <br/>
</body>
</html>
@RunWith(SpringRunner.class)
@SpringBootTest
public class MailApplicationTests {
@Autowired
private MailUtil mailUtil;
@Test
public void sendSimpleEmail() {
String deliver = "xxx@163.com";
String[] receiver = {"xxx@gmail.com"};
String[] carbonCopy = {"xxx@qq.com"};
String subject = "This is a simple email";
String content = "This is a simple content";
try {
mailUtil.sendSimpleEmail(deliver, receiver, carbonCopy, subject, content);
} catch (Exception e) {
assertFalse("Send simple email failed", true);
e.printStackTrace();
}
}
@Test
public void sendHtmlMail(){
String deliver = "xxx@163.com";
String[] receiver = {"xxx@gmail.com"};
String[] carbonCopy = {"xxx@qq.com"};
String subject = "退信代碼說(shuō)明";
String content = "<h1>org.springframework.mail.MailSendException: Failed messages: " +
"com.sun.mail.smtp.SMTPSendFailedException: 554 DT:SPM 163 smtp9,DcCowAAXf2r4c8da2cPWBQ--." +
"33626S3 1523020853,please see " +
"http://mail.163.com/help/help_spam_16.htm?ip=43.243.148.212&hostid=smtp9&time=1523020853</h1>";
boolean isHtml = true;
mailUtil.sendHtmlEmail(deliver, receiver, carbonCopy, subject, content, isHtml);
}
@Test
public void sendAttachmentFileEmail() {
String FILE_PATH = "/Users/mengday/Desktop/02.png";
String deliver = "xxx@163.com";
String[] receiver = {"xxx@gmail.com"};
String[] carbonCopy = {"xxx@qq.com"};
String subject = "退信代碼說(shuō)明";
String content = "<h1>org.springframework.mail.MailSendException: Failed messages: " +
"com.sun.mail.smtp.SMTPSendFailedException: 554 DT:SPM 163 smtp9,DcCowAAXf2r4c8da2cPWBQ--." +
"33626S3 1523020853,please see " +
"http://mail.163.com/help/help_spam_16.htm?ip=43.243.148.212&hostid=smtp9&time=1523020853</h1>";
boolean isHtml = true;
File file = new File(FILE_PATH);
String fileName = FILE_PATH.substring(FILE_PATH.lastIndexOf(File.separator));
try {
mailUtil.sendAttachmentFileEmail(deliver, receiver, carbonCopy, subject, content, isHtml, fileName, file);
} catch (Exception e) {
e.printStackTrace();
assertFalse("Send attachment file email failed", true);
}
}
@Test
public void sendTemplateEmail() {
String deliver = "xxx@163.com";
String[] receiver = {"xxx@gmail.com"};
String[] carbonCopy = {"xxx@qq.com"};
String subject = "DT:SPM 發(fā)送的郵件內(nèi)容包含了未被許可的信息,或被系統(tǒng)識(shí)別為垃圾郵件。請(qǐng)檢查是否有用戶發(fā)送病毒或者垃圾郵件";
String template = "mailTemplate";
String content = "554 DT:SPM 發(fā)送的郵件內(nèi)容包含了未被許可的信息,或被系統(tǒng)識(shí)別為垃圾郵件。請(qǐng)檢查是否有用戶發(fā)送病毒或者垃圾郵件";
Context context = new Context();
context.setVariable("content", content);
try {
mailUtil.sendTemplateEmail(deliver, receiver, carbonCopy, subject, template, context);
} catch (Exception e) {
e.printStackTrace();
assertFalse("Send template email failed", true);
}
}
}
注意:如果標(biāo)題和內(nèi)容過(guò)于簡(jiǎn)單,或者包含test之類的內(nèi)容,163會(huì)認(rèn)為這是垃圾郵件,會(huì)造成發(fā)送失敗,報(bào)以下異常,解決辦法就是將發(fā)送的表體和內(nèi)容寫的比較真實(shí)點(diǎn)
Python中,可以使用smtplib庫(kù)和email庫(kù)來(lái)發(fā)送郵件。以下是一個(gè)基本的示例,展示如何使用這些庫(kù)來(lái)發(fā)送一封簡(jiǎn)單的郵件。
smtplib和email是Python的標(biāo)準(zhǔn)庫(kù),通常不需要單獨(dú)安裝。但是,如果你使用的是一個(gè)精簡(jiǎn)的Python環(huán)境,可能需要確保這些庫(kù)是可用的。
Python
1import smtplib
2from email.mime.text import MIMEText
3from email.header import Header
4
5# 發(fā)件人郵箱
6sender = 'your_email@example.com'
7# 收件人郵箱
8receiver = 'receiver_email@example.com'
9# 發(fā)送郵件的SMTP服務(wù)器
10smtp_server = 'smtp.example.com'
11# 發(fā)件人的郵箱密碼或授權(quán)碼
12password = 'your_password'
13
14# 郵件內(nèi)容
15mail_content = '這是郵件的正文內(nèi)容。'
16# 郵件主題
17mail_subject = '郵件的主題'
18
19# 創(chuàng)建一個(gè)MIMEText對(duì)象
20message = MIMEText(mail_content, 'plain', 'utf-8')
21message['From'] = Header("發(fā)件人名稱", 'utf-8')
22message['To'] = Header("收件人名稱", 'utf-8')
23message['Subject'] = Header(mail_subject, 'utf-8')
24
25try:
26 # 連接SMTP服務(wù)器
27 smtpObj = smtplib.SMTP(smtp_server, 587)
28 # 開(kāi)啟TLS加密(某些服務(wù)器需要)
29 smtpObj.starttls()
30 # 登錄SMTP服務(wù)器
31 smtpObj.login(sender, password)
32 # 發(fā)送郵件
33 smtpObj.sendmail(sender, receiver, message.as_string())
34 print("郵件發(fā)送成功!")
35except smtplib.SMTPException as e:
36 print("Error: 無(wú)法發(fā)送郵件,錯(cuò)誤信息:", e)
37finally:
38 # 關(guān)閉連接
39 smtpObj.quit()
通過(guò)調(diào)整上述代碼中的SMTP服務(wù)器、端口、用戶名、密碼以及郵件內(nèi)容和接收者,你可以根據(jù)自己的需求發(fā)送郵件。
我以前在通過(guò)Python實(shí)現(xiàn)自動(dòng)化郵件功能的時(shí)候是這樣的:
import smtplib from email.mime.text import MIMEText from email.header import Header # 發(fā)送郵箱服務(wù)器 smtpserver = 'smtp.sina.com' # 發(fā)送郵箱用戶/密碼 user = 'username@sina.com' password = '123456' # 發(fā)送郵箱 sender = 'username@sina.com' # 接收郵箱 receiver = 'receive@126.com' # 發(fā)送郵件主題 subject = 'Python email test' # 編寫HTML類型的郵件正文 msg = MIMEText('<html><h1>你好!</h1></html>','html','utf-8') msg['Subject'] = Header(subject, 'utf-8') # 連接發(fā)送郵件 smtp = smtplib.SMTP() smtp.connect(smtpserver) smtp.login(user, password) smtp.sendmail(sender, receiver, msg.as_string()) smtp.quit()
其實(shí),這段代碼也并不復(fù)雜,只要你理解使用過(guò)郵箱發(fā)送郵件,那么以下問(wèn)題是你必須要考慮的:
github項(xiàng)目地址: https://github.com/kootenpv/yagmail
pip install yagmail
import yagmail #鏈接郵箱服務(wù)器 yag = yagmail.SMTP( user="user@126.com", password="1234", host='smtp.126.com') # 郵箱正文 contents = ['This is the body, and here is just text http://somedomain/image.png', 'You can find an audio file attached.', '/local/path/song.mp3'] # 發(fā)送郵件 yag.send('taaa@126.com', 'subject', contents)
總共四行代碼搞定,是不是比上面的例子簡(jiǎn)單太多了。
yag.send(['aa@126.com','bb@qq.com','cc@gmail.com'], 'subject', contents)
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。