1. 程式人生 > 其它 >exchange 只發送郵件 不能登入_Python: 通過QQ郵箱傳送電子郵件

exchange 只發送郵件 不能登入_Python: 通過QQ郵箱傳送電子郵件

技術標籤:exchange 只發送郵件 不能登入

文章背景:自學Python程式設計快速上手中關於傳送電子郵件的章節。本文講述如何通過Python,使用QQ郵箱傳送電子郵件。

  1. 連線到SMTP伺服器

    import smtplibsmtpObj = smtplib.SMTP('smtp.qq.com',587)

    0a25b3719abcb846dcdbd9358c8a85b3.png

  2. 傳送SMTP的“Hello”訊息

    smtpObj.ehlo()
  3. 開始TLS加密

    smtpObj.starttls()
  4. 登陸到SMTP伺服器

    smtpObj.login('[email protected]','MY_SECRET_PASSWORD')

    對於MY_SECRET_PASSWORD,針對QQ郵箱,需要輸入的是授權碼。授權碼是QQ郵箱推出的,用於登入第三方客戶端的專用密碼。適用於登入以下服務:POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務。

    將密碼放在原始碼中要當心。呼叫input(),讓使用者輸入密碼是個好主意。

  5. 傳送電子郵件

from email.mime.text import MIMETextfrom email.header import Headerfrom email.utils import parseaddr, formataddrdef _format_addr(s):  name, addr = parseaddr(s)  return formataddr((Header(name, 'utf-8').encode(), addr))from_addr = '[email protected]'     # 發件人to_addr = '
[email protected]
' # 收件人message = MIMEText('Happy new year!', 'plain', 'utf-8') # 正文message['From'] = _format_addr('Sam ' % from_addr) # 發件人message['To'] = _format_addr('Python lover ' % to_addr) # 收件人subject = 'Python SMTP 郵件測試'message['Subject'] = Header(subject, 'utf-8') #主題smtpObj.sendmail(from_addr, [to_addr], message.as_string())
  • 郵件主題、如何顯示發件人、收件人等資訊並不是通過SMTP協議傳送出去,而是包含在發給message的文字中。所以,我們必須把FromToSubject新增到MIMEText中,才是一封完整的郵件。

  • 函式_format_addr()用來格式化一個郵件地址;如果包含中文,需要通過Header物件進行編碼。

  • message['To']接收的是字串而不是list,如果有多個郵件地址,用,分隔即可。

  • sendmail()方法就是發郵件,由於可以一次發給多個人,所以傳入一個list,郵件正文是一個stras_string()MIMEText物件變成str

  1. 從SMTP伺服器斷開

smtpObj.quit()

程式碼彙總

import smtplibfrom email.mime.text import MIMETextfrom email.header import Headerfrom email.utils import parseaddr, formataddrdef _format_addr(s):  name, addr = parseaddr(s)  return formataddr((Header(name, 'utf-8').encode(), addr))# 1. 連線到SMTP伺服器smtpObj = smtplib.SMTP('smtp.qq.com',587)# 2. 傳送SMTP的“HELLO”訊息smtpObj.ehlo()# 3. 開始TLS加密smtpObj.starttls()# 4. 登陸到SMTP伺服器smtpObj.login('[email protected]','MY_SECRET_PASSWORD')# 5. 傳送電子郵件from_addr = '[email protected]'     # 發件人to_addr = '[email protected]'       # 收件人message = MIMEText('Happy new year!', 'plain', 'utf-8')     # 正文message['From'] = _format_addr('Sam ' % from_addr)     # 發件人message['To'] = _format_addr('Python lover ' % to_addr)  # 收件人subject = 'Python SMTP 郵件測試'message['Subject'] = Header(subject, 'utf-8')  #主題smtpObj.sendmail(from_addr, [to_addr], message.as_string())# 6. 從伺服器斷開smtpObj.quit()print("Done!")

執行程式碼後,開啟收件箱,效果如下:

515a3c67f82aa1712aa9bca2caf98f21.png

參考資料:

[1] Python程式設計快速上手—讓繁瑣工作自動化(https://ddz.red/AFTmO)

[2] QQ郵箱的POP3與SMTP伺服器(https://service.mail.qq.com/cgi-bin/help?subtype=1&no=167&id=28)

[3] 授權碼(https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256%27)

[4] SMTP傳送郵件(https://www.liaoxuefeng.com/wiki/1016959663602400/1017790702398272)

[5] Python SMTP傳送郵件(https://www.runoob.com/python/python-email.html)