摘要:參數分別表示主機和端口。注意也可以在參數中指定端口號如,這樣就沒必要給出參數。當需要發送附件的時候使用的就是這個類的一個子類。主要用來發送圖片普通文本郵件文本對象,其中是郵件內容,郵件類型,可以是普通文本郵件,郵件編碼,可以是等等。
python發送郵件 準備
smtplibpython中發送郵件主要用的是smtplib和email兩個模塊,下面主要對這兩個模塊進行講解
在講解之前需要準備至少兩個測試的郵箱,其中要在郵箱的設置中開啟smtplib協議才可以進行發送和接受
smtplib.SMTP( [host [, port [, local_hostname[,timeout]]]]) host是SMTP主機的服務器,其中163郵箱的是smtp.163.com,其他的可以在網上找到,port是端口號,這里默認的是25,local_hostname是你主機的SMTP,如果SMTP在你的本機上,你只需要指定服務器地址為 localhost 即可。timeout是設置的連接的限制時間,如果超過這個時間還沒有連接上那么就會出現錯誤
SMTP.set_debuglevel(level):設置是否為調試模式。默認為False,即非調試模式,表示不輸出任何調試信息。如果設置為1就表示輸出調試信息
SMTP.connect([host[, port]]):連接到指定的smtp服務器。參數分別表示smpt主機和端口。注意: 也可以在host參數中指定端口號(如:smpt.yeah.net:25),這樣就沒必要給出port參數。
SMTP.login(user, password) 登錄服務器,這里的user是郵箱的用戶名,但是這里的password并不是你郵箱的密碼,當你開啟SMTP的時候會提示你設置一個密碼,這里的密碼就是對應的密碼
SMTP.sendmail(from_addr, [to_addrs,], msg[, mail_options, rcpt_options]) 發送郵件,from_addr是發送方也就是你的郵箱地址,to_addr是接受方的地址,當然這里的可以填上多個郵箱賬號發送給多個賬號,如果有多個賬號需要使用列表傳遞參數
SMTP.quit()斷開連接
普通文本郵件emial模塊用來處理郵件消息,包括MIME和其他基于RFC 2822 的消息文檔。使用這些模塊來定義郵件的內容,是非常簡單的。其包括的類有(更加詳細的介紹可見:http://docs.python.org/librar...):
class email.mime.base.MIMEBase(_maintype, _subtype, **_params):這是MIME的一個基類。一般不需要在使用時創建實例。其中_maintype是內容類型,如text或者image。_subtype是內容的minor type 類型,如plain或者gif。 **_params是一個字典,直接傳遞給Message.add_header()。
class email.mime.multipart.MIMEMultipart([_subtype[, boundary[, _subparts[, _params]]]]:MIMEBase的一個子類,多個MIME對象的集合,_subtype默認值為mixed。boundary是MIMEMultipart的邊界,默認邊界是可數的。當需要發送附件的時候使用的就是這個類
class email.mime.application.MIMEApplication(_data[, _subtype[, _encoder[, **_params]]]):MIMEMultipart的一個子類。
class email.mime.audio. MIMEAudio(_audiodata[, _subtype[, _encoder[, **_params]]]): MIME音頻對象
class email.mime.image.MIMEImage(_imagedata[, _subtype[, _encoder[, **_params]]]):MIME二進制文件對象。主要用來發送圖片
class email.mime.text.MIMEText(_text[, _subtype[, _charset]]):MIME文本對象,其中_text是郵件內容,_subtype郵件類型,可以是text/plain(普通文本郵件),html/plain(html郵件), _charset編碼,可以是gb2312等等。
普通文本郵件發送的實現,關鍵是要將MIMEText中_subtype設置為plain。首先導入smtplib和mimetext。創建smtplib.smtp實例,connect郵件smtp服務器,login后發送,具體代碼如下*
# 一個格式化郵件的函數,可以用來使用 def _format_addr(s): name, addr = parseaddr(s) return formataddr(( Header(name, "utf-8").encode(), addr.encode("utf-8") if isinstance(addr, unicode) else addr)) from_addr="××××××××" #你的郵箱地址 from_password="×××××××" #你的密碼 # to_email="chenjiabing666@yeah.net" to_email="××××××" #要發送的郵箱地址 msg=MIMEText("喬裝打扮,不擇手段","plain","utf-8") #這里text=喬裝打扮,不擇手段 msg["From"] = _format_addr(u"Python愛好者 <%s>" % from_addr) #格式化發件人 msg["To"] = _format_addr(u"管理員 <%s>" % to_email) #格式化收件人 msg["Subject"] = Header(u"來自SMTP的問候……", "utf-8").encode() #格式化主題 stmp="smtp.163.com" server=smtplib.SMTP(stmp,port=25,timeout=30) #連接,設置超時時間30s server.login(from_addr,from_password) #登錄 server.set_debuglevel(1) #輸出所有的信息 server.sendmail(from_addr,to_email,msg.as_string()) #這里的as_string()是將msg轉換成字符串類型的,如果你想要發給多個人,需要講to_email換成一個列表發送html郵件
還是用MIMEText來發送,不過其中的_subType設置成html即可,詳細代碼如下:
def _format_addr(s): name, addr = parseaddr(s) return formataddr(( Header(name, "utf-8").encode(), addr.encode("utf-8") if isinstance(addr, unicode) else addr)) from_addr="××××××××" #你的郵箱地址 from_password="×××××××" #你的密碼 # to_email="chenjiabing666@yeah.net" to_email="××××××" #要發送的郵箱地址 html="""附件的發送大家好
""" msg=MIMEText(html,"html","utf-8") #這里text=html,設置成html格式的 msg["From"] = _format_addr(u"Python愛好者 <%s>" % from_addr) #格式化發件人 msg["To"] = _format_addr(u"管理員 <%s>" % to_email) #格式化收件人 msg["Subject"] = Header(u"來自SMTP的問候……", "utf-8").encode() #格式化主題 stmp="smtp.163.com" server=smtplib.SMTP(stmp,port=25,timeout=30) #連接,設置超時時間30s server.login(from_addr,from_password) #登錄 server.set_debuglevel(1) #輸出所有的信息 server.sendmail(from_addr,to_email,msg.as_string()) #這里的as_string()是將msg轉換成字符串類型的,如果你想要發給多個人,需要講to_email換成一個列表
發送帶附件的郵件,首先要創建MIMEMultipart()實例,然后構造附件,如果有多個附件,可依次構造,最后利用smtplib.smtp發送,具體實力如下:
from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText import smtplib from email.mime.image import MIMEImage from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.header import Header def _format_addr(s): name, addr = parseaddr(s) return formataddr(( Header(name, "utf-8").encode(), addr.encode("utf-8") if isinstance(addr, unicode) else addr)) from_addr="××××××××" #你的郵箱地址 from_password="×××××××" #你的密碼 # to_email="chenjiabing666@yeah.net" to_email="××××××" #要發送的郵箱地址 msg=MIMEMultipart() #創建實例 text=MIMEText("將圖片嵌入到正文信息中陳加兵
大家好
","html","utf-8") msg.attach(text) #添加一個正文信息,這里實在正文中顯示的信息 #創建一個文本附件,這里是從指定文本中讀取信息,然后創建一個文本信息 att1=MIMEText(open("/home/chenjiabing/文檔/MeiZi_img/full/file.txt","rb").read(),"plain","utf-8") att1["Content-Type"] = "application/octet-stream" #指定類型 att1["Content-Disposition"] = "attachment; filename="123.txt""#這里的filename可以任意寫,寫什么名字,郵件中顯示什么名字 msg.attach(att1) #向其中添加附件 img_path="/home/chenjiabing/文檔/MeiZi_img/full/file.jpg" #圖片路徑 image=MIMEImage(open(img_path,"rb").read()) #創建一個圖片附件 image.add_header("Content-ID","<0>") #指定圖片的編號,這個會在后面用到 image.add_header("Content-Disposition", "attachment", filename="test.jpg") image.add_header("X-Attachment-Id", "0") msg.attach(image) #添加附件 stmp="smtp.163.com" server=smtplib.SMTP(stmp,port=25,timeout=30) #連接,設置超時時間30s server.login(from_addr,from_password) #登錄 server.set_debuglevel(1) #輸出所有的信息 server.sendmail(from_addr,to_email,msg.as_string()) #這里的as_string()是將msg轉換成字符串類型的,如果你想要發給多個人,需要講to_email換成一個列表
from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText import smtplib from email.mime.image import MIMEImage from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.header import Header def _format_addr(s): name, addr = parseaddr(s) return formataddr(( Header(name, "utf-8").encode(), addr.encode("utf-8") if isinstance(addr, unicode) else addr)) from_addr="××××××××" #你的郵箱地址 from_password="×××××××" #你的密碼 # to_email="chenjiabing666@yeah.net" to_email="××××××" #要發送的郵箱地址 msg=MIMEMultipart() #創建實例 html="""更多文章請移步本人博客https://chenjiabing666.github.io/下面演示嵌入圖片
""" text=MIMEText(" 陳加兵
大家好
","html","utf-8") msg.attach(text) #添加一個正文信息,這里實在正文中顯示的信息 #創建一個文本附件,這里是從指定文本中讀取信息,然后創建一個文本信息 att1=MIMEText(open("/home/chenjiabing/文檔/MeiZi_img/full/file.txt","rb").read(),"plain","utf-8") att1["Content-Type"] = "application/octet-stream" #指定類型 att1["Content-Disposition"] = "attachment; filename="123.txt""#這里的filename可以任意寫,寫什么名字,郵件中顯示什么名字 msg.attach(att1) #向其中添加附件 ## 創建一個圖片附件 img_path="/home/chenjiabing/文檔/MeiZi_img/full/file.jpg" #圖片路徑 image=MIMEImage(open(img_path,"rb").read()) #創建一個圖片附件 image.add_header("Content-ID","<0>") #指定圖片的編號, image.add_header("Content-Disposition", "attachment", filename="test.jpg") image.add_header("X-Attachment-Id", "0") msg.attach(image) #添加附件 #創建第二個圖片附件 img_path_1="/home/chenjiabing/文檔/MeiZi_img/full/test.jpg" #圖片路徑 image1=MIMEImage(open(img_path,"rb").read()) #創建一個圖片附件 image1.add_header("Content-ID","<1>") #指定圖片的編號,這個就是在上面對應的cid:1的那張圖片,因此這里的編號一定要對應 image1.add_header("Content-Disposition", "attachment", filename="img.jpg") image1.add_header("X-Attachment-Id", "0") msg1.attach(image) #添加附件 stmp="smtp.163.com" server=smtplib.SMTP(stmp,port=25,timeout=30) #連接,設置超時時間30s server.login(from_addr,from_password) #登錄 server.set_debuglevel(1) #輸出所有的信息 server.sendmail(from_addr,to_email,msg.as_string()) #這里的as_string()是將msg轉換成字符串類型的,如果你想要發給多個人,需要講to_email換成一個列表
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44365.html
摘要:使用腳本發送郵件并不復雜。以下為思路導圖模塊與發送郵件相關的模塊是關于簡單郵件傳輸協議的操作模塊,在發送郵件的過程中起到服務器之間互相通信的作用。 0. 前言 發送電子郵件是個很常見的開發需求。比如你寫了個監控天氣的腳本,發現第二天要下雨,或者網站上關注的某個商品降價了,就可以發個郵件到郵箱來提醒自己。 使用 Python 腳本發送郵件并不復雜。不過由于各家郵件的發送機制和安全策略不同...
摘要:自動發送郵件我們把報表做出來以后一般都是需要發給別人查看,對于一些每天需要發的報表或者是需要一次發送多份的報表,這個時候可以考慮借助來自動發送郵件。一份郵件的組成下圖是中發送一份郵件的界面,主要包含發件人收件人抄送人主題正文附件這幾部分。 ...
摘要:是發送郵件的協議,內置對的支持模塊和模塊可以發送純文本郵件郵件以及帶附件的郵件簡單郵件傳輸協議,是從源地址到目的地址傳送郵件的規則,由該協議控制信件的中轉方式的提供了一種很方便的途徑傳遞電子郵件,對進行了簡單的封裝發送純文本郵件導入模塊 SMTP是發送郵件的協議,Python內置對SMTP的支持(smtplib模塊和email模塊),可以發送純文本郵件、HTML郵件以及帶附件的郵件 S...
摘要:本米撲博客先介紹幾個最簡單的發送郵件方式記錄下,像郵件,附件等也是支持的,需要時查文檔即可。特別注意命令發送郵件,默認用端口號,由于阿里云騰訊云等封禁了端口號,因此本示例需在開通端口機器上測試執行命令收件結果 Python發送email的三種方式,分別為使用登錄郵件服務器、使用smtp服務、調用sendmail命令來發送三種方法 本文原文自米撲博客:Python 發送 email 的三...
摘要:程序人員對于郵件自動化的日常需求還是很高的。更是自帶一套模塊實現郵件發送。正是為了實現這個而生的,一句話就可以完成所有的登錄發送文字附件等功能。參考一句話發送郵件正常一點的發送郵件 程序人員對于郵件自動化的日常需求還是很高的。但是入過了Linux的命令行郵件客戶端如Sendmail, Mutt, Alpine等坑之后,發現現代其實很少人真的在用它們實現郵件自動化,根據搜索引擎里相關文章...
摘要:郵箱傳輸協議簡單郵件傳輸協議由源地址到目的地址的傳輸規則郵箱服務器默認端口生成第三方登錄郵箱的密鑰,這樣從第三方登錄郵箱,不能輸入密碼,只需要輸入第三方密鑰就行需要使用到的庫主要是負責發送郵件,連接郵箱服務器,登錄郵箱構造郵件,郵件顯示的內 QQ郵箱傳輸協議 SMTP:簡單郵件傳輸協議(由源地址到目的地址的傳輸規則) smtp.qq.com :QQ郵箱服務器 默認端口:25 生成第三...
閱讀 2184·2023-04-25 19:06
閱讀 1383·2021-11-17 09:33
閱讀 1770·2019-08-30 15:53
閱讀 2588·2019-08-30 14:20
閱讀 3548·2019-08-29 12:58
閱讀 3543·2019-08-26 13:27
閱讀 508·2019-08-26 12:23
閱讀 491·2019-08-26 12:22