因為郵件的服務器使用"smtp.qq.com",所以先去qq郵箱賬號設置里開放服務。

image.png
from email.mime.text import MIMEText
import smtplib
# 注意構建MIMEText對象時,第一個參數(shù)就是郵件正文,第二個參數(shù)是MIME的subtype, 'plain'表示存文本,最后參數(shù)一定要用utf-8編碼保證多語言兼容性。
msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')
fromAddr = "your@qq.com"
password = "your 授權碼"
toemail = ['toemail@qq.com']
smtp_server = "smtp.qq.com"
server = smtplib.SMTP_SSL(smtp_server, 465) # 默認端口用465
# 我們用set_debuglevel(1)就可以打印出和SMTP服務器交互的所有信息。SMTP協(xié)議就是簡單的文本命令和響應。
server.set_debuglevel(1)
# login()方法用來登錄SMTP服務器。
server.login(fromAddr, password)
# sendmail()方法就是發(fā)郵件,由于可以一次發(fā)給多個人,所以傳入一個list,郵件正文是一個str,as_string()把MIMEText對象變成str。
server.sendmail(fromAddr, your_email, msg.as_string())
server.quit()
上面代碼執(zhí)行后,會發(fā)現(xiàn)沒有主題。

image.png
這是因為郵件主題、如何顯示發(fā)件人、收件人等信息并不是通過SMTP協(xié)議發(fā)給MTA,而是包含在發(fā)給MTA的文本中的,所以,我們必須把From、To和Subject添加到MIMEText中,才是一封完整的郵件:
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr(Header(name, 'utf-8').encode(), addr)
from_addr = 'your@qq.com'
password = '授權碼'
to_addr = 'toemail@qq.com'
smtp_server = "smtp.qq.com"
msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')
msg['From'] = _format_addr('Python愛好者 <%s>' % from_addr)
msg['To'] = _format_addr('管理員 <%s>' % to_addr)
msg['Subject'] = Header('來自SMTP的問候……', 'utf-8').encode()
server = smtplib.SMTP_SSL(smtp_server, 465) # 默認端口用465
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()
參考鏈接:
https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832745198026a685614e7462fb57dbf733cc9f3ad000
如果帶附件的郵件可以參考:
http://blog.csdn.net/zm2714/article/details/7993732