2020-04-11 python學(xué)習(xí)日志--收發(fā)郵件

郵件收發(fā)的兩個(gè)模塊(module):

  • email模塊構(gòu)建郵件
  • smtplib模塊發(fā)送郵件
示意如下:
流程圖.png
自學(xué)相關(guān)模塊的本領(lǐng):網(wǎng)絡(luò)引擎搜索
  • 方式:為使檢索精確,我們可以使用+號(hào)或者空格連接關(guān)鍵詞耸峭,也可使用之前學(xué)習(xí)的and和or來(lái)連接澜躺。
  • 方法:
    學(xué)習(xí)方向.png
email模塊

用來(lái)寫郵件內(nèi)容的模塊蝉稳。這個(gè)內(nèi)容可以是純文本、HTML內(nèi)容掘鄙、圖片耘戚、附件等多種形式。
email其實(shí)是一個(gè)包(package)操漠。模塊一般是一個(gè)文件收津,而包是一個(gè)目錄,一個(gè)包中可以包含很多個(gè)模塊浊伙,可以說(shuō)包是“模塊打包”組成的撞秋。Python中的包都必須默認(rèn)包含一個(gè)init.py的文件。

email模塊函數(shù).png
郵件正文對(duì)應(yīng)的導(dǎo)入方式為:
from email.mime.text import MIMEText
# 引入email包中構(gòu)建文本內(nèi)容的方法
MIMEText(msg,type,chartset)
# msg:文本內(nèi)容嚣鄙,可自定義
# type:文本類型吻贿,默認(rèn)為plain(純文本)
# chartset:文本編碼,中文為“utf-8”
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
郵件頭的寫法:
from email.header import Header

msg['From'] = Header(from_addr)
msg['To'] = Header(to_addr)
msg['Subject'] = Header('python test')
smtplib模塊郵件發(fā)送的函數(shù)(方法)(來(lái)自網(wǎng)絡(luò)):
郵件發(fā)送的函數(shù).png

郵件發(fā)送函數(shù).png
總結(jié)smtplib發(fā)送郵件的函數(shù):
import smtplib

server = smtplib.SMTP()   
#server = smtplib.SMTP_SSL()
#如果端口是用SSL加密哑子,請(qǐng)這樣寫代碼舅列。其中server是變量名
server.connect(host, port)
#server.connect('smtp.qq.com', 465)   #smtp.qq.com為qq郵箱服務(wù)器
#如果出現(xiàn)編碼錯(cuò)誤UnicodeDecodeError,你可以這樣寫:server.connect('smtp.qq.com', 465,'utf-8')
server.login(username, password) 
#username:登錄郵箱的用戶名
#password:授權(quán)碼(不是郵箱登錄密碼)
server.sendmail(sender, to_addr, msg.as_string()) 
#from_addr:郵件發(fā)送地址卧蜓,就是上面的username
#to_addr:郵件收件人地址
#msg.as_string():為一個(gè)字符串類型 
server.quit()
#退出服務(wù)器帐要,結(jié)束SMTP會(huì)話
  • host是指定連接的郵箱服務(wù)器,你可以指定服務(wù)器的域名弥奸。通過(guò)搜索“xx郵箱服務(wù)器地址”榨惠,就可以找到;
  • port 是“端口”的意思。一般情況下SMTP默認(rèn)端口號(hào)為25赠橙。如果25行不通伸蚯,你可以通過(guò)搜索或者去郵箱設(shè)置里面查看端口。比如简烤,如果我打算用自己的企業(yè)郵箱來(lái)發(fā)郵件剂邮,登錄郵箱后,在【設(shè)置-選項(xiàng)-POP和IMAP】里面可以看到這些信息横侦;

收發(fā)郵件的全流程(郵件正文)

收發(fā)郵件的全流程.png
可能的報(bào)錯(cuò)信息:
  1. ValueError: server_hostname cannot be an empty string or start with a leading dot.
    將相應(yīng)代碼改為:
# 改動(dòng)這句代碼
server = smtplib.SMTP_SSL()
# 在括號(hào)內(nèi)加入host參數(shù)
server = smtplib.SMTP_SSL(smtp_server)
  1. smtplib.SMTPException: No suitable authentication method found.
    在登錄(login)之前調(diào)用starttls()方法就可以了挥萌。即將相應(yīng)代碼改為:
server.starttls()

郵件全文源代碼

# smtplib 用于郵件的發(fā)信動(dòng)作
import smtplib
from email.mime.text import MIMEText
# email 用于構(gòu)建郵件正文內(nèi)容
from email.header import Header
# 用于構(gòu)建郵件頭

# 發(fā)信方的信息:發(fā)信郵箱,QQ郵箱授權(quán)碼)
from_addr = 'xxx@qq.com'
password = '你的授權(quán)碼數(shù)字'

# 收信方郵箱
to_addr = 'xxx@qq.com'

# 發(fā)信服務(wù)器
smtp_server = 'smtp.qq.com'

# 郵箱正文內(nèi)容枉侧,第一個(gè)參數(shù)為內(nèi)容引瀑,第二個(gè)參數(shù)為格式(plain 為純文本),第三個(gè)參數(shù)為編碼
text = '''
?    希望學(xué)習(xí)Python對(duì)你不是一件困難的事情榨馁!
'''
msg = MIMEText(text,'plain','utf-8')

# 郵件頭信息:from_addr憨栽,to_addr可以自定義
msg['From'] = Header(from_addr)
msg['To'] = Header(to_addr)
msg['Subject'] = Header('python test')

# 開啟發(fā)信服務(wù),這里使用的是SSL加密傳輸
server = smtplib.SMTP_SSL()
server.connect(smtp_server,465)
# 登錄發(fā)信郵箱
server.login(from_addr, password)
# 發(fā)送郵件
server.sendmail(from_addr, to_addr, msg.as_string())
# 關(guān)閉服務(wù)器
server.quit()

群發(fā)郵件

郵件群發(fā)的三種方式.png
列表的方式:

使用str.join()函數(shù)將郵箱由列表轉(zhuǎn)為字符串

to_addrs=['mail1','mail2','mail3']
comon=","
addrs_mod=comon.join(to_addrs)
While循環(huán):

通過(guò)輸入的方式將郵箱逐個(gè)加入到事先建立的空列表中

# smtplib 用于郵件的發(fā)信動(dòng)作
import smtplib
from email.mime.text import MIMEText
# email 用于構(gòu)建郵件內(nèi)容
from email.header import Header
# 用于構(gòu)建郵件頭

# 發(fā)信方的信息:發(fā)信郵箱翼虫,QQ 郵箱授權(quán)碼
from_addr = input('請(qǐng)輸入登錄郵箱:')
password = input('請(qǐng)輸入郵箱授權(quán)碼:')

# 收信方郵箱
to_addrs = []
while True:
    a=input('請(qǐng)輸入收件人郵箱:')
    to_addrs.append(a)
    b=input('是否繼續(xù)輸入屑柔,n退出,任意鍵繼續(xù):')
    if b == 'n':
        break

# 發(fā)信服務(wù)器
smtp_server = 'smtp.qq.com'

text='''親愛(ài)的學(xué)員珍剑,你好掸宛!
希望學(xué)習(xí)Python對(duì)你不是一件困難的事情!
'''
msg = MIMEText(text,'plain','utf-8')

# 郵件頭信息
msg['From'] = Header(from_addr)
msg['To'] = Header(",".join(to_addrs)) 
msg['Subject'] = Header('python test')

# 開啟發(fā)信服務(wù)招拙,這里使用的是加密傳輸
server = smtplib.SMTP_SSL(smtp_server)
server.connect(smtp_server,465)
# 登錄發(fā)信郵箱
server.login(from_addr, password)
# 發(fā)送郵件
server.sendmail(from_addr, to_addrs, msg.as_string())
# 關(guān)閉服務(wù)器
server.quit()
調(diào)用csv模塊
data = [['wufeng ', 'wufeng@qq.com'],['kaxi', 'kaxi@qq.com']]

# 寫入收件人數(shù)據(jù)
with open('to_addrs.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    for row in data:
        writer.writerow(row)

# 讀取收件人數(shù)據(jù)唧瘾,并啟動(dòng)寫信和發(fā)信流程
with open('to_addrs.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader: 
        to_addrs=row[1]
        msg = MIMEText(text,'plain','utf-8')
        msg['From'] = Header(from_addr)
        msg['To'] = Header(to_addrs)
        msg['Subject'] = Header('python test')
        server = smtplib.SMTP_SSL()
        server.connect(smtp_server,465)
        server.login(from_addr, password)
        server.sendmail(from_addr, to_addrs, msg.as_string())

# 關(guān)閉服務(wù)器
server.quit()

try...except...語(yǔ)句處理你遇到的問(wèn)題

try:
    server.sendmail(from_addr, to_addrs, msg.as_string())
    print('恭喜,發(fā)送成功')
except:
    print('發(fā)送失敗别凤,請(qǐng)重試')

什么是SMTP饰序?

SMTP (Simple Mail Transfer Protocol)是“簡(jiǎn)單郵件傳輸協(xié)議”的意思,SMTP 協(xié)議是由源服務(wù)器目的地服務(wù)器傳送郵件的一組規(guī)則规哪。

注:此日志來(lái)源于風(fēng)變編程課程求豫。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市由缆,隨后出現(xiàn)的幾起案子注祖,更是在濱河造成了極大的恐慌猾蒂,老刑警劉巖均唉,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異肚菠,居然都是意外死亡舔箭,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)层扶,“玉大人箫章,你說(shuō)我怎么就攤上這事【祷幔” “怎么了檬寂?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)戳表。 經(jīng)常有香客問(wèn)我桶至,道長(zhǎng),這世上最難降的妖魔是什么匾旭? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任镣屹,我火速辦了婚禮,結(jié)果婚禮上价涝,老公的妹妹穿的比我還像新娘女蜈。我一直安慰自己,他們只是感情好色瘩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布伪窖。 她就那樣靜靜地躺著,像睡著了一般居兆。 火紅的嫁衣襯著肌膚如雪惰许。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天史辙,我揣著相機(jī)與錄音汹买,去河邊找鬼。 笑死聊倔,一個(gè)胖子當(dāng)著我的面吹牛晦毙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播耙蔑,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼见妒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了甸陌?” 一聲冷哼從身側(cè)響起须揣,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钱豁,沒(méi)想到半個(gè)月后耻卡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡牲尺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年卵酪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了幌蚊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡溃卡,死狀恐怖溢豆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瘸羡,我是刑警寧澤漩仙,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站犹赖,受9級(jí)特大地震影響讯赏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜冷尉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一漱挎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧雀哨,春花似錦磕谅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至捌浩,卻和暖如春放刨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背尸饺。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工进统, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人浪听。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓螟碎,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親迹栓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子掉分,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 郵件是我們?nèi)粘9ぷ髦兄饕臏贤浇橹弧D壳皫缀跛芯幊陶Z(yǔ)言都支持發(fā)送和接收電子郵件克伊。接下來(lái)將介紹如何使用Pyth...
    瀧汰泱閱讀 2,243評(píng)論 0 4
  • python使用SMTP發(fā)送電子郵件 SMTP是發(fā)送郵件的協(xié)議酥郭,Pytho...
    小娟_bb93閱讀 805評(píng)論 0 1
  • python發(fā)郵件需要掌握兩個(gè)模塊的用法,smtplib和email愿吹,這倆模塊是python自帶的不从,只需impor...
    Magic_小灰灰閱讀 306評(píng)論 0 0
  • 網(wǎng)絡(luò) 理論模型,分為七層物理層數(shù)據(jù)鏈路層傳輸層會(huì)話層表示層應(yīng)用層 實(shí)際應(yīng)用,分為四層鏈路層網(wǎng)絡(luò)層傳輸層應(yīng)用層 IP...
    FlyingLittlePG閱讀 774評(píng)論 0 0
  • 一、相關(guān)模塊介紹 發(fā)送郵件主要用到了smtplib和email兩個(gè)模塊洗搂,這里首先就兩個(gè)模塊進(jìn)行一下簡(jiǎn)單的介紹: 1...
    LizPL閱讀 1,350評(píng)論 0 3