先安裝
pip install smtplib
發送qq,163郵件,帶有附件的郵件
1.qq郵件
# 用於發送郵件的模塊
import smtplib
# QQ郵箱/163郵箱的郵件發送:py文件發送郵件內容相當於一個第三方的客戶端,借助於QQ/163郵箱服務器來發送的郵件。
# QQ郵件
# 1> 配置郵箱SMTP服務器的主機地址,將來使用這個服務器收發郵件。
HOST = 'smtp.qq.com'
# 2> 配置服務的端口,默認的郵件端口是25.
PORT = '465'
# 3> 指定發件人和收件人。
FROM = '我的qq郵箱'
TO = '要發送的qq郵箱'
# 4> 郵件標題
SUBJECT = '此信只應天上有'
# 5> 郵件內容
CONTENT = '兩彎似蹙非蹙罥煙眉,一雙似泣非泣含露目。態生兩靨之愁,嬌襲一身之病。淚光點點,嬌喘微微。閑靜時如姣花照水,' \
'行動處似弱柳扶風。心較比干多一竅,病如西子勝三分。聰明清秀,絕麗無雙,氣質脫俗,淡雅若仙,嫵媚風流。方離柳塢,' \
'乍出花房.但行處,鳥驚庭樹,將到時,影度回廊.仙袂乍飄兮,聞麝蘭之馥郁,荷衣欲動兮,聽環佩之鏗鏘.靨笑春桃兮,雲堆翠髻,' \
'唇綻櫻顆兮,榴齒含香.纖腰之楚楚兮,回風舞雪,珠翠之輝輝兮,滿額鵝黃.出沒花間兮,宜嗔宜喜,徘徊池上兮,' \
'若飛若揚.蛾眉顰笑兮,將言而未語,蓮步乍移兮,待止而欲行.羡彼之良質兮,冰清玉潤,羡彼之華服兮,' \
'閃灼文章.愛彼之貌容兮,香培玉琢,美彼之態度兮,鳳翥龍翔.其素若何,春梅綻雪.其潔若何,秋菊被霜.其靜若何,' \
'松生空谷.其艷若何,霞映澄塘.其文若何,龍游曲沼.其神若何,月射寒江.應慚西子,實愧王嬙.奇矣哉,' \
'生於孰地,來自何方,信矣乎,瑤池不二,紫府無雙.果何人哉?如斯之美也!'
# 創建郵件發送對象
# 普通的郵件發送形式
# smtp_obj = smtplib.SMTP()
# 數據在傳輸過程中會被加密。
smtp_obj = smtplib.SMTP_SSL()
# 需要進行發件人的認證,授權。
# smtp_obj就是一個第三方客戶端對象
smtp_obj.connect(host=HOST, port=PORT)
# 如果使用第三方客戶端登錄,要求使用授權碼,不能使用真實密碼,防止密碼泄露。
res = smtp_obj.login(user=FROM, password='我的授權碼')
print('登錄結果:', res)
# 發送郵件
for x in range(2):
msg = '\n'.join(['From: {}'.format(FROM), 'To: {}'.format(TO), 'Subject: {}'.format(SUBJECT), '', CONTENT])
smtp_obj.sendmail(from_addr=FROM, to_addrs=[TO], msg=msg.encode('utf-8'))
2.163郵件
import smtplib
# 網易163郵箱
HOST = 'smtp.163.com'
# 2> 配置服務的端口,默認的郵件端口是25.
PORT = '25'
# 3> 指定發件人和收件人。
FROM = '發件人'
TO = '收件人'
# 4> 郵件標題
SUBJECT = '洛神賦'
# 5> 郵件內容
CONTENT = "翩若驚鴻,婉若游龍。榮曜秋菊,華茂春松。髣髴兮若輕雲之蔽月,飄颻兮若流風之回雪。遠而望之," \
"皎若太陽升朝霞;迫而察之,灼若芙蕖出淥波。穠纖得衷,修短合度。肩若削成,腰如約素。延頸秀項," \
"皓質呈露。芳澤無加,鉛華弗御。雲髻峨峨,修眉聯娟。丹唇外朗,皓齒內鮮,明眸善睞,靨輔承權。" \
"瑰姿艷逸,儀靜體閑。柔情綽態,媚於語言。奇服曠世,骨像應圖。披羅衣之璀粲兮,珥瑤碧之華琚。" \
"戴金翠之首飾,綴明珠以耀軀。踐遠游之文履,曳霧綃之輕裾。微幽蘭之芳藹兮,步踟躕於山隅。"
# 創建郵件發送對象
# 普通的郵件發送形式
smtp_obj = smtplib.SMTP()
# 數據在傳輸過程中會被加密。
# smtp_obj = smtplib.SMTP_SSL()
# 需要進行發件人的認證,授權。
# smtp_obj就是一個第三方客戶端對象
smtp_obj.connect(host=HOST, port=PORT)
# 如果使用第三方客戶端登錄,要求使用授權碼,不能使用真實密碼,防止密碼泄露。
res = smtp_obj.login(user=FROM, password='授權碼')
print('登錄結果:', res)
# 發送郵件
msg = '\n'.join(['From: {}'.format(FROM), 'To: {}'.format(TO), 'Subject: {}'.format(SUBJECT), '', CONTENT])
smtp_obj.sendmail(from_addr=FROM, to_addrs=TO, msg=msg.encode('utf-8'))
3.發送附件
# 發送帶有附件的郵件。
import smtplib
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart, MIMEBase
from email import encoders
HOST = "smtp.qq.com"
PORT = "465"
SUBJECT = "測試郵件"
FROM = "發件人"
TO = "收件人"
# 1> 創建用於發送帶有附件文件的郵件對象
# related: 郵件內容的格式,采用內嵌的形式進行展示。
message = MIMEMultipart('related')
# 向message對象中添加不同類型的郵件內容。
# 發送內容是html的郵件,郵件中含有圖片。
# 參數2:指定郵件內容類型,默認是plain,表示沒有任何格式的純文本內容。
message_html = MIMEText('<h1>含有圖片的郵件:</h1><p>接下來就會展示這個圖片了</p><img src="cid:images">', 'html', 'utf8')
# 2> 需要將message_html對象,添加至message中,等待被發送。
message.attach(message_html)
def load_image(path, cid):
data = open(path, 'rb')
message_img = MIMEImage(data.read())
data.close()
# 給圖片綁定cid,將來根據這個cid的值,找到標簽內部對應的img標簽。
message_img.add_header('Content-ID', cid)
# 返回MIMEImage的對象,將該對象放入message中
return message_img
# 向img標簽中指定圖片
message.attach(load_image('scrapy_img.png', 'images'))
# 文檔附件、圖片附件等。
# 一般如果數據是二進制的數據格式,在指定第二個參數的時候,都使用base64,一種數據傳輸格式。
message_docx = MIMEText(open('test.docx', 'rb').read(), 'base64', 'utf8')
# message_docx['Content-Disposition'] = 'attachment;filename=test.docx'
message_docx.add_header('content-disposition', 'attachment', filename='mytest.docx')
message.attach(message_docx)
message_docx1 = MIMEText(open('測試.docx', 'rb').read(), 'base64', 'utf8')
# 如果文件名是中文的:
# add_header()能夠正常的顯示中文;
# message_docx1['Content-Disposition']是無法正常顯示中文的。
message_docx1['Content-Disposition'] = 'attachment;filename=測試.docx'
# message_docx1.add_header('content-disposition', 'attachment', filename='測試.docx')
message.attach(message_docx1)
message_image = MIMEText(open('scrapy_img.png', 'rb').read(), 'base64', 'utf8')
# message_image['Content-Disposition'] = 'attachment;filename=test.png'
message_image.add_header('content-disposition', 'attachment', filename='mytest.png')
message.attach(message_image)
message['From'] = FROM
message['Subject'] = SUBJECT
message['To'] = TO
client = smtplib.SMTP_SSL()
client.connect(HOST, PORT)
print('result: ',client.login(FROM, '授權碼'))
print('發送結果:',client.sendmail(from_addr=FROM, to_addrs=[TO], msg=message.as_string()))
————————————————