python傳送郵件

2022-09-11 23:45:44 字數 4154 閱讀 7421

一、郵件傳送過程解析

1.傳送方郵件客戶端將文字格式郵件或非文字格式郵件(需要通過mime格式轉換)通過smtp協議傳送到接收方郵件伺服器。

2.傳送方郵件伺服器通過smtp協議與接收方郵件伺服器通訊。

pop3協議特點是離線處理,對郵件的操作不會同步到郵件伺服器上。

imap協議特定時對郵件的操作會同步到郵件伺服器上。應用於郵件系統的多客戶端訪問,當乙個客戶端對郵件有操作時,其他客戶端上郵件狀態會同步更新。

二、python傳送郵件過程解析

1.授權碼是用於登入第三方郵件客戶端的專用密碼。

進入郵箱-設定-客戶端授權碼。

2.python傳送郵件

import smtplib

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("郵件傳送失敗")

3.python傳送帶附件的郵件程式

import smtplib,os

from 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...