2020年12月26日 星期六

Google 密碼更改後須為應用程式重新申請密碼問題 (以利用 Gmail SMTP 寄信為例)

很久沒有遠端登入鄉下的樹莓派 Pi 3 了, 前幾天想更新裡面的 Python 套件版本, 這時才發現從上周四起就沒有收到樹莓派整點送出的 IP 通知信, 原以為是 Pi 3 當機, 打電話請爸幫我重開機還是一樣沒收到信. 昨晚用 VNC Connect 連線回鄉下的 Pi 沒問題, 可見應該是送信程式出問題. 

今天回到鄉下檢查 Pi 3, 執行 reportip3.py 發現問題出在登入 Gmail SMTP 伺服器失敗 : 

pi@raspberrypi:~ $ python3 reportip3.py   
current ip: 1.173.51.69 192.168.2.192
Traceback (most recent call last):
  File "reportip3.py", line 49, in <module>
    smtp.login("yhhuang1966@gmail.com", "yguxhsurqwpseksw")
  File "/usr/lib/python3.5/smtplib.py", line 729, in login
    raise last_exception
  File "/usr/lib/python3.5/smtplib.py", line 720, in login
    initial_response_ok=initial_response_ok)
  File "/usr/lib/python3.5/smtplib.py", line 641, in auth
    raise SMTPAuthenticationError(code, resp)
smtplib.SMTPAuthenticationError: (535, b'5.7.8 Username and Password not accepted. Learn more at\n5.7.8  https://support.google.com/mail/?p=BadCredentials i25sm32526844pgb.33 - gsmtp')

回想上周曾經改了 Google 登入密碼, 似乎是從那之後就沒收到 Pi 3 的信了. 有可能改 Gmail 密碼後原先為了應用程式申請的 SMTP 伺服器登入密碼也隨之失效, 必須重新申請. 但太久沒有用到 Google 兩階段驗證中的這個功能, 在帳戶管理頁面找了好久都不得其門而入, 最後在下面這篇文章找到答案 : 


原來要幫應用程式申請登入密碼的入口在此 : 


操作程序則參考 : 


輸入 Google 帳戶密碼登入後出現如下頁面 : 



  
按 "選取應用程式" 下拉式選單, 點選 "其他 (自訂名稱)" :




輸入可資識別之名稱後按 "產生" 鈕即可 :





黃色框中的字串就是應用程式登入 Google 的密碼, 複製下來貼到 Python 寄信程式 reportip3.py 的 smtp.login() 第二參數即可恢復整點寄信通報 IP 的功能了 : 

pi@raspberrypi:~ $ nano reportip3.py     
pi@raspberrypi:~ $ python3 reportip3.py     
current ip: 1.173.51.89 192.168.2.192   
Send mail successfully!
pi@raspberrypi:~ $

這次學到一個教訓, Google 帳戶登入密碼更改之後, 所有需要登入 Google 的第三方應用程式也必須隨之重新申請登入密碼, 否則可能無法運作. 

關於用 Python 傳送 email 參考 :


沒有留言:

張貼留言