Python – SMTP

前情提要

痞客邦最近「新增文章」API,不斷地出現未知的伺服器錯誤,而且從回應的時間來猜測的話, 感覺像是他們自己本身內部的錯誤導致 Time out 之類的。 礙於目前還無法在短時間內處理好一台伺服器建構多個 WordPress, 所以只好先將內容發佈到 Blogger 來解決當前的問題。 而我們只需要使用到發文的功能,所以就可以簡單利用電子郵件來發文;

  1. Blogger 設定的「以電子郵件傳送」
  2. 使用電子郵件張貼填入電子信箱,並開啟「立即發佈電子郵件」
  3. 儲存設定

這樣只要寄信給設定的地址的話,Blogger 便會自動發文。

SMTP

首先在 Python 當中,我們可以使用 smtplib 來發送信件, 下列使用 gmail 為例:

import smtplib
smtpserver = smtplib.SMTP_SSL("smtp.gmail.com",465)
smtpserver.ehlo()
smtpserver.login(username, password)

若你直接執行的話,可能會收到登入失敗的訊息; 由於 Google 在安全性設定上,會阻擋安全性較低的應用程式, 所以若要使用的話,則需要開啟相關設定:

登入與安全性
登入與安全性
啟用
啟用
這樣的話,就可以順利地登入 gmail。 再來準備信件的內容並寄出:

from email.mime.text import MIMEText
from email.header import Header
from_address = 'Archie.Chang.iOS@gmail.com'
to_address = ['Archie.Chang.iOS@gmail.com']
message = MIMEText(html_body, 'html', 'utf-8')
message['From'] = from_address
message['To'] = to_address[0]
message['Subject'] = subject
smtpserver.sendmail(from_address, to_address, message.as_string())
smtpserver.quit()

小雷

其中,sendmail 的 to_address 為 list 型態; 之前測試的過程中,我將 sendmail 改為

smtpserver.sendmail(from_address, to_address[0], message.asString())

結果導致它不斷地寄同一封信,Blogger 文章就大爆發了。

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus