日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中带附件发送电子邮件_python发送带附件邮件

發布時間:2023/12/2 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中带附件发送电子邮件_python发送带附件邮件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python SMTP發送郵件

SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協議,它是一組用于由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。

python的smtplib提供了一種很方便的途徑發送電子郵件。它對smtp協議進行了簡單的封裝。

Python創建 SMTP 對象語法如下:

import smtplib

smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )

參數說明:

host: SMTP 服務器主機。 你可以指定主機的ip地址或者域名,這個是可選參數。

port: 如果你提供了 host 參數, 你需要指定 SMTP 服務使用的端口號,一般情況下 SMTP 端口號為25。

local_hostname: 如果 SMTP 在你的本機上,你只需要指定服務器地址為 localhost 即可。

Python SMTP 對象使用 sendmail 方法發送郵件,語法如下:

SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]

參數說明:

from_addr: 郵件發送者地址。

to_addrs: 字符串列表,郵件發送地址。

msg: 發送消息

開發中我們要發送郵件需要帶附件:

可采用email模塊發送電子郵件附件。發送一個未知MIME類型的文件附件其基本思路如下:

構造MIMEMultipart對象做為根容器

構造MIMEText對象做為郵件顯示內容并附加到根容器

構造MIMEBase對象做為文件附件內容并附加到根容器

a. 讀入文件內容并格式化

b. 設置附件頭

設置根容器屬性

得到格式化后的完整文本

用smtp發送郵件

實例代碼:

def send_report_email(self,file_path,emails):

‘’’’’

@subject:郵件主題

@msg:郵件內容

@toaddrs:收信人的郵箱地址

@fromaddr:發信人的郵箱地址

@smtpaddr:smtp服務地址,可以在郵箱看,比如163郵箱為smtp.163.com

@password:發信人的郵箱密碼

‘’’

fromaddr = config.get('fromaddr',"")

smtpaddr = config.get('smtpaddr',"")

password = config.get('password',"")

# toaddrs = ["Dong_Jie@want-want.com"]

toaddrs = emails

subject = "售貨機結算表"

msg = "本周期售貨機結算表"

mail_msg = MIMEMultipart()

if not isinstance(subject, unicode):

subject = unicode(subject, 'utf-8')

mail_msg['Subject'] = subject

mail_msg['From'] = fromaddr

mail_msg['To'] = ','.join(toaddrs)

mail_msg.attach(MIMEText(msg, 'html', 'utf-8')) # 構造MIMEBase對象做為文件附件內容并附加到根容器

data = open(file_path, 'rb') ## 讀入文件內容并格式化 [方式1]

ctype,encoding = mimetypes.guess_type(file_path)

if ctype is None or encoding is not None:

ctype = 'application/octet-stream'

maintype,subtype = ctype.split('/',1)

file_msg = email.MIMEBase.MIMEBase(maintype, subtype)

file_msg.set_payload(data.read())

Encoders.encode_base64(file_msg)#把附件編碼

data.close()

basename = os.path.basename(file_path)

file_msg.add_header('Content-Disposition','attachment', filename = basename)#修改郵件頭

mail_msg.attach(file_msg)

try:

s = smtplib.SMTP()

s.connect(smtpaddr) # 連接smtp服務器

s.ehlo()

s.starttls()

s.ehlo

s.login(fromaddr, password) # 登錄郵箱

s.sendmail(fromaddr, toaddrs, mail_msg.as_string()) # 發送郵件

s.quit()

_logger.info("郵件發送成功")

except Exception, e:

print "Error: unable to send email"

_logger.info("郵件發送失敗")

其中需要發送的附件需要進行壓縮成zip格式,代碼如下:

def zip_dir(dirname, zipfilename):

filelist = []

if os.path.isfile(dirname):

filelist.append(dirname)

else:

for root, dirs, files in os.walk(dirname):

for name in files:

filelist.append(os.path.join(root, name))

zf = zipfile.ZipFile(zipfilename, "w", zipfile.zlib.DEFLATED)

for tar in filelist:

arcname = tar[len(dirname):]

arcname = arcname.encode('GBK') #兼容windows平臺,轉為gbk,支持簡體和繁體

zf.write(tar, arcname)

zf.close()

還需要配置我們自己的郵件發送服務器和發送郵箱,需要配置在odoo.conf中:

fromaddr = svmaccount@want-want.com

smtpaddr = 10.0.1.239

password = P@ssw0rd

最后手動執行任務測試郵件發送且帶有zip附件,郵件發送成功。

總結

以上是生活随笔為你收集整理的python中带附件发送电子邮件_python发送带附件邮件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。