整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          (實(shí)用干貨) - Spring Boot集成發(fā)送郵件Mail完整示例代碼

          作中經(jīng)常會(huì)遇到發(fā)郵件的功能,如郵件預(yù)警,注冊(cè)時(shí)發(fā)一個(gè)郵件確認(rèn)等,這里給出在Spring Boot中發(fā)送郵件的完整集成示例

          郵件發(fā)送支持的內(nèi)容類型如下:

          1. 發(fā)送簡(jiǎn)單郵件。
          2. 發(fā)送html格式的郵件
          3. 發(fā)送帶附件簡(jiǎn)單郵件
          4. 發(fā)送模板郵件

          1. pom.xml

          發(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>

          2. application.properties

          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è)置一下

          3. MailUtil

          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>

          4. Test

          @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)單的郵件。

          步驟 1: 安裝必要的庫(kù)

          smtplib和email是Python的標(biāo)準(zhǔn)庫(kù),通常不需要單獨(dú)安裝。但是,如果你使用的是一個(gè)精簡(jiǎn)的Python環(huán)境,可能需要確保這些庫(kù)是可用的。

          步驟 2: 編寫郵件發(fā)送腳本

          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()

          注意事項(xiàng):

          1. SMTP服務(wù)器和端口:不同的郵件服務(wù)商有不同的SMTP服務(wù)器地址和端口號(hào)。例如,Gmail的SMTP服務(wù)器是smtp.gmail.com,端口號(hào)是587。
          2. 授權(quán)碼:對(duì)于某些郵件服務(wù)商,如Gmail,你需要使用應(yīng)用密碼(也叫授權(quán)碼)而不是你的登錄密碼來(lái)發(fā)送郵件,因?yàn)橹苯邮褂玫卿浢艽a可能會(huì)被阻止。
          3. TLS/SSL加密:大多數(shù)現(xiàn)代郵件服務(wù)都要求使用TLS或SSL加密來(lái)保證通信安全。在連接SMTP服務(wù)器時(shí),確保使用starttls()或SMTP_SSL類來(lái)啟用加密。
          4. 郵件格式:上面的例子使用的是純文本郵件。如果你想發(fā)送HTML格式的郵件或包含附件的郵件,可以使用email.mime.multipart.MIMEMultipart和相關(guān)的子類來(lái)構(gòu)建郵件。

          通過(guò)調(diào)整上述代碼中的SMTP服務(wù)器、端口、用戶名、密碼以及郵件內(nèi)容和接收者,你可以根據(jù)自己的需求發(fā)送郵件。

          為數(shù)據(jù)分析師,經(jīng)常性的會(huì)需要到服務(wù)器上做一些取數(shù)/數(shù)據(jù)清洗的工作,但往往這些工作會(huì)特別耗時(shí),如果我們可以在我們的腳本中加入郵件提醒的功能,提醒我們?nèi)蝿?wù)完成,那效率會(huì)提升很多

          一般發(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)題是你必須要考慮的:

          • 你登錄的郵箱帳號(hào)/密碼
          • 對(duì)方的郵箱帳號(hào)
          • 郵件內(nèi)容(標(biāo)題,正文,附件)
          • 郵箱服務(wù)器(SMTP.xxx.com/pop3.xxx.com)

          yagmail 實(shí)現(xiàn)發(fā)郵件

          • yagmail 可以更簡(jiǎn)單的來(lái)實(shí)現(xiàn)自動(dòng)發(fā)郵件功能。
          github項(xiàng)目地址: https://github.com/kootenpv/yagmail
          
          • 安裝
          pip install yagmail 
          
          • 簡(jiǎn)單例子
          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)單太多了。

          • 給多個(gè)用戶發(fā)送郵件,只需要將接收郵箱 變成一個(gè)list即可。
          yag.send(['aa@126.com','bb@qq.com','cc@gmail.com'], 'subject', contents)
          
          • 發(fā)送帶附件的郵件,只需要添加要發(fā)送的附件列表即可

          主站蜘蛛池模板: 91香蕉福利一区二区三区| 亚欧免费视频一区二区三区| 冲田杏梨高清无一区二区| 亚洲av成人一区二区三区观看在线 | 国产精品一区二区久久沈樵| 国产精品毛片一区二区三区| 天堂va视频一区二区| 国产精品熟女一区二区| 黄桃AV无码免费一区二区三区| 中文乱码人妻系列一区二区| 国产凹凸在线一区二区| 香蕉久久AⅤ一区二区三区| 国产精品亚洲一区二区麻豆| 国精品无码一区二区三区左线| 免费一区二区无码视频在线播放| 日日摸夜夜添一区| 无码国产伦一区二区三区视频| 一区二区三区在线视频播放| 无码人妻精一区二区三区| 国产成人久久精品区一区二区| 久久久久久综合一区中文字幕| 亚洲国产精品一区二区第四页 | 久久久无码精品人妻一区| 一区二区视频在线观看| 国产成人久久精品一区二区三区| 亚洲福利精品一区二区三区| 日韩精品一区在线| 最新中文字幕一区二区乱码 | 中文字幕无线码一区| 欲色影视天天一区二区三区色香欲| 亚洲一区二区三区高清不卡| 人妻体体内射精一区二区| 日韩免费无码一区二区三区| 国产一区二区精品尤物| 精品视频一区二区观看| 一区二区国产在线播放| 亚洲av高清在线观看一区二区| 国产成人无码精品一区不卡| 国产中文字幕一区| 精品一区二区三区电影| 高清一区高清二区视频|