學習Python 發郵件過程中遇到了異常情況,今天做一次復盤: 1.ValueError: server_hostname cannot be an empty string or start with a leading dot.錯誤提示說serverhost 不能是空。了解了一下,Python版本3.7要填入host參數,原因是版本3.7修改了ssl.py,導致smtplib.SMTP_SSL也有問題。解決辦法指定服務器函數 填入host server = smtplib.SMTP_SSL(smtp_server) 或者將代碼優化成,省略第43行,如下 ![]() 2.收件箱圖片格式顯示異常(附件顯示tcmime.1466.1547. ... .bin)在群發郵件時發現收件箱為QQ郵箱的收件附件顯示異常(按照官網示例的代碼運行,如下), ![]() 當然不止有這一種方法,在以后學習過程慢慢探索吧!加油! 3.又又又有亂碼(收件人昵稱亂碼,看圖)這個各種方法都試過了,('utf-8'編碼,多次編碼解碼)就是沒有效果呢。路過大神多指點。 4.讀取文件異常,第一行元素出現\ufeff,導致文件讀取異常,后邊部分運行失敗這種解決辦法就是,第12行改為: with open('chengji.txt','r',encoding='utf-8-sig') as fp: 首行出現的"\ufeff "叫BOM(Byteorder Mark),用來聲明文件的編碼信息?!畊tf-8’是以字節編碼為單元,字節順序在所有系統中都是一樣的。沒有字節序問題,因此不需要BOM(字節序簽)。當用'utf-8'來讀帶有BOM的文件時,它會把BOM當做文件內容來處理,就會出現類似上述的錯誤。'utf-8-sig' sig(signature)帶簽名的‘utf-8’。當用'utf-8-sig'來讀帶有BOM的文件時,它會把BOM單獨處理,與文本內容隔離開,也就是我們所需要的結果。 |
|