import smtplib from email.mime.text import MIMEText from email.mime.application import MIMEApplication from email.mime.multipart import MIMEMultipart
方式一:不使用ssl加密python
smtp = smtplib.SMTP(host="smtp.163.com", port=465)
方式二:使用ssl加密服務器
smtp = smtplib.SMTP_SSL(host="smtp.163.com", port=465)
*注意:傳host參數時,若是是QQ郵箱就改爲'smtp.qq.com'app
smtp.login(user="發件人地址", password="受權碼")
一、準備內容測試
f_user = "發件人地址" t_user = "收件人地址" content = "郵件的正文" subject = "郵件的主題"
二、使用email構造郵件加密
msg = MIMEText(content, _subtype='plain', _charset="utf8") # 添加發件人 msg["From"] = f_user # 添加收件人 msg["To"] = t_user # 添加郵件主題 msg["subject"] = subject
一、準備內容code
f_user = "發件人地址" t_user = "收件人地址" content = "郵件的正文" subject = "郵件的主題" # 讀取要發送附件的內容 file_content = open("附件文件名", "rb").read()
二、使用email構造郵件ip
(1)構造一封多組件的郵件ssl
msg = MIMEMultipart()
(2)往多組件郵件中加入文本內容it
text_msg = MIMEText(content, _subtype='plain', _charset="utf8") msg.attach(text_msg)
(3)往多組件郵件中加入文件附件io
file_msg = MIMEApplication(file_content) file_msg.add_header('content-disposition', 'attachment', filename='發送附件的名稱(可自定義)') msg.attach(file_msg)
三、添加發件人、收件人、郵件主題
# 添加發件人 msg["From"] = f_user # 添加收件人 msg["To"] = t_user # 添加郵件主題 msg["subject"] = subject
smtp.send_message(msg, from_addr=f_user, to_addrs=t_user)
像這樣上面這樣寫發送郵件,寫一次還好,若是說一個項目中多個地方都須要用發送郵件,那就顯得笨重了,因此呢,這個時候就須要給上面內容作一個封裝,供項目中全部用到發送郵件的地方均可以直接調用.
[email] # smtp服務地址 host = smtp.163.com # 端口 port = 465 # 發件人 user = 163郵箱 # 受權碼 pwd = 受權碼 # 收件人 to_user = 收件人郵箱 # 郵件正文 content = 正文 # 郵件主題 subject = 主題
send_text:發送文本郵件
如下代碼帶[]的都是要從配置文件中獲取的
class SendEMail(object): """封裝發送郵件類""" def __init__(self): # 第一步:鏈接到smtp服務器 self.smtp_s = smtplib.SMTP_SSL(host=[host], port=[port]) # 第二步:登錄smtp服務器 self.smtp_s.login(user=[user], password=[pwd]) def send_text(self, to_user, content, subject): """ 發送文本郵件 :param to_user: 對方郵箱 :param content: 郵件正文 :param subject: 郵件主題 :return: """ # 第三步:準備郵件 # 使用email構造郵件 msg = MIMEText(content, _subtype='plain', _charset="utf8") # 添加發件人 msg["From"] = [user] # 添加收件人 msg["To"] = to_user # 添加郵件主題 msg["subject"] = subject # 第四步:發送郵件 self.smtp_s.send_message(msg, from_addr=[user], to_addrs=to_user) def send_file(self, to_user, content, subject, reports_path, file_name): """ 發送測試報告郵件 :param to_user: 對方郵箱 :param content: 郵件正文 :param subject: 郵件主題 :param reports_path: 測試報告路徑 :param file_name: 發送時測試報告名稱 """ # 讀取報告文件中的內容 file_content = open(reports_path, "rb").read() # 2.使用email構造郵件 # (1)構造一封多組件的郵件 msg = MIMEMultipart() # (2)往多組件郵件中加入文本內容 text_msg = MIMEText(content, _subtype='plain', _charset="utf8") msg.attach(text_msg) # (3)往多組件郵件中加入文件附件 file_msg = MIMEApplication(file_content) file_msg.add_header('content-disposition', 'attachment', filename=file_name) msg.attach(file_msg) # 添加發件人 msg["From"] = [user] # 添加收件人 msg["To"] = to_user # 添加郵件主題 msg["subject"] = subject # 第四步:發送郵件 self.smtp_s.send_message(msg, from_addr=[user], to_addrs=to_user)