如何正確發送(大量) Email 信件

Update(2011/5): 推薦 Amazon SES 服務

Update(2010/5): So You’d Like to Send Some Email (Through Code) 也可以一看

Update(2011/7): 推薦 Postmark,也有 Rails plugin。

在眾多客戶需求中,我最害怕的其中一條”順便”要做的功能就是,在後台可以寄信給”全部的”使用者。

寄 “email” 而已,不是非常簡單嗎?

寄給幾個人是很簡單,但是要寄給”一群”人,那就不是件簡單的事情了,在這 spam 肆虐的年頭, 信寄出去不一定就能順利到達使用者的收件夾。

Engine Yard 的這兩篇 How To Ensure Your Email Gets DeliveredMaking Sure Your Email Gets Delivered 點出了寄 Email 要注意的事項:

  1. 處理退信

    Bonuce mail 是你寄出去的信件,但是因為某些理由(地址不對、對方信箱滿了)而被對方 mail sever 退信,這些 email 你必須要處理。如果你忽略它還一直寄,你就長得蠻像發垃圾信的傢伙,而會被列出黑名單之中。

  2. 與主要的 Email 服務商設定意見反應機制(Feedback Loop)

    Feedback Loop 是一項協助處理當你的 email 被使用者按下 “垃圾信” 的服務。透過主動接觸主要的 Email 服務提供商,去建立用戶意見反應機制。例如 台灣Y!Yahoo! Complaint Feedback Loopmsn等,減少被寄件者檢舉成垃圾信的次數。

  3. 建立自已的 email 清單

    建立你自己的 mail 清單。如果你的清單是買來的,不但收件人沒有同意要收到你的信件,也會有很高的機會是 bonuce mail。寄出大量的非允許郵件,終究會讓你的 IP 被列出黑名單。

    標準的作法是,要在使用者註冊後,且他們也確認收到註冊的認證信(透過email上的認證連結),如此便可以確保這個 email 的正確性,而不會變成 bonuce mail。你也應該避免寄出跟你服務無關的email,減少被檢舉成垃圾信的機會。

  4. 不要使用 100% 以圖片為主的內容

    減少使用圖片,像 Gmail 預設就不會讀取圖片,重要的資訊使用圖片可能會讓使用者預設就看不到。充滿圖片的的 email 也容易判讀成垃圾信。

  5. 使用垃圾信判讀工作測試

    收信的 mail server 通常會使用如 Spam Assassin 的工具來判讀是否是垃圾信,而你也應該用這類的工作檢查你寄出去的信件。www.brandonchecketts.com/emailtest.php 是一個線上的檢查工作,如果你的分數太低,顯然很可能被判讀成 spam。至於為什麼分數低,可以參考這篇文章

  6. 驗證 HTML

    如果你寄的是 HTML 格式,你應該檢查 HTML 格式是否正確。一封畸形的信件也容易變成 spam。

  7. 模擬測試終端使用者環境

    使用不同 email clients 實際測試,例如 litmusapp.com 這個工具。不同的 client 可能會顯示不同的結果。

  8. 專屬 IP

    是否有專屬的 IP。如果你的 email sever 是跟人共用的,很可能別人被 spam 了,跟著害到你被列入黑名單。

  9. 設定 SPF Validation

    SPF (Sender Policy Framework) 是一項 e-mail 協定來確認 return-path address 的正確性,用以防止垃圾信件。設定 SPF 可以改進你的信件發送成功率,特別是 hotmail(MSN)。

  10. 設定 Domain Keys Verification

    Domain Keys 驗證是另一種防止垃圾信件的協定。

  11. 設定 Reverse DNS 反查

    設定反向查詢的 DNS 記錄,如果你寄信的 IP 無法反查,可能根本就寄不到。

  12. 驗證寄信者地址

    你的寄信人 email 位址也要是正確存在的。許多 email 服務商會先檢查寄件人的地址是正確的,才會收信。

接下來麻煩的是,如果你終究還是不小心被列成黑名單,該怎麼辦? 這篇文章也列出一些常見的原因。

Anyway,我的結論是,還是交給專業的來吧~ 自己架設/管理 email server 不但辛苦又會被 blocked。如果信件量一天低於 500 封,我會建議採用免錢 Gmail 來寄信;超過的話,則有一些第三方服務可以採用,例如 Amazon SESSendgridAuthsmtp。 如果需要比較多的行銷功能,則可以考慮 MadmimiCampaignmonitorMailchimp 等服務。

BTW,既然提到了 Campaign Monitor,如果你有心做 Email marketing,他們家有不少值得一讀的資源,例如 Guide to CSS support in email clients 就十分有用。

9 thoughts on “如何正確發送(大量) Email 信件

  1. 不過不建議使用gmail,它的filter太強了,之前有計畫做一個分散式Gmail pool,最後還是選擇放棄。

  2. 不好意思
    能不能特別介紹一下

    mailchimp這家公司呢?因為我看很多網站提到他
    但是看起來發信不便宜耶

    謝謝

  3. 您好!
    我想請問一下,關於大量發送郵件的部分,由於我們是發送user訂閱電子報的服務,需要每天發送大量的郵件給user,但是因為大量發送的關係會容易被user所使用的mail服務視為黑名單,以至於無法在正確的時間發送給user,想請問一下關於我麼需求是否適用於以上你介紹的幾家的mail server部分呢? 如果方便可以留你的電話或mail跟您詢問嗎?

  4. 補充說明一下本文提到的這二家公司的服務:

    1. Amazon SES:
    這個月剛開放了 SMTP 的服務,但是最大的問題 “退信處理” 至今仍無較好的方式。(論壇上官方人員都有出面說明正在努力中)

    簡單的說: 如果退信超過一定比例 SES 就會自動停止服務。但是能不能用 API 查到哪些 Adress 是被退信的呢? 答案是不行,目前只能透過”即時”的退信回報處理。

    再簡單點說: SES “目前” 比較適用於「100%正確名單」的發送,未經驗證的名單就別想了。

    註:美國有一些第三方服務在協助處理 SES 的退信名單,效果如何沒用過不便多作評論,可以去這些廠商的網站/ Twitter 上看看。

    2. Postmark:
    只適用於「通知信」,其它種類的信件 (包含 EDM 等行銷郵件) 皆不在 Postmark 的服務範圍內。

    詳見官方說明:
    postmarkapp.com/terms-of-service

  5. 我們公司有一個CRM軟件可以發送大量EMAIL:
    1) email blast function (with HTML editor) on searched contact list
    2) ONE-STEP email promotion
    3) Create more sales opportunities
    4) Keep records of those who have opened your e-mails
    5) Automatic processing of undelivered e-mail addresses
    6) Send out by email according to customer preferences

  6. Mail Service 一般分两种:transactional & marketing.

    Marketing的选择有:

    Mailchimp
    Madmimi
    Campaign Monitor

    Transactional的选择有:

    Amazon SES
    Mailgun (backed by Rackspace)
    Mandrill (from Mailchimp)
    Sendcloud (中国大陆,backed by Sohu)

    另外Sendgrid同时提供以上两类服务。

    口碑方面,EDM的话Mailchimp是最广为Startup和独立开发者使用,Campaign Monitor价格较高大型企业用的较多。Transactional的话,Mailgun提供丰富的API,计费方式简单,后台管理系统完善,且客服非常不错。Mandrill则刚由Mailchimp推出,鉴于Mailchimp一直以来的良好口碑,应该也不错。Sendcloud在中国大陆的邮件抵达率最有保障。

    个人经验大抵如此。

Leave a Reply