2013年6月27日 星期四

利用 GAE 與 Gmail 傳送電子郵件

由於 Appfog 似乎無法傳送信件 (老實說是我還不清楚), 而一般的免費 PHP 主機如果傳送太多郵件可能會被 suspend 帳號 (例如累積送出 5000 封信), 只有 GAE 不會搞這樣的不明不白停止人家帳號的小伎倆. 它的收費政策寫得很清楚, 祇要不超過免費界線, 定時寄送郵件的功能非常穩定. 以下說明如何利用 GAE 寄信, 細節請參考 :
GAE 是利用 mail 模組來寄信的, 因此使用前必須匯入 mail :

from google.appengine.api import mail

GAE 的 mail API 提供兩種寄送 E-mail 郵件的方式 :

  1. 直接呼叫 mail.send_mail() 方法 :
    這是最簡單的方式, 只要有寄件者, 收件者, 主旨與內容即可寄信, 當不需要用到副本 cc, 密件副本 bcc , 與附件時適用 :

    sender="abc123@gmail.com"
    subject="mail test from abc123@gmail.com at GAE"
    to="xyz@yahoo.com"
    body="Hello! World!"
    mail.send_mail(sender, to, subject, body)

    如果來自網頁以 POST 方式傳送, 可用例如 self.request.get("subject") 來取得. 由於主旨 subject 與內容 body 可能含有中文, 所以須加上 encode("utf-8") 以免亂碼 :

    body=self.request.get("content").encode("utf-8")
  2. 使用 mail.EmailMessage 物件 :
    此物件可指定副本 (Cc) 與密件副本 (Bcc) 收件人, 也可以傳送附件檔案. 注意, 收件人 to 與 cc, bcc 可以寄給不只一個對象, 只要用逗號或分號隔開即可 :

    msg=mail.EmailMessage()
    msg.sender="abc123@gmail.com"
    msg.subject="mail test from abc123@gmail.com at GAE"
    msg.to="xyz@yahoo.com, tuv@gmail.com"
    msg.cc="abc@yahoo.com, kkk@gmail.com"
    msg.bcc="nono@yahoo.com, ppp@gmail.com"
    msg.html="<b>Hello! World!</b>"

沒有留言 :