【課程問題】Day32 - 寄發生日郵件,如果想寄發的信是中文的,該如何處理?

請問各位先進,Day32中,老師教我們固定寄發英文生日信件,如果我想把它轉換成中文信件,卻出現圖中的錯誤,請問這問題有解嗎?

1 Like

傳送 message 時,後面加 .encode('utf-8') 即可。

範例如下,兩個 sendmail 中,上方是英文、下方支援中文:

connection = smtplib.SMTP_SSL("smtp.gmail.com")
connection.login(user=MY_EMAIL, password=MY_PASSWORD)
connection.sendmail(from_addr=MY_EMAIL, to_addrs=MY_EMAIL, msg=f"Subject:subject\n\n{'content'}")
connection.sendmail(from_addr=MY_EMAIL, to_addrs=MY_EMAIL, msg=f"Subject:標題測試\n\n{'內文測試'}".encode('utf-8'))
connection.close()

使用 SSL 的 code,是參考 @rabrus 兄的這篇:


:secret: 補充:找答案的方法 :secret:

我用 google 搜尋的關鍵字:前面是出問題的函式 sendmail,後面接錯誤訊息。

sendmail UnicodeEncodeError: ‘ascii’ codec can’t encode characters

請參考下圖的 google 結果畫面,用橘框圈起來的部分,因為標題接近我想找的,所以我就先選這個。

下方圖為點擊後出現的畫面,其中藍框裡的連結,就是答案,我連結放在下方。

上圖中的答案連結如下:

上方連結在解釋完原因,說明解決方式後,提出他認為更好的解決方案。但這不在我們這次的討論範圍中。請參考,謝謝!

email.message: Representing an email message — Python documentation

2 Likes

非常感謝~~~ 終於解決我的困擾了,太感動了!!!

其實我有google 去找答案,但我在本機執行有兩種錯誤,所以一直解決不了,Sky大解決了我UnicodeEncodeError: ‘ascii’ codec的問題,pythonAnywhere可以執行了,但我本機出現另一個UnicodeDecodeError: ‘cp950’ codec 的問題,後來上網查了一下,發現也是類似的方式,只是把encode(‘utf-8’)加在開檔案的地方OK了,不知道有沒有其他人有同樣的問題,所以我也把我自己的筆記分享上來,供大家參考。