整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          C# .NET Core中跨平臺電子郵件庫MailK

          C# .NET Core中跨平臺電子郵件庫MailKit發送和接收郵件

          首發創作賽#

          MailKit 是一個跨平臺的電子郵件處理庫,支持發送和接收電子郵件。

          C# .NET Core中使用MailKit處理電子郵件:

          • 安裝MailKit NuGet包:

          可以使用Visual Studio的NuGet包管理器或使用dotnet CLI來安裝它。

          • 導入所需的命名空間:
          using MailKit.Net.Smtp;
          using MailKit.Security;
          using MimeKit;
          
          • 創建一個MimeMessage對象,并設置發件人、收件人、主題和正文等信息:
          var message=new MimeMessage();
          message.From.Add(new MailboxAddress("發件人名稱", "發件人郵箱"));
          message.To.Add(new MailboxAddress("收件人名稱", "收件人郵箱"));
          message.Subject="郵件主題";
          
          var bodyBuilder=new BodyBuilder();
          bodyBuilder.TextBody="郵件正文";
          // 如果要發送HTML格式的郵件,可以使用以下代碼:
          // bodyBuilder.HtmlBody="<h1>郵件正文</h1>";
          
          message.Body=bodyBuilder.ToMessageBody();
          
          • 發送郵件,創建一個SmtpClient對象,并設置SMTP服務器和端口號:
          using (var client=new SmtpClient())
          {
              client.Connect("SMTP服務器地址", 端口號, SecureSocketOptions.StartTls);
              // 如果SMTP服務器要求身份驗證,請提供用戶名和密碼:
              client.Authenticate("用戶名", "密碼");
          
              // 發送郵件
              client.Send(message);
          
              client.Disconnect(true);
          }
          
          • 接收郵件,創建一個ImapClient對象,并連接到IMAP服務器:
          using (var client=new ImapClient())
          {
              client.Connect("IMAP服務器地址", 端口號, SecureSocketOptions.StartTls);
              // 如果IMAP服務器要求身份驗證,請提供用戶名和密碼:
              client.Authenticate("用戶名", "密碼");
          
              // 選擇收件箱
              client.Inbox.Open(FolderAccess.ReadOnly);
          
              // 獲取收件箱中的郵件數量
              int messageCount=client.Inbox.Count;
          
              // 遍歷收件箱中的郵件
              for (int i=0; i < messageCount; i++)
              {
                  var message=client.Inbox.GetMessage(i);
          
                  // 處理郵件,例如打印主題和發件人
                  Console.WriteLine("主題: " + message.Subject);
                  Console.WriteLine("發件人: " + message.From);
              }
          
              client.Disconnect(true);
          }
          

          代碼中的"IMAP服務器地址"、端口號、"用戶名"和"密碼"應替換為實際使用的IMAP服務器的相關信息。

          這個簡單示例演示了如何使用MailKit在C# .NET Core中發送和接收電子郵件。

          為數據分析師,經常性的會需要到服務器上做一些取數/數據清洗的工作,但往往這些工作會特別耗時,如果我們可以在我們的腳本中加入郵件提醒的功能,提醒我們任務完成,那效率會提升很多

          一般發郵件方法

          我以前在通過Python實現自動化郵件功能的時候是這樣的:

          import smtplib
          from email.mime.text import MIMEText
          from email.header import Header
          # 發送郵箱服務器
          smtpserver='smtp.sina.com'
          # 發送郵箱用戶/密碼
          user='username@sina.com'
          password='123456'
          # 發送郵箱
          sender='username@sina.com'
          # 接收郵箱
          receiver='receive@126.com'
          # 發送郵件主題
          subject='Python email test'
          # 編寫HTML類型的郵件正文
          msg=MIMEText('<html><h1>你好!</h1></html>','html','utf-8')
          msg['Subject']=Header(subject, 'utf-8')
          # 連接發送郵件
          smtp=smtplib.SMTP()
          smtp.connect(smtpserver)
          smtp.login(user, password)
          smtp.sendmail(sender, receiver, msg.as_string())
          smtp.quit()
          

          其實,這段代碼也并不復雜,只要你理解使用過郵箱發送郵件,那么以下問題是你必須要考慮的:

          • 你登錄的郵箱帳號/密碼
          • 對方的郵箱帳號
          • 郵件內容(標題,正文,附件)
          • 郵箱服務器(SMTP.xxx.com/pop3.xxx.com)

          yagmail 實現發郵件

          • yagmail 可以更簡單的來實現自動發郵件功能。
          github項目地址: https://github.com/kootenpv/yagmail
          
          • 安裝
          pip install yagmail 
          
          • 簡單例子
          import yagmail
          #鏈接郵箱服務器
          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']
          # 發送郵件
          yag.send('taaa@126.com', 'subject', contents)
          

          總共四行代碼搞定,是不是比上面的例子簡單太多了。

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

          文基于:Spring Boot 2.1.3,理論支持Spring Boot 2.x所有版本。

          最近有童鞋問到筆者如何用Spring Boot發送郵件,故而整理下Spring Boot發送郵件的各種姿勢。

          說到郵件放松,相信大家對Spring Framework提供的接口 JavaMailSender 都不陌生。那么Spring Boot是否有開箱即用的郵件發送呢?

          答案是肯定的。Spring Boot為發送郵件提供了starter:spring-boot-starter-mail 。

          本文詳細探討如何用Spring Boot發送郵件。

          一、郵箱配置

          以126郵箱為例:

          1 開啟SMTP服務

          2 設置/重置客戶端授權密碼

          二、編碼

          2.1 準備工作

          1 加依賴


          <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-mail</artifactId>
          </dependency>
          

          2 寫配置


          spring:
           mail:
           host: smtp.126.com
           username: eacdy0000@126.com
           password: 上面設置的授權碼
          

          2.2 發送簡單郵件


          public String simple() {
           SimpleMailMessage message=new SimpleMailMessage();
           // 發件人郵箱
           message.setFrom(this.mailProperties.getUsername());
           // 收信人郵箱
           message.setTo("511932633@qq.com");
           // 郵件主題
           message.setSubject("簡單郵件測試");
           // 郵件內容
           message.setText("簡單郵件測試");
           this.javaMailSender.send(message);
           return "success";
          }
          

          結果類似下圖:

          2.3 發送HTML郵件

          簡單郵件是沒有樣式的,很多時候,我們希望發送的郵件內容帶有樣式,此時可發送HTML郵件。


          public String html() throws MessagingException {
           MimeMessage message=javaMailSender.createMimeMessage();
           MimeMessageHelper messageHelper=new MimeMessageHelper(message);
           messageHelper.setFrom(this.mailProperties.getUsername());
           messageHelper.setTo("511932633@qq.com");
           messageHelper.setSubject("HTML內容郵件測試");
           // 第二個參數表示是否html,設為true
           messageHelper.setText("<h1>HTML內容..</h1>", true);
           this.javaMailSender.send(message);
           return "success";
          }
          

          結果類似下圖:

          2.4 發送帶附件的郵件

          很多場景下,需要為郵件插入附件,此時該怎么辦呢?繼續上代碼——


          @GetMapping("/attach")
          public String attach() throws MessagingException {
           MimeMessage message=this.javaMailSender.createMimeMessage();
           // 第二個參數表示是否開啟multipart模式
           MimeMessageHelper messageHelper=new MimeMessageHelper(message, true);
           messageHelper.setFrom(this.mailProperties.getUsername());
           messageHelper.setTo("511932633@qq.com");
           messageHelper.setSubject("帶附件的郵件測試");
           // 第二個參數表示是否html,設為true
           messageHelper.setText("<h1>HTML內容..</h1>", true);
           messageHelper.addAttachment("附件名稱",
           new ClassPathResource("wx.jpg"));
           this.javaMailSender.send(message);
           return "success";
          }
          

          結果類似下圖:

          2.5 發送帶內聯附件的郵件

          附件 + HTML基本能滿足日常工作中多數需求。但如果能將附件內聯在郵件內容中,那么體驗就更好啦!如何實現附件的內聯呢?


          @GetMapping("/inline-attach")
          public String inlineAttach() throws MessagingException {
           MimeMessage message=this.javaMailSender.createMimeMessage();
           // 第二個參數表示是否開啟multipart模式
           MimeMessageHelper messageHelper=new MimeMessageHelper(message, true);
           messageHelper.setFrom(this.mailProperties.getUsername());
           messageHelper.setTo("511932633@qq.com");
           messageHelper.setSubject("內聯附件的郵件測試");
           // 第二個參數表示是否html,設為true
           messageHelper.setText("<h1>HTML內容..<img src=\"cid:attach\"/></h1>", true);
           messageHelper.addInline("attach", new ClassPathResource("wx.jpg"));
           this.javaMailSender.send(message);
           return "success";
          }
          

          由代碼可知,只需在想要內聯的地方使用 cid:xx 引用內聯附件,然后用 addInline(xx, file)指定附件即可。兩處的 xx 必須一致。

          結果類似下圖:

          2.6 發送基于Freemarker模板的郵件

          上面的例子中,郵件內容是直接以字符串體現的,這通常不適合生產,因為實際項目中郵件往往帶有變量。此時,可考慮使用Freemarker模板(或者其他模板,Spring Boot 2.x默認支持Freemarker、Groovy、Thymeleaf、Mustache四種模板引擎,也可根據需求使用其他模板引擎)。

          ?

          創建Freemarker模板文件mail.ftl,并將其存放在resources/templates/ 目錄中


          <h1>親愛的${username}, 歡迎關注${event}</h1>
          

          ?

          編碼:


          @GetMapping("/freemarker")
          public String freemarker() throws MessagingException, IOException, TemplateException {
           MimeMessage message=this.javaMailSender.createMimeMessage();
           // 第二個參數表示是否開啟multipart模式
           MimeMessageHelper messageHelper=new MimeMessageHelper(message, true);
           messageHelper.setFrom(this.mailProperties.getUsername());
           messageHelper.setTo("511932633@qq.com");
           messageHelper.setSubject("基于freemarker模板的郵件測試");
           Map<String, Object> model=new HashMap<>();
           model.put("username", "itmuch");
           model.put("event", "IT牧場大事件");
           String content=FreeMarkerTemplateUtils.processTemplateIntoString(
           this.freemarkerConfiguration.getTemplate("mail.ftl"), model);
           // 第二個參數表示是否html,設為true
           messageHelper.setText(content, true);
           this.javaMailSender.send(message);
           return "success";
          }
          

          此時,結果類似下圖:

          三、配套代碼

          ?GitHub[1]

          ?Gitee[2]

          干貨分享

          最近將個人學習筆記整理成冊,使用PDF分享。關注我,回復如下代碼,即可獲得百度盤地址,無套路領??!

          ?001:《Java并發與高并發解決方案》學習筆記;

          ?002:《深入JVM內核——原理、診斷與優化》學習筆記;

          ?003:《Java面試寶典》

          ?004:《Docker開源書》

          ?005:《Kubernetes開源書》

          ?006:《DDD速成(領域驅動設計速成)》

          References

          [1] GitHub: https://github.com/eacdy/spring-boot-study/tree/master/spring-boot-mail

          [2] Gitee: https://gitee.com/itmuch/spring-boot-study/tree/master/spring-boot-mail


          主站蜘蛛池模板: 色精品一区二区三区| 亚洲视频一区网站| 国产精品一区二区电影| 亚洲美女高清一区二区三区 | 在线播放国产一区二区三区 | 国产免费一区二区视频| 国产一区韩国女主播| 国产精品乱码一区二区三| 精品少妇ay一区二区三区| 亚洲一区爱区精品无码| 不卡一区二区在线| 久久国产午夜精品一区二区三区 | 日本国产一区二区三区在线观看 | 一区五十路在线中出| 日本一区二区三区在线看| 国精产品999一区二区三区有限| 日本内射精品一区二区视频| 国产伦精品一区二区三区| 亚洲日本一区二区一本一道| 日韩一区二区在线观看| 国产精久久一区二区三区| 亚洲第一区在线观看| 国产美女露脸口爆吞精一区二区| 杨幂AV污网站在线一区二区| 一区二区三区日本视频| 中文字幕一区二区三区永久| 亚洲色精品aⅴ一区区三区| 美女啪啪一区二区三区| 人妻体体内射精一区二区| 2020天堂中文字幕一区在线观| 亚洲一区中文字幕在线电影网 | 日韩免费一区二区三区在线| 亚洲AV无码一区二区乱子仑| 成人免费视频一区| 一区二区三区四区电影视频在线观看| 日亚毛片免费乱码不卡一区| 成人免费区一区二区三区| 人妻少妇精品视频一区二区三区 | 亚洲丰满熟女一区二区哦| 国产视频一区二区| 亚洲成av人片一区二区三区|