Pages

Subscribe:

Ads 468x60px

Labels

顯示具有 Gmail 標籤的文章。 顯示所有文章
顯示具有 Gmail 標籤的文章。 顯示所有文章

2017年3月16日 星期四

使用 GMail SMTP Server 無法發信的問題

[分享] 使用 GMail SMTP Server 無法發信的問題
http://www.ntcart.com/forum/thread-220-1-1.html
(出處: OpenCart 台灣在地論壇)
由於很多主機商的主機,並不提供 PHP Mail() 的支援,
使得 OpenCart 系統無法使用 Mail 通訊協定來進行 email 的發送,
雖然 OpenCart 也提供了 SMTP 通訊協定的支援,
但在設定使用上,還是有一些人無法順利讓他們 OpenCart 系統發出信來。

SMTP Server 除了選擇主機商所提供的 SMTP Server 以外,
其次最多人選擇的應該就是 GMail 了,
不過 GMail 的安全機制也讓大部份使用者吃足苦頭,
明明已經依照各位前輩的教學做好設定了,信就是發不出去...

假設您的 gmail 是 yourname@gmail.com
則您的 OpenCart 郵件設定,應如下 :

    郵件協議 : SMTP
    郵件參數 : (空)
    SMTP 主機名稱 :ssl://smtp.gmail.com
    SMTP 使用者帳號 : yourname@gmail.com
    SMTP 密碼 : (您上面的 email 密碼)
    SMTP Port : 465
    SMTP 逾時 : 5
    附加通知信箱 : 

不過就算您設定正確了,信還是有可能發不出去,
在發信失敗時,您的 gmail 帳號應該會收到一封警告信,
主旨是 : 登入嘗試遭拒



此時請開啟此封信件,點擊信件內容中的 [瞭解詳情] 的連結,
開啟新視窗或新分頁,出現 「允許安全性較低的應用程式存取您的帳戶」 的頁面 :



建議閱讀一下網頁的內容,順便了解一下為什麼之前信寄不出去,
點擊頁面中下方前往 「低安全性應用程式」 專區頁面 :



在 「低安全性應用程式」 頁面中 [安全性較低的應用程式存取權限] 點擊 [開啟] 即可。

稍後再到您的 OpenCart 前端的連絡我們單元,
留下訊息測試 Email 的發信是否已經可以作用,
如果沒有意外的話,應該從此就能接收到 OpenCart 透過 GMail Server 發出的信件了。

2014年4月21日 星期一

如何正確發送(大量) 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 Delivered 和 Making 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 的工具來判讀是否是垃圾信,而你也應該用這類的工作檢查你寄出去的信件。http://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 SESSendgrid 或 Authsmtp。 如果需要比較多的行銷功能,則可以考慮 MadmimiCampagnmonitor 或 Mailchimp 等服務。
BTW,既然提到了 Campaign Monitor,如果你有心做 Email marketing,他們家有不少值得一讀的資源,例如 Guide to CSS support in email clients 就十分有用。

防止我公司的 MAIL 不會被設定為 垃圾郵件(SPAM)


公司的業務和主管向你抱怨,
Mail 寄出給國外客戶和廠商都收不到(跑倒垃圾信件匣)
甚至被當成垃圾郵件退回來?!

這一篇是寫給公司 IT/MIS 人員參考

1. 維護好公司的 smtp relay 安全



1.1 假設貴公司開放 SMTP ports 讓外部可以透過 smtp 發信
則要做好權限控管,沒有透過認證者 or IP 不再安全清單一律不許使用 SMTP 發信。
(也可考慮 VPN)

1.2 定期檢查使用者是否濫用 SMTP 寄送非公司相關信件

1.3 定期檢查使用者電腦是否中毒、中木馬成為發送廣告信的跳板

1.4 教育使用者足夠的資訊安全概念

1.5 請主要客戶、廠商幫忙,設定從公司來的郵件為「非垃圾郵件」
e.g.
Google Gmail 篩選器 (Filter) -> 不要將它傳送到垃圾郵件
http://mail.google.com/support/bin/answer.py?hl=b5&answer=6579

Yahoo奇摩 信箱的 「自動分類」
http://tw.promo.yahoo.com/tutorial/mail20/cg_filter1.html

Microsoft Outlook 的 「安全的收件者」
http://office.microsoft.com/zh-tw/outlook/HP052433571028.aspx



1.6 安裝相關的 Antivirus Mail Gateway or Mail-Server AntiVirus

1.7 定期檢查 Delivery Failures 的信件,
看看是否有定期寄給客戶、廠商的 mail address 已經失效,sent failed
請聯絡他們更換 address,減少 send/deliver failures。


2. 設定 DNS SPF TXT (Sender Policy Framework)記錄



詳細請看官網 http://www.openspf.org/

2.1 如何檢查 SPF TXT 記錄?
=> 使用 SPF 官網提供的 Tools
http://www.openspf.org/Why
http://www.kitterman.com/spf/validate.html

=> 或者用 dig 來查詢 Google & Hinet's public DNS 
代碼:

dig @8.8.8.8 -t TXT your-company-org-school.com
dig @168.95.1.1 -t TXT your-company-org-school.com 



2.2 或者寄送一封信到 spf-test@openspf.org
然後一分鐘內,你就會收到一個退信,
裡面有 Result="pass" 表示通過 SPF 測試驗證

如果是 Result="none" 那就表示 SPF 還沒有設定完成

2.3 如果你是使用 Google Apps 應用服務 (Google 代管郵件)

你的 SPF 應該長得是這樣子,都在同一行! 有 "double quote"
然後 all 前面是 ~ 波浪符號 
代碼:

"v=spf1 include:aspmx.googlemail.com ~all" 



2.4 另外記住 TXT 也是 DNS entries 的一部分,DNS 生效需要 24~48 小時。

2.5 舉例,成功的設定 SPF 會讓 Google Mail Gmail 更不會誤判垃圾信件

Example BEFORE-SET-SPF-TXT "NEUTRAL"
未設定之前,判定為「中立」 
代碼:

Received-SPF: neutral (google.com: 74.125.82.52 is neither permitted nor denied by domain of XXXXXXXX) client-ip=74.125.82.52;
Authentication-Results: mx.google.com; spf=neutral (google.com: 74.125.82.52 is neither permitted nor denied by domain of XXXXXXXXX) smtp.mail=XXXXXXXXX 


Example AFTER-SET-SPF-TXT "PASS"
設定之後,判定為「認證通過」 
代碼:

Received-SPF: pass (google.com: domain of XXXXXXXXX designates 74.125.82.52 as permitted sender) client-ip=74.125.82.52;
Authentication-Results: mx.google.com; spf=pass (google.com: domain of XXXXXXXXX designates 74.125.82.52 as permitted sender) smtp.mail=XXXXXXXXXXX 



3. 設定反查



相較於正查: Host Name / Domanin --> IP Address
所謂的反查就是 IP Address --> Host Name / Domain Name

有一些 Mail server 會透過檢查反查來判定 SPAM 的分數。
設定反查在某些狀況可以降低被誤判的機率。

如果公司自己有自己的 DNS server,就自己改
(記得 ns1, ns2, ns3 ... 所有 ns 都要改)

如果是請 IDC/ISP 代管,
大部分的 IDC/ISP (Hinet/Seednet) 都可以請工程師幫忙設定反查,應該也免費;
有 IDC/ISP 的和上述 TXT 一樣,提供 DNS manager 介面提供可設定。

4. 減少強制附加「智財權聲明」簽名檔



有一些公司,在 outbound 的 mail 會強制附上
類似下面這種「智財、版權」聲明稿。

英文叫做
legal statement signature
legal declaration signature
copyright statement signature ...

而這個動作,
導致「郵件本文」有時候比「聲明簽名檔」還要小...
如果某一些舊機器判定的公式有這一條,
可能會增加被誤判的機率。

建議:
換成適當大小的圖片、減少字數、或者選擇適當的顏色、適當的字體(例如避免,白底白字)。


引言回覆:

本郵件之資訊可能含有受機密或特殊管制之資訊,僅供指定之收件人使用。若您並非指定之收件人,切勿轉寄、散佈、複製或公開本通訊內容之任何部份,並請即通知寄件人並完全刪除本郵件。
The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential and/or privileged material. If you are not the intended recipient, please contact the sender immediately and destroy the material in its entirety, whether electronic or hard copy. You are notified that any review, retransmission, dissemination or other use of, or taking of any action in reliance upon, this information by persons or entities other than the intended recipient is prohibited. Please consider the environment before printing this email. 


5. 時常查詢是否貴公司已經在黑名單



SPAM Black List or Block List Query

http://www.spamhaus.org/
http://www.spamhaus.org/lookup.lasso (SBL, XBL PBL)
http://www.dnsstuff.com/tools
http://www.openrbl.org/

時常檢查,或者寫一個簡單的 script 照三餐檢查。


6. 避免公布貴公司的 Mail,防止 SPOOF



避免 SPAM/Spoof Address Spider

6.1 有 Contact 需求請盡量用 Contact Web-Form or Skype or 電話號碼

6.2 如果真要公布請用 E-Mail 圖片 (e-mail address 用圖片展示)

6.3 盡量減少公布可以 group mail 的 address



7. 考慮使用 DKIM or Domainkey 金鑰簽署郵件



e.g.
使用 Google Apps 提供的 DKIM 功能,
一樣是 DNS TXT FIELD
代碼:

google._domainkey    v=DKIM1; k=rsa; p=ABCDEFG.....



DKIM/DomainKeys 參考網址
http://www.dkim.org/
http://support.google.com/a/bin/answer.py?hl=zh-Hant&answer=174124
http://support.google.com/a/bin/answer.py?hl=zh-Hant&answer=180504&topic=2752442&ctx=topic


實作如下圖,多了一個「金鑰簽署者欄位」


DKIM-Signature.jpg 
DKIM-Signature.jpg 資料來源