解讀Python發送郵件

来源:http://www.cnblogs.com/BaiYiShaoNian/archive/2016/01/10/5117723.html
-Advertisement-
Play Games

解讀Python發送郵件Python發送郵件需要smtplib和email兩個模塊。也正是由於我們在實際工作中可以導入這些模塊,才使得處理工作中的任務變得更加的簡單。今天,就來好好學習一下使用Python發送郵件吧。SMTP是發送郵件的協議,Python內置對SMTP的支持,可以發送純文本郵件、HT...


解讀Python發送郵件

Python發送郵件需要smtplib和email兩個模塊。也正是由於我們在實際工作中可以導入這些模塊,才使得處理工作中的任務變得更加的簡單。今天,就來好好學習一下使用Python發送郵件吧。

SMTP是發送郵件的協議,Python內置對SMTP的支持,可以發送純文本郵件、HTML郵件以及帶附件的郵件。

Python對SMTP支持有smtplib和email兩個模塊,email負責構造郵件,smtplib負責發送郵件。

1.郵件正文是文本的格式

 1 # -*- coding: UTF-8 -*-
 2 
 3 from email.mime.multipart import MIMEMultipart
 4 from email.mime.text import MIMEText
 5 import smtplib
 6 import sys
 7 import csv
 8 import xlrd
 9 from pyExcelerator import *
10 import os
11 import xlwt
12 from xlutils.copy import copy
13 import pyExcelerator
14 import datetime
15 import time
16 
17 reload(sys)
18 sys.setdefaultencoding("utf-8")
19 
20 mailto_list = [""]  # 郵件接收方的郵件地址
21 mail_host = "smtp.exmail.qq.com"    # 郵件傳送協議伺服器
22 mail_user = ""  # 郵件發送方的郵箱賬號
23 mail_pass = ""  # 郵件發送方的郵箱密碼
24 
25 def send_mail(to_list, sub, content):
26     me = "天才白痴夢"+"<"+mail_user+">"
27     msg = MIMEText(content, _subtype='plain', _charset='utf-8')
28     msg['Subject'] = sub    # 郵件主題
29     msg['From'] = me
30     msg['To'] = ";".join(to_list)
31     try:
32         server = smtplib.SMTP()
33         server.connect(mail_host)
34         server.login(mail_user, mail_pass)
35         server.sendmail(me, to_list, msg.as_string())
36         server.close()
37         return True
38     except Exception, e:
39         print str(e)
40         return False
41 
42 if __name__ == '__main__':
43     sub = "天才白痴夢"
44     content = '...'
45     if send_mail(mailto_list, sub, content):
46         print "發送成功"
47     else:
48         print "發送失敗"

2.郵件正文是表格的格式:由於是表格,所以我們選擇HTML來實現表格的功能,郵件上面顯示的就是HTML實現的內容了。

 1 # -*- coding: UTF-8 -*-
 2 
 3 from email.mime.multipart import MIMEMultipart
 4 from email.mime.text import MIMEText
 5 import smtplib
 6 import sys
 7 import csv
 8 import xlrd
 9 from pyExcelerator import *
10 import os
11 import xlwt
12 from xlutils.copy import copy
13 import pyExcelerator
14 import datetime
15 import time
16 
17 reload(sys)
18 sys.setdefaultencoding("utf-8")
19 
20 mailto_list = [""]  # 郵件接收方的郵件地址
21 mail_host = "smtp.exmail.qq.com"    # 郵件傳送協議伺服器
22 mail_user = ""  # 郵件發送方的郵箱賬號
23 mail_pass = ""  # 郵件發送方的郵箱密碼
24 
25 def send_mail(to_list, sub, content):
26     me = "天才白痴夢"+"<"+mail_user+">"
27     # 和上面的代碼不同的就是,這裡我們選擇的是html 的格式
28     msg = MIMEText(content, _subtype='html', _charset='utf-8')
29     msg['Subject'] = sub    # 郵件主題
30     msg['From'] = me
31     msg['To'] = ";".join(to_list)
32     try:
33         server = smtplib.SMTP()
34         server.connect(mail_host)
35         server.login(mail_user, mail_pass)
36         server.sendmail(me, to_list, msg.as_string())
37         server.close()
38         return True
39     except Exception, e:
40         print str(e)
41         return False
42 
43 if __name__ == '__main__':
44     sub = "天才白痴夢"
45     html = '<html></html>'
46     if send_mail(mailto_list, sub, html):
47         print "發送成功"
48     else:
49         print "發送失敗"

3.郵件正文是圖片的格式:要把圖片嵌入到郵件正文中,我們只需按照發送附件的方式,先把郵件作為附件添加進去,然後,在HTML中通過引用src="cid:0"就可以把附件作為圖片嵌入了。如果有多個圖片,給它們依次編號,然後引用不同的cid:x即可。

 1 def send_mail(to_list, sub, content):
 2     me = "天才白痴夢"+"<"+mail_user+">"
 3 
 4     msg = MIMEMultipart()
 5     msg['Subject'] = sub    # 郵件主題
 6     msg['From'] = me
 7     msg['To'] = ";".join(to_list)
 8 
 9     txt = MIMEText("天才白痴夢", _subtype='plain', _charset='utf8')
10     msg.attach(txt)
11 
12     # <b>:黑體  <i>:斜體
13     msgText = MIMEText('<b>Some <i>HTML</i> text</b> and an image.<img alt="" src="cid:image1" />good!', 'html', 'utf-8')
14     msg.attach(msgText)
15 
16     file1 = "F:\\1.jpg"
17     image = MIMEImage(open(file1, 'rb').read())
18     image.add_header('Content-ID', '<image1>')
19     msg.attach(image)
20 
21     try:
22         server = smtplib.SMTP()
23         server.connect(mail_host)
24         server.login(mail_user, mail_pass)
25         server.sendmail(me, to_list, msg.as_string())
26         server.close()
27         return True
28     except Exception, e:
29         print str(e)
30         return False
31 
32 if __name__ == '__main__':
33     sub = "天才白痴夢"
34     html = '<html></html>'
35     if send_mail(mailto_list, sub, html):
36         print "發送成功"
37     else:
38         print "發送失敗"

4.發送郵件附件:郵件附件是圖片

 1 def send_mail(to_list, sub, content):
 2     me = "天才白痴夢"+"<"+mail_user+">"
 3 
 4     msg = MIMEMultipart()
 5     msg['Subject'] = sub    # 郵件主題
 6     msg['From'] = me
 7     msg['To'] = ";".join(to_list)
 8 
 9     txt = MIMEText("天才白痴夢", _subtype='plain', _charset='utf8')
10     msg.attach(txt)
11 
12     # # <b>:黑體  <i>:斜體
13     # msgText = MIMEText('<b>Some <i>HTML</i> text</b> and an image.<img alt="" src="cid:image1" />good!', 'html', 'utf-8')
14     # msg.attach(msgText)
15     #
16     # file1 = "F:\\1.jpg"
17     # image = MIMEImage(open(file1, 'rb').read())
18     # image.add_header('Content-ID', '<image1>')
19     # msg.attach(image)
20 
21     att = MIMEText(open('F:\\1.jpg', 'rb').read(), 'base64', 'utf-8')
22     att["Content-Type"] = 'application/octet-stream'
23     att["Content-Disposition"] = 'attachment; filename="1.jpg"'
24     msg.attach(att)
25 
26     try:
27         server = smtplib.SMTP()
28         server.connect(mail_host)
29         server.login(mail_user, mail_pass)
30         server.sendmail(me, to_list, msg.as_string())
31         server.close()
32         return True
33     except Exception, e:
34         print str(e)
35         return False

5.發送群郵件:同時發送給多人

1 mailto_list = [""]  # 郵件接收方的郵件地址

上面這一行代碼是郵件接收方的郵件地址,如果我們需要給多人發送郵件的話,就只需要把對方的郵件帳號綁在這一個列表裡就ok了。

加密SMTP

使用標準的25埠連接SMTP伺服器時,使用的是明文傳輸,發送郵件的整個過程可能會被竊聽。要更安全地發送郵件,可以加密SMTP會話,實際上就是先創建SSL安全連接,然後再使用SMTP協議發送郵件。

方法:只需要在創建SMTP對象後,立刻調用starttls()方法,就創建了安全連接。

1 smtp_server = 'smtp.qq.com'
2 smtp_port = 25    # 預設埠號為25
3 server = smtplib.SMTP(smtp_server, smtp_port)
4 server.starttls()
5 # 剩下的代碼和前面的一模一樣:
6 server.set_debuglevel(1)     # 列印出和SMTP伺服器交互的所有信息

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 題目:Given preorder and inorder traversal of a tree, construct the binary tree.Note:You may assume that duplicates do not exist in the tree.思路:遞歸,preord...
  • 題目:Given a binary tree, find its maximum depth.The maximum depth is the number of nodes along the longest path from the root node down to the farthest...
  • 題目:Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level). For example:Given binary tree...
  • 題目:Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).For example, this binary tree is symmetric: 1 / ...
  • 題目:Given two binary trees, write a function to check if they are equal or not.Two binary trees are considered equal if they are structurally identical...
  • 題目大意:平面上有n個點,兩兩不同。現在給出二叉樹的定義,要求樹邊一定是從上指向下,即從y坐標大的點指向小的點,並且每個結點至多有兩個兒子。現在讓你求給出的這些點是否能構成一棵二叉樹,如果能,使二叉樹的樹邊長度(歐幾里德長度)總和最小,輸出這個總和。如果不能,輸出-1.答案與標準答案相差1e-6內都...
  • 假設某 POJO 有屬性如下: private Set users = new HashSet(0); @OneToMany(fetch = FetchType.LAZY, mappedBy = "xuser") public Set getUsers() { return this.users; ...
  • 國際化信息又稱為本地化信息,由語言類型(如zh)和國家/地區類型來限定(如CN)。java.util.Locale是創建國際化的基礎類。spring管理國際化定義了MessageSource介面。ResourceBundleMessageSource實現了MessageSource介面。
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...