簡介
Python發送郵件的教程本人在網站搜索的時候搜索出來了一大堆,但是都是說了一大堆原理然後就推出了實現代碼,我測試用給出的代碼進行發送郵件時都不成功,後面找了很久才找到原因,這都是沒有一個詳細的環境調試導致,所以今天特出一個詳細的教程,一步一步從環境調試到代碼實現整一個教程,希望對還在苦苦尋找解決方法卻遲遲不能得到有效解決的人員一點幫助。
SMTP協定
首先了解SMTP(簡單郵件傳輸協定),郵件傳送代理程式使用SMTP協定來傳送電子郵件到接收者的郵件伺服器。 SMTP協定只能用來傳送郵件,不能用來接收郵件,而大多數的郵件傳送伺服器都是使用SMTP協定。 SMTP協定的預設TCP連接埠號碼是25。
環境調試
上面說了是使用SMTP協議發送的郵件,所以需要先查看您的發件人郵箱是否有開啟SMTP協議,如沒有需要開啟,我測試使用的是163.com的郵箱作為寄信人信箱,開啟SMTP協定如下圖所示。
1.先登錄到163.com郵箱中(網易郵箱),如下圖
2.看到郵箱上面的功能欄中有一個“點選該選項,然後選擇下拉式選單的「POP3/SMTP/IMAP」
3.如下圖所示,上面紅框的兩個必須勾選上,如沒有勾選,要選擇開啟就可以勾選上了,然後可以看到下面紅框裡是:SMTP伺服器:smtp.163.com
#coding:utf-8 #强制使用utf-8编码格式 import smtplib #加载smtplib模块 from email.mime.text import MIMEText from email.utils import formataddr my_sender='发件人邮箱账号' #发件人邮箱账号,为了后面易于维护,所以写成了变量 my_user='收件人邮箱账号' #收件人邮箱账号,为了后面易于维护,所以写成了变量 def mail(): ret=True try: msg=MIMEText('填写邮件内容','plain','utf-8') msg['From']=formataddr(["发件人邮箱昵称",my_sender]) #括号里的对应发件人邮箱昵称、发件人邮箱账号 msg['To']=formataddr(["收件人邮箱昵称",my_user]) #括号里的对应收件人邮箱昵称、收件人邮箱账号 msg['Subject']="主题" #邮件的主题,也可以说是标题 server=smtplib.SMTP("smtp.xxx.com",25) #发件人邮箱中的SMTP服务器,端口是25 server.login(my_sender,"发件人邮箱密码") #括号中对应的是发件人邮箱账号、邮箱密码 server.sendmail(my_sender,[my_user,],msg.as_string()) #括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件 server.quit() #这句是关闭连接的意思 except Exception: #如果try中的语句没有执行,则会执行下面的ret=False ret=False return ret ret=mail() if ret: print("ok") #如果发送成功则会返回ok,稍等20秒左右就可以收到邮件 else: print("filed") #如果发送失败则会返回filed
得愛瞎折騰,玩著把程式碼玩壞了,所以這裡附上幾個知識點以解你之疑惑。
1.看到上面程式碼第一行的「#coding:utf-8」沒有,相信很多看這程式碼的人都不太注意這一行,反正這和程式碼實現又沒啥關係,保存時選擇utf -8格式就行了嘛;告訴你們哦這一行代碼在python中非常重要,最好寫每一頁都要加上強製字符編碼,因為python2版本它默認識別ASCII編碼,所以當中文字符出現在python中它是不認的,出現的錯誤提示如下圖所示:
範例:File"F:/python/s12/pymail.py",line2
範例:File"F:/python/s12/pymail.py",line2範例SynSactorr. 'xe5'infileF:/python/s12/pymail.pyonline2,butnoencodingdeclared;see//m.sbmmt.com/所以當出現上面的編碼錯誤提示時,可以在頁面的第一行加上
#coding:utf-8
#強制編碼為utf-8或#coding:GBK
#強制編碼為GBK以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援PHP中文網。更多Python實作SMTP發送郵件詳細教學相關文章請關注PHP中文網!