国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

詳細講解用Python發送SMTP郵件的教程

2020-02-23 00:58:17
字體:
來源:轉載
供稿:網友

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

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

首先,我們來構造一個最簡單的純文本郵件:

from email.mime.text import MIMETextmsg = MIMEText('hello, send by Python...', 'plain', 'utf-8')

注意到構造MIMEText對象時,第一個參數就是郵件正文,第二個參數是MIME的subtype,傳入'plain',最終的MIME就是'text/plain',最后一定要用utf-8編碼保證多語言兼容性。

然后,通過SMTP發出去:

# 輸入Email地址和口令:from_addr = raw_input('From: ')password = raw_input('Password: ')# 輸入SMTP服務器地址:smtp_server = raw_input('SMTP server: ')# 輸入收件人地址:to_addr = raw_input('To: ')import smtplibserver = smtplib.SMTP(smtp_server, 25) # SMTP協議默認端口是25server.set_debuglevel(1)server.login(from_addr, password)server.sendmail(from_addr, [to_addr], msg.as_string())server.quit()

我們用set_debuglevel(1)就可以打印出和SMTP服務器交互的所有信息。SMTP協議就是簡單的文本命令和響應。login()方法用來登錄SMTP服務器,sendmail()方法就是發郵件,由于可以一次發給多個人,所以傳入一個list,郵件正文是一個str,as_string()把MIMEText對象變成str。

如果一切順利,就可以在收件人信箱中收到我們剛發送的Email:

2015429113449346.png (350×162)

仔細觀察,發現如下問題:

    郵件沒有主題;     收件人的名字沒有顯示為友好的名字,比如Mr Green <green@example.com>;     明明收到了郵件,卻提示不在收件人中。

這是因為郵件主題、如何顯示發件人、收件人等信息并不是通過SMTP協議發給MTA,而是包含在發給MTA的文本中的,所以,我們必須把From、To和Subject添加到MIMEText中,才是一封完整的郵件:

# -*- coding: utf-8 -*-from email import encodersfrom email.header import Headerfrom email.mime.text import MIMETextfrom email.utils import parseaddr, formataddrimport smtplibdef _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 = raw_input('From: ')password = raw_input('Password: ')to_addr = raw_input('To: ')smtp_server = raw_input('SMTP server: ')msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')msg['From'] = _format_addr(u'Python愛好者 <%s>' % from_addr)msg['To'] = _format_addr(u'管理員 <%s>' % to_addr)msg['Subject'] = Header(u'來自SMTP的問候……', 'utf-8').encode()server = smtplib.SMTP(smtp_server, 25)server.set_debuglevel(1)server.login(from_addr, password)server.sendmail(from_addr, [to_addr], msg.as_string())server.quit()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 樟树市| 宁都县| 镇巴县| 慈溪市| 万全县| 吉林市| 咸阳市| 怀柔区| 泰来县| 大宁县| 双城市| 方正县| 凤翔县| 浠水县| 明光市| 定兴县| 江达县| 峡江县| 海门市| 讷河市| 新乡县| 汪清县| 开封县| 湟中县| 广昌县| 永济市| 上饶市| 巢湖市| 镇赉县| 五莲县| 都昌县| 苍南县| 通道| 驻马店市| 故城县| 林周县| 财经| 河北区| 财经| 宣武区| 依兰县|