一、郵件傳送過程解析
1.傳送方郵件客戶端將文字格式郵件或非文字格式郵件(需要通過mime格式轉換)通過smtp協議傳送到接收方郵件伺服器。
2.傳送方郵件伺服器通過smtp協議與接收方郵件伺服器通訊。
pop3協議特點是離線處理,對郵件的操作不會同步到郵件伺服器上。
imap協議特定時對郵件的操作會同步到郵件伺服器上。應用於郵件系統的多客戶端訪問,當乙個客戶端對郵件有操作時,其他客戶端上郵件狀態會同步更新。
二、python傳送郵件過程解析
1.授權碼是用於登入第三方郵件客戶端的專用密碼。
進入郵箱-設定-客戶端授權碼。
2.python傳送郵件
import smtplib3.python傳送帶附件的郵件程式from email.mime.text import mimetext
from email.utils import formataddr
my_sender = '[email protected]' # 發件人郵箱賬號
my_pass = '****' # 發件人郵箱密碼
my_user = '[email protected]' # 收件人郵箱賬號
def mail():
ret = true
try:
msg = mimetext('這裡是郵件內容!!!', 'plain', 'utf-8')
msg['from'] = formataddr(["fromrunoob", my_sender]) # 括號裡的對應發件人郵箱暱稱、發件人郵箱賬號
msg['to'] = formataddr(["fk", my_user]) # 括號裡的對應收件人郵箱暱稱、收件人郵箱賬號
msg['subject'] = "python傳送郵件測試" # 郵件的主題,也可以說是標題
#smtp = smtplib.smtp(mailserver,port=25) # 連線郵箱伺服器,smtp的埠號是25
server = smtplib.smtp_ssl("smtp.qq.com", 465) # 發件人郵箱中的smtp伺服器,埠是25
server.login(my_sender, my_pass) # 括號中對應的是發件人郵箱賬號、郵箱密碼
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("郵件傳送成功")
else:
print("郵件傳送失敗")
import smtplib,osfrom email.mime.text import mimetext
from email.mime.multipart import mimemultipart
import base64
class sendmail(object):
def __init__(self,username,passwd,recv,title,content,
file=none,ssl=false,
email_host='smtp.qq.com',port=25,ssl_port=465):
''':param username: 使用者名稱
:param passwd: 密碼
:param recv: 收件人,多個要傳list ['[email protected]','[email protected]]
:param title: 郵件標題
:param content: 郵件正文
:param file: 附件路徑,如果不在當前目錄下,要寫絕對路徑,預設沒有附件
:param ssl: 是否安全鏈結,預設為普通
:param email_host: smtp伺服器位址,預設為163伺服器
:param port: 非安全鏈結埠,預設為25
:param ssl_port: 安全鏈結埠,預設為465
'''self.username = username #使用者名稱
self.passwd = passwd #密碼
self.recv = recv #收件人,多個要傳list ['[email protected]','[email protected]]
self.title = title #郵件標題
self.content = content #郵件正文
self.file = file #附件路徑,如果不在當前目錄下,要寫絕對路徑
self.email_host = email_host #smtp伺服器位址
self.port = port #普通埠
self.ssl = ssl #是否安全鏈結
self.ssl_port = ssl_port #安全鏈結埠
def send_mail(self):
msg = mimemultipart()
#傳送內容的物件
if self.file:#處理附件的
file_name = os.path.split(self.file)[-1]#只取檔名,不取路徑
try:
f = open(self.file, 'rb').read()
except exception as e:
raise exception('附件打不開!!!!')
else:
att = mimetext(f,"base64", "utf-8")
#base64.b64encode(file_name.encode()).decode()
new_file_name='=?utf-8?b?' + base64.b64encode(file_name.encode()).decode() + '?='
#這裡是處理檔名為中文名的,必須這麼寫
att["content-disposition"] = 'attachment; filename="%s"'%(new_file_name)
msg.attach(att)
msg.attach(mimetext(self.content))#郵件正文的內容
msg['subject'] = self.title # 郵件主題
msg['from'] = self.username # 傳送者賬號
msg['to'] = ','.join(self.recv) # 接收者賬號列表
if self.ssl:
self.smtp = smtplib.smtp_ssl(self.email_host,port=self.ssl_port)
else:
self.smtp = smtplib.smtp(self.email_host,port=self.port)
#傳送郵件伺服器的物件
self.smtp.login(self.username,self.passwd)
try:
self.smtp.sendmail(self.username,self.recv,msg.as_string())
pass
except exception as e:
print('出錯了。。',e)
else:
print('傳送成功!')
self.smtp.quit()
if __name__ == '__main__':
m = sendmail(
username='[email protected]',
passwd='*****',
recv=['[email protected]','[email protected]'],
title='傳送郵件20180801',
content='測試傳送郵件',
file=r'e:\\mime type.xlsx',
ssl=true,
)m.send_mail()
html傳送郵件 Python傳送郵件(三十)
簡單郵件傳輸協議 smtp 是一種協議,用於在郵件伺服器之間傳送電子郵件和路由電子郵件。python提供smtplib模組,該模組定義了乙個smtp客戶端會話物件,可用於使用smtp或esmtp偵聽器守護程式向任何網際網路機器傳送郵件。這是乙個簡單的語法,用來建立乙個smtp物件,稍後將演示如何用它...
python 傳送郵件
coding utf 8 import smtplib from email.mime.text import mimetext from email.header import header 檔案形式的郵件 def email file mail host smtp.qq.com 郵箱伺服器 ma...
python 傳送郵件
smtp mail transfer protocol 即簡單郵件傳輸協議,它是一組用於由源位址到目的位址傳送郵件的規則,由它來控制信件的中轉方式。python的smtplib提供了一種很方便的途徑傳送電子郵件。它對smtp協議進行了簡單的封裝。直接貼 coding utf 8 import smt...