python之如何發送郵件

今天來講一下python如何發送郵件,以163和qq郵箱爲例。

要想實現使用python代碼發送郵件,郵箱必須開啓POP3/SMTP協議,開啓之後郵箱會給你生成一個授權碼

注意:這個授權碼一定要記住,以後使用代碼實現發送郵件登陸的時候,使用的都是這個授權碼

qq郵箱的POP3/SMTP協議開啓在 設置>>賬戶 中

163郵箱的POP3/SMTP協議開啓方式

與qq不同的是,163郵箱開啓之後需要自己設置客戶端授權密碼

POP3/SMTP協議開啓之後開始使用python代碼實現發送郵件

第一步:引入模塊

# smtp  simple mail tranfer protocol 簡單郵件傳輸協議
# lib library
import smtplib
import email
# MIME 多用於郵件擴充協議
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart

第二步:設置發件信息

注意:如果發送郵件用的是qq郵箱,郵件的域名應改爲qq.com

# 設置郵件的域名
HOST = 'smtp.163.com'
# 設置發件人郵箱 發件人郵箱必須設置開始smtp協議
# 設置郵件發件人
message['From'] = '發件人郵箱'
# 設置郵件收件人
message['To'] = '收件人郵箱'
# 設置郵件標題
message['Subject'] = '這個是標題'

第三步:添加郵件內容,主題,內容,附件等

related 表示使用內嵌資源的形式將郵件發送給對方

message = MIMEMultipart('related')

發送純文本

# 參數
# 1.發送的內容 內容必須是字符串
# 2.內容的類型 文本類型默認爲plain
# 3.內容的編碼方式 使用utf-8進行編碼
message_text = MIMEText('今天是星期六,好開心','plain','utf-8')
# 將郵件內容裝入到郵件信息中去
message.attach(message_text)

 

# rb 讀取二進制文件
image_data = open('圖片名字加後綴','rb')
# 設置讀取獲取的二進制數據
message_image= MIMEImage(image_data.read())
image_data.close()
# 添加圖片文件到郵件信息當中去
message.attach(message_image)
# ------------------發送圖片的第二種方法
message_image = MIMEText(open('圖片名字加後綴','rb').read(),'base64','utf-8')
message_image['Content-disposition'] = 'attachment;filename="新名字"'
message.attach(message_image)

發送文件

message_xlsx = MIMEText(open('要發送的文件名.xlsx','rb').read(),'base64','utf-8')
# 設置文件在附件當中的名字
message_xlsx['Content-Disposition'] = 'attachment;filename="test1.xlsx"'
message.attach(message_xlsx)

將一個xlsx文檔作爲內容發送到對方的郵箱讀取excle文件時,是以rb形式進行讀取的,是一個以二進制內容,對二進制文件需要設置默認的編碼形式,對於MIMEText()來說 默認的編碼形式就是base64,如果對於二進制文件來說 沒有設置base64進行編碼,則附件的就會呈現亂碼

第三步:登錄郵箱發送郵件

注意!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
密碼千萬不要寫郵箱的密碼,要寫郵箱的授權碼

# 獲取簡單郵件傳輸協議的證書
email_client = smtplib.SMTP_SSL()
# 設置發件人郵箱的域名和端口 端口爲465
email_client.connect(HOST,'465')
result = email_client.login(message['From'],'授權碼')
# 發送郵件
email_client.sendmail(from_addr=message['From'],to_addrs=message['To'],msg=message.as_string())
# 關閉郵件發送客戶端
email_client.close()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章