整合營銷服務商

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

          免費咨詢熱線:

          Python自動發送郵件:詳細教程與示例代碼

          現代社會中,自動發送郵件是一項非常有用的任務,無論是用于自動化報告的發送,還是用于通知、提醒等用途。Python提供了強大的庫來實現自動發送郵件的功能,本文將詳細介紹如何使用Python發送郵件,包括各種示例代碼,幫助大家更好地理解和應用這一功能。

          準備工作

          在開始之前,確保已經完成以下準備工作:

          1. 安裝Python:確保計算機上安裝了Python。可以從Python官方網站下載并安裝最新版本的Python。
          2. 郵件賬戶:需要一個可用的郵件賬戶,可以是Gmail、Outlook、Yahoo等電子郵件服務提供商的賬戶。
          3. 安全性設置:如果使用的是Gmail,需要允許“較低安全性應用程序的訪問”。這可以在Gmail賬戶設置中找到。

          使用smtplib庫發送郵件

          Python的smtplib庫是用于發送電子郵件的標準庫之一。

          以下是一個基本示例,演示如何使用smtplib庫發送簡單的文本郵件:

          import smtplib
          from email.mime.text import MIMEText
          from email.mime.multipart import MIMEMultipart
          
          # 發件人和收件人信息
          sender_email = "你的郵箱@gmail.com"
          receiver_email = "收件人郵箱@example.com"
          password = "你的郵箱密碼"
          
          # 創建郵件
          message = MIMEMultipart()
          message["From"] = sender_email
          message["To"] = receiver_email
          message["Subject"] = "自動發送郵件示例"
          
          # 添加郵件正文
          message.attach(MIMEText("這是一封自動發送的郵件。", "plain"))
          
          # 連接到SMTP服務器
          with smtplib.SMTP("smtp.gmail.com", 587) as server:
              server.starttls()
              server.login(sender_email, password)
              server.sendmail(sender_email, receiver_email, message.as_string())
          
          print("郵件已發送成功!")

          在這個示例中,首先導入必要的模塊,然后設置發件人、收件人和郵件主題。接下來,創建郵件正文,并使用smtplib庫連接到SMTP服務器,然后登錄并發送郵件。

          發送帶附件的郵件

          如果需要發送帶附件的郵件,可以使用MIME(Multipurpose Internet Mail Extensions)來創建郵件。

          以下是一個示例,演示如何發送帶附件的郵件:

          import smtplib
          from email.mime.text import MIMEText
          from email.mime.multipart import MIMEMultipart
          from email.mime.application import MIMEApplication
          
          # 發件人和收件人信息
          sender_email = "你的郵箱@gmail.com"
          receiver_email = "收件人郵箱@example.com"
          password = "你的郵箱密碼"
          
          # 創建郵件
          message = MIMEMultipart()
          message["From"] = sender_email
          message["To"] = receiver_email
          message["Subject"] = "帶附件的郵件示例"
          
          # 添加郵件正文
          message.attach(MIMEText("這是一封帶附件的郵件。", "plain"))
          
          # 添加附件
          with open("附件文件.txt", "rb") as attachment:
              part = MIMEApplication(attachment.read(), Name="附件文件.txt")
              part["Content-Disposition"] = f'attachment; filename="附件文件.txt"'
              message.attach(part)
          
          # 連接到SMTP服務器
          with smtplib.SMTP("smtp.gmail.com", 587) as server:
              server.starttls()
              server.login(sender_email, password)
              server.sendmail(sender_email, receiver_email, message.as_string())
          
          print("帶附件的郵件已發送成功!")

          在這個示例中,使用MIMEApplication來添加附件,并設置附件的文件名。然后,將附件添加到郵件中,發送郵件的過程與前一個示例相似。

          使用第三方庫發送郵件

          除了smtplib庫外,還有一些第三方庫可以幫助你更輕松地發送郵件,例如yagmail和smtplib-cli。

          以下是一個使用yagmail庫的示例:

          import yagmail
          
          # 發件人和收件人信息
          sender_email = "你的郵箱@gmail.com"
          receiver_email = "收件人郵箱@example.com"
          password = "你的郵箱密碼"
          
          # 創建yagmail客戶端
          yag = yagmail.SMTP(sender_email, password)
          
          # 發送郵件
          subject = "使用yagmail發送郵件示例"
          contents = ["這是一封使用yagmail發送的郵件。"]
          yag.send(receiver_email, subject, contents)
          
          print("郵件已發送成功!")

          在這個示例中,首先安裝yagmail庫(使用pip install yagmail),然后創建yagmail客戶端并使用它發送郵件。這個庫提供了更簡單的接口來發送郵件。

          發送HTML格式的郵件

          除了發送普通文本郵件,還可以發送HTML格式的郵件,以更好地格式化內容。

          以下是一個示例,演示如何發送HTML郵件:

          import smtplib
          from email.mime.text import MIMEText
          from email.mime.multipart import MIMEMultipart
          
          # 發件人和收件人信息
          sender_email = "你的郵箱@gmail.com"
          receiver_email = "收件人郵箱@example.com"
          password = "你的郵箱密碼"
          
          # 創建郵件
          message = MIMEMultipart()
          message["From"] = sender_email
          message["To"] = receiver_email
          message["Subject"] = "HTML格式的郵件示例"
          
          # 添加HTML郵件內容
          html_content = """
          <!DOCTYPE html>
          <html>
          <head>
              <title>HTML郵件示例</title>
          </head>
          <body>
              <h1>這是一封HTML格式的郵件</h1>
              <p>你可以在郵件中使用HTML標記來格式化內容。</p>
          </body>
          </html>
          """
          
          message.attach(MIMEText(html_content, "html"))
          
          # 連接到SMTP服務器
          with smtplib.SMTP("smtp.gmail.com", 587) as server:
              server.starttls()
              server.login(sender_email, password)
              server.sendmail(sender_email, receiver_email, message.as_string())
          
          print("HTML格式的郵件已發送成功!")

          在這個示例中,創建了一個HTML郵件內容的字符串,并將其添加到郵件中。這樣,收件人將以HTML格式看到郵件內容。

          發送帶圖片的郵件

          如果需要在郵件中嵌入圖片,也可以很容易地實現。

          以下是一個示例,演示如何發送帶圖片的郵件:

          import smtplib
          from email.mime.text import MIMEText
          from email.mime.multipart import MIMEMultipart
          from email.mime.image import MIMEImage
          
          # 發件人和收件人信息
          sender_email = "你的郵箱@gmail.com"
          receiver_email = "收件人郵箱@example.com"
          password = "你的郵箱密碼"
          
          # 創建郵件
          message = MIMEMultipart()
          message["From"] = sender_email
          message["To"] = receiver_email
          message["Subject"] = "帶圖片的郵件示例"
          
          # 添加文本內容
          message.attach(MIMEText("這是一封帶圖片的郵件示例。", "plain"))
          
          # 添加圖片
          with open("image.png", "rb") as image_file:
              image = MIMEImage(image_file.read(), name="image.png")
              message.attach(image)
          
          # 連接到SMTP服務器
          with smtplib.SMTP("smtp.gmail.com", 587) as server:
              server.starttls()
              server.login(sender_email, password)
              server.sendmail(sender_email, receiver_email, message.as_string())
          
          print("帶圖片的郵件已發送成功!")

          在這個示例中,通過MIMEImage模塊添加了一張圖片,并將其嵌入到郵件中。這樣,收件人將能夠在郵件中看到圖片。

          使用SMTP庫發送郵件

          除了smtplib庫外,還可以使用SMTP庫來發送郵件。

          以下是一個使用SMTP庫的示例:

          import smtplib
          
          # 發件人和收件人信息
          sender_email = "你的郵箱@gmail.com"
          receiver_email = "收件人郵箱@example.com"
          password = "你的郵箱密碼"
          
          # 創建SMTP連接
          server = smtplib.SMTP("smtp.gmail.com", 587)
          server.starttls()
          
          # 登錄到SMTP服務器
          server.login(sender_email, password)
          
          # 創建郵件內容
          subject = "SMTP庫發送郵件示例"
          body = "這是一封使用SMTP庫發送的郵件。"
          message = f"Subject: {subject}\n\n{body}"
          
          # 發送郵件
          server.sendmail(sender_email, receiver_email, message)
          
          # 關閉SMTP連接
          server.quit()
          
          print("SMTP庫發送的郵件已發送成功!")

          在這個示例中,首先創建了SMTP連接,然后登錄到SMTP服務器并發送郵件。這種方法也可以用來發送郵件。

          總結

          希望通過本文的詳細教程和示例代碼,現在已經學會了如何使用Python自動發送郵件,包括發送普通文本郵件、HTML郵件、帶附件的郵件和帶圖片的郵件。自動發送郵件是一個非常有用的任務,可以幫助大家自動化通知、報告和通信。無論你是初學者還是有經驗的開發者,都可以使用這些技巧來實現自動發送郵件的需求。

          源 | 數據分析與統計學之美

          本文介紹

          這是一個很好的Python自動化的案例。對于小公司,采用手動方式一個個發送郵件還是可以的。如果一個上百號,上千號,或者更大規模的公司,我們再一個個發送工資條郵件,就太浪費時間了。鑒于此,我寫了一個這樣的程序,實現Python自動化群發工資條的功能。

          原始數據源如下:

          最終效果如下:

          看到這里,你肯定也覺得很好玩兒吧?那么這樣一個自動化程序,應該怎么做呢?接著往下看。

          流程分析

          其實這樣一個代碼,總結下來,就只有如下5步:

          ① 導入相關模塊;

          ② 讀取Excel表格;

          ③ 登錄郵箱;

          ④ 準備要發送的郵件正文;

          ⑤ 發送郵件;

          1)導入相關模塊

          from openpyxl import load_workbook # 用于操作Excel的模塊import yagmail # 用于存儲郵箱地址和密碼的模塊import keyring # 用于記錄你郵箱地址和密碼的模塊from datetime import * # 用于獲取當前系統時間的模塊

          2)讀取Excel表格

          # 加載Excel文件wb = load_workbook("群發工資條.xlsx",data_only=True)sheet = wb.activeprint(sheet)-------------------------------------------------------for row in sheet: row_text = "" for cell in row: if cell.column == "B": continue row_text += f"{cell.value}," print(row_text)------------------------------------------------------print("年:", date.today.year)print("月:", date.today.month)print(f"{date.today.year}-{date.today.month}月")

          結果如下:

          3)登錄郵箱

          yagmail.register("1127421544@qq.com","flmyucvntuvbjbcb")pwd = keyring.get_password("yagmail","1127421544@qq.com")yag = yagmail.SMTP(user="1127421544@qq.com",host="smtp.qq.com",password=pwd)

          需要注意的是:第一行代碼是用于存儲你的郵件地址和密碼。第二行代碼使用keyring是為了記錄你的郵件地址和密碼。第三行代碼直接登錄郵箱。

          關于Python怎么發送郵件,我之前寫了一篇文章,進行了詳細的介紹,下方是這篇文章的鏈接,大家可以參考。

          Python發郵件:http://suo.im/60ylZ1

          4)準備要發送的正文

          由于發送的正文里面,需要我們發送一個帶表格的郵件,這就有必要我們了解一點前端知識。因此,我在最后面花一個章節為大家講解。

          5)發送郵件

          yag.send(f"{email}",f"數據分析與統計學之美有限公司{date.today.year}-{date.today.month}月工資情況",contents)
          上述代碼共有3個參數:第一個參數是收件人的郵箱;第二個參數是郵件的標題;第三個參數是發送的內容。

          關于html代碼的特別說明

          會用Python發送郵件的人都知道,郵件正文內容可以寫html代碼。你可能覺得自己啥也不會,但是不用擔心,我們不需要學習太高深的前端代碼,做過爬蟲的人耳濡目染,都能夠看懂一些。

          1)自己寫一個簡單的前端代碼

          我們可以直接用Pycharm創建一個新的html文件,里面會顯示初始的前端代碼,我們進行簡單的添加,就可以獲得一個表格啦!

          最終在瀏覽器中顯示效果如下:

          從上圖中根本看不出這是一個表格,那是因為我們沒有為它設置一個樣式,下面要做的就是為表格設置樣式。

          最終在瀏覽器中顯示效果如下:

          2)在Python中怎么寫前端代碼

          從上圖可以看出,整個前端代碼就是用一些列的標簽組成,同時標簽都是成對出現的。因此,在Python中寫前端代碼時,只需要在對應位置添加對應的標簽即可。

          for row in sheet: row_text = "<tr>" for cell in row: if cell.column == "B": continue row_text += f"<td>{cell.value}</td>" row_text += "</tr>" print("\n") print(row_text)

          結果如下:

          完整代碼

          為了文章的完整性,我在文章最后放上我的代碼。但是限于文章篇幅,最后我只粘貼一張圖片,詳細代碼,大家可以去文末獲取。

          avaMail是SUN提供給廣大Java開發人員的一款郵件發送和接受的一款開源類庫,支持常用的郵件協議,如:SMTP、POP3、IMAP,開發人員使用JavaMail編寫郵件程序時,不再需要考慮底層的通訊細節如:Socket而是關注在邏輯層面。JavaMail可以發送各種復雜MIME格式的郵件內容,注意JavaMail僅支持JDK4及以上版本。雖然JavaMail是JDK的API但它并沒有直接加入JDK中,所以我們需要另外添加依賴,下面我們開始講解本章的內容。

          本章目標

          將Java提供的JavaMail類庫與SpringBoot項目進行整合,并且簡單封裝下JavaMail類庫。

          構建項目

          本章項目無關Web相關內容,所以創建項目時選擇Jar形式創建,并且不需要預先導入依賴。項目結構如下圖1所示:

          圖1

          可以看到上圖1內容,多余的依賴并沒有添加,如果你選擇的是War項目也沒有關系名,那好,我們接下來把我們的主角JavaMail請出來吧,把對應的依賴添加到pom.xml配置文件內。如下圖2所示:

          圖2

          依賴我們已經導入成功了,接下來我們開始編寫JavaMail的封裝,我這里簡單的對JavaMail做出封裝,如果您需要更完美的封裝,請對我的代碼做出修改即可,先來編寫一個MailEntity類來保存發送郵件時需要的參數字段,如下圖3所示:

          圖3

          我們的MailEntity包含了上圖3的字段內容,都是一些必填選項,下面我們來創建一個MailSender也就是郵件發送者實體,主要作用就是用來配置發送郵件參數以及執行發送郵件,代碼如下圖4、5、6、7、8所示:

          圖4

          圖5

          圖6

          圖7

          圖8

          下次編寫文章使用MarkDown方式來寫,類過長貼起來圖挺費勁。上面可以看到我使用到了MailContentTypeEnum以及PropertiesUtil工具類。

          MailContentTypeEnum

          這是一個我自定義的枚舉類型,枚舉類型包含了郵件內容的類型,目前我僅僅添加了兩種,一種是html另外一種則是text形式,具體代碼如下圖9所示:

          圖9

          PropertiesUtil

          PropertiesUtil是用于讀取*.properties配置文件的工具類,使用JavaMail需要配置SMTP以及用戶名、密碼等也就是MailEntity內的字段,那么我們在/resource目錄下創建一個名字叫mail.properties的配置文件,里面存放我們定義的郵件發送參數配置,這樣方便修改,我分別貼出PropertiesUtil、mail.properties代碼內容,如下圖10、圖11所示:

          圖10

          圖11

          我使用的QQ郵箱地址作為測試,如果你需要使用你的QQ地址作為測試,請先到QQ郵箱開啟POP3/SMTP服務,開啟步驟如下。

          開啟POP3/SMTP

          第一步:進入郵箱點擊“設置”,如下圖12所示:

          圖12

          第二步:點擊“賬戶”后往下拉找到POP3/IMAP/SMTP...,如下圖13所示:

          圖13

          我的POP3以及SMTP以及開啟了所以這里顯示的狀態是已開啟,如果您第一次使用QQ郵箱的SMTP服務,請點擊“開啟”并且按照提示步驟完成獲取“授權碼”即可,授權碼就是發送郵件參數的smtp.pwd屬性。

          測試發送郵件

          我們創建一個TestMail類來作為測試入口,因為我們的項目是jar形式,所以我們直接新建一個main方法直接調用發送郵件就可以了,如下圖14所示測試代碼:

          圖14

          我是向我的釘釘郵箱發送了一條文本類型的測試郵件,發送效果圖如下圖15所示:

          圖15

          可以看到我們的郵件收到了,證明我們已經完成了郵件發送的功能了,但是你在發送中配置mail.properties文件時配置昵稱的時候最有可能出現的問題就是亂碼,那么該問題如何解決呢?

          昵稱亂碼問題解決

          第一步:修改InteiiJ IDEA工具的properties文件的編碼,點擊File->Setting->Editor->File Encodings將下面的Default encoding設置為UTF-8,如下圖16所示:

          圖16

          那么我們的mail.properties內使用ASCII編碼進行配置昵稱就可以了,具體中文如何轉換ASCII,請大家訪問tool.oschina.net/encode在線轉換即可。修改完成后再次測試發送郵件,你就會發現亂碼問題解決了。

          總結

          上述內容就是本章的所有講解,本章主要講解了在SpringBoot項目內是如何使用JavaMail來進行發送簡單郵件,簡單封裝了下MailSender類以及對象實體MailEntity,如果需要發送HTML內容的郵件修改contentType(MailContentTypeEnum.HTML)然后content("html代碼")即可。


          本號已開設如下二十大專題,歡迎關注,查看相關專題!

          • 【springboot專題】【spring源碼】
          • 【mysql優化專題】【HTTP協議】
          • 【架構技術專題】【多線程專題】
          • 【dubbo專題】【dubbo源碼專題】
          • 【JVM調優專題】【HTTP專題】
          • 【設計模式專題】【高并發專題】
          • 【架構技術專題】【Lucene專題】
          • 【數據結構專題】【redis專題】
          • 【mq中間件專題】【netty專題】
          • 【java面試專題】【zookeeper】

          主站蜘蛛池模板: 国产A∨国片精品一区二区 | 亚洲国产老鸭窝一区二区三区| 国产在线观看一区二区三区四区| 国产在线步兵一区二区三区| 伊人久久精品无码av一区| 麻豆一区二区在我观看| 激情综合丝袜美女一区二区| 亚洲欧洲一区二区| 精品国产AⅤ一区二区三区4区| 精品成人乱色一区二区| 国产一区在线视频观看| 久久国产视频一区| 国产一区二区三区夜色| av一区二区三区人妻少妇| 色欲综合一区二区三区| 亚洲成a人一区二区三区| 无码精品不卡一区二区三区 | 亚洲AⅤ视频一区二区三区| 亚洲AV无码一区二区三区久久精品 | 精品国产一区二区三区免费| 精品福利视频一区二区三区| 国产午夜毛片一区二区三区 | 精品女同一区二区三区在线 | 成人精品一区二区三区电影| 中文字幕精品一区二区日本| 精品视频一区二区三区在线观看 | 在线播放国产一区二区三区 | 日韩精品无码视频一区二区蜜桃| 射精专区一区二区朝鲜| 久久久国产精品一区二区18禁| 久久精品无码一区二区app| 久久久不卡国产精品一区二区| 在线电影一区二区| 白丝爆浆18禁一区二区三区 | 日本不卡一区二区三区视频| 国产主播一区二区三区在线观看| 中文字幕日韩一区二区不卡| 亚洲字幕AV一区二区三区四区| 国产亚洲3p无码一区二区| 日本精品一区二区三区在线视频| 亚洲午夜在线一区|