2015年2月25日 星期三

用Gmail當SMTP寄信,出現登入遭拒


通常寄信都會用phpMailer的方式,加Gmail當SMTP
但最近的專案用一樣的code確無法寄信成功

$mail->ErrorInfo;

會得到這樣的錯誤訊息:
Language string failed to load: connect_host

用帳號密碼登入gmail,收到【Google 帳戶:登入嘗試遭拒】的信件
設定了「安全性較低的應用程式存取權限」後,程式還是無法發信
後來找到一篇文章解答,應該是Google為了安全性,有做了一些權限設定更改

文章說的很清楚,就直接紀錄連結:
http://jimmysu.logdown.com/posts/249495-gmail-smtp-authentication-required
(而且覺得他blog的標題好實在 XD)

摘錄:
Google 把所有不是透過 Gmail 網頁操作的發信需求,通通都先擋起來了。可以透過以下步驟解開限制。
1.將「安全性較低的應用程式存取權限」設為「啟用」
進入此網頁 https://www.google.com/settings/security/lesssecureapps ,設為「啟用」。
或是您可以到 Google 帳戶內找到「安全性較低的應用程式存取權限」的設定。
這時候再寄看看,通常只要啟用這個,網站的表單就可以正常寄送了。
如果還不行,請再往下看。
2.解除人機驗證鎖定
進入此網頁 https://accounts.google.com/b/0/DisplayUnlockCaptcha 點擊「繼續」。
這時候再寄看看,通常只要啟用這個,網站的表單就可以正常寄送了。
如果還不行,請再往下看。
3.啟用兩步驟驗證,再設定應用程式專用密碼
進入此網頁 https://accounts.google.com/b/0/SmsAuthConfig?hl=zh_TW,啟用兩步驟驗證。
從此以後,在尚未信任的裝置上用email跟密碼登入 Google 帳號,是無法使用的。一定還要再透過電話或簡訊驗證,才能真正登入帳戶。
進入此網頁 https://security.google.com/settings/security/apppasswords?pli=1,產生一組應用程式專用密碼,然後把寄件程式內的 google 密碼換成這組應用程式密碼。
這組應用程式專用密碼只能登入一個地方,如果把這組密碼先拿來當smtp寄信,又再拿去登入其他東西,後來那個是無法登入的。