当前位置:首页 » 编程语言 » python邮件附件

python邮件附件

发布时间: 2022-11-27 23:46:37

A. 如何使用python发送带附件的邮件

importsmtplib
fromos.pathimportbasename
fromemail.mime.
fromemail.mime.multipartimportMIMEMultipart
fromemail.mime.textimportMIMEText
fromemail.utilsimportCOMMASPACE,formatdate


defsend_mail(send_from,send_to,subject,text,files=None,
server="127.0.0.1"):
assertisinstance(send_to,list)

msg=MIMEMultipart(
From=send_from,
To=COMMASPACE.join(send_to),
Date=formatdate(localtime=True),
Subject=subject
)
msg.attach(MIMEText(text))

forfinfilesor[]:
withopen(f,"rb")asfil:
msg.attach(MIMEApplication(
fil.read(),
Content_Disposition='attachment;filename="%s"'%basename(f)
))

smtp=smtplib.SMTP(server)
smtp.sendmail(send_from,send_to,msg.as_string())
smtp.close()

B. 如何使用Python发送带附件的邮件

直接用python自带的邮件发送LIB就可以。不过发送中文邮件时标题需要单独编码。另外有些邮箱的MIME格式也有些特殊,需要自己写message的格式。不过都不难,试验一下,找几个例子就可以。

C. python电子邮件系列(三)之POP接收邮件

由上篇文章我们已经得知邮件从发送到接收的过程:

发件人->MUA->MTA->若干MTA->MDA->MUA->收件人

本节接收邮件主要就是编写一个 MUA 客户端,从 MDA 将邮件取回本地。

收取邮件最常用的是 POP协议 ,目前版本是第三版,也称 POP3 。python内置了 poplib 模块,支持POP3协议。

回想上一节 SMTP ,我们对要发送的邮件内容进行了各种编码,包括添加MIME header,编码之后再进行发送。

因此,我们通过POP3协议接收的也不是原内容,而是经过一系列编码等处理的文本。

所以,要想把POP3收取的文本变为可阅读的邮件对象,就需要利用 email 模块对原始邮件进行解析。

所以,邮件收取的流程就是:

由上一篇 文章 最后总结部分可知。邮件由字符到发送到网络经历了如下的格式转化:

纯文本:

str->bytes->base64->str->bytes

二进制文件:

binary code->base64->str->bytes

我们解析邮件也是按这个思路,逆序解析出内容。

这里的 decode('utf-8') 先把字节流转化为字符串,再将字符串转化为 message 结构的对象。这步与发送邮件的 as_string 函数相反。

先从上一节结构化的 msg 中取出信件头,打印出来。

如果是 multipart 结构, get_payload 函数会返回一个包含不同part的list,然后对每一part递归调用 print_info ,打印子信件头和子信件内容。

不是 multipart 时,之后再依据 Content-Type 作不同处理:

如果是 text :

利用 get_payload(decode = Ture) 取出子信件的内容, decode 为True,则按照 Content-Transfer-Type 将 base64 或 QP 解码为 bytes 。

再 guess_charset 猜出编码方式,之后将其解码为字符显示。

如果不是 Text 对象,则为附件:

打印出附件的 Content-Type 。

D. python,如何发送带附件的邮件

可以通过以下代码实现:

importsmtplib
fromemail.mime.textimportMIMEText
importemail.mime.multipart
fromemail.
fromemail.MIMEBaseimportMIMEBase
fromemailimportEncoders

defsend_mail():
mailto_list=['xxxx','xxx']#收件人
mail_host="xxxxx"#设置服务器
mail_user="xxxx"#用户名
mail_pass="xxxxxx"#口令
mail_postfix="xxxx.xxx"#发件箱的后缀
me="hello"+"<"+mail_user+"@"+mail_postfix+">"#这里的hello可以任意设置,收到信后,将按照设置显示
content='Thisistestmail!'#邮件正文
msg=MIMEMultipart()
body=MIMEText(content,_subtype='html',_charset='gb2312')#创建一个实例,这里设置为html格式邮件
msg.attach(body)
msg['Subject']="SubjectTest"#设置主题
msg['From']=me
msg['To']=";".join(mailto_list)
#附件内容,若有多个附件,就添加多个part,如part1,part2,part3
part=MIMEBase('application','octet-stream')
#读入文件内容并格式化,此处文件为当前目录下,也可指定目录例如:open(r'/tmp/123.txt','rb')
part.set_payload(open('test.txt','rb').read())
Encoders.encode_base64(part)
##设置附件头
part.add_header('Content-Disposition','attachment;filename="test.txt"')
msg.attach(part)

try:
s=smtplib.SMTP()
s.connect(mail_host)#连接smtp服务器
s.login(mail_user,mail_pass)#登陆服务器
s.sendmail(me,mailto_list,msg.as_string())#发送邮件
s.close()
print'sendmailsucess'
returnTrue
exceptException,e:
printstr(e)
returnFalse

E. 基于Python的数据导出和邮件发送

由于运维工作需要,经常需要将一些数据从数据库中导出,发送给运营和需求部门,天天去手动查询,又有点太费时间了,于是研究学习了Python的基本功能,通过Python脚本和Linux 的crontab命令实现了每天自动化的数据查询和邮件发送。

定义了以下几个代码模块实现了配置文件读取、日志记录、数据库连接访问查询、导出到xlsx和带附件的邮件发送功能。
1、demo.py 示例文件
2、config.yml 配置文件
3、common_log.py 实现日志记录
4、common_db.py 实现数据库连接和访问
5、common_xlsx.py 实现数据表格的处理
6、common_email.py 实现带附件的邮件发送

F. Python向多人发送、抄送带附件的邮件(含详细代码)

python要发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后使用smtplib.smtp发送。

步骤:

(1)设置服务器所需信息(ps:部门邮箱密码为授权码,需自行登录相应邮箱设置授权码)

(2)设置email信息

(3)附件部分

(4)登录邮箱并发送邮件

附上源码

G. 如何使用python发送包含正文和附件的邮件

fromemail.HeaderimportHeader
fromemail.MIMETextimportMIMEText
fromemail.
importsmtplib,datetime

#创建一个带附件的实例
msg=MIMEMultipart()

#构造附件
att=MIMEText(open('d:\tc201.rar','rb').read(),'base64','gb2312')
att["Content-Type"]='application/octet-stream'
att["Content-Disposition"]='attachment;filename="tc201.rar"'
msg.attach(att)

#加邮件头
msg['to']='[email protected]'
msg['from']='[email protected]'
msg['subject']=Header('冒烟测试结果('+str(datetime.date.today())+')',
'gb2312')
#发送邮件
server=smtplib.SMTP('smtp.xxx.com')
server.sendmail(msg['from'],msg['to'],
msg.as_string())
server.close

H. python中如何实现发送邮件及附件功能的具体详解

思路如下:
1. 构造MIMEMultipart对象做为根容器
2. 构造MIMEText对象做为邮件显示内容并附加到根容器
3. 构造MIMEBase对象做为文件附件内容并附加到根容器
a. 读入文件内容并格式化
b. 设置附件头
4. 设置根容器属性
5. 得到格式化后的完整文本
6. 用smtp发送邮件

I. 用Python发送邮件,可以群发,带有多个附件

'''''
函数说明:Send_email_text()函数实现发送带有附件的邮件,可以群发,附件格式包括:xlsx,pdf,txt,jpg,mp3等
参数说明:
1.subject:邮件主题
2.content:邮件正文
3.filepath:附件的地址,输入格式为["","",...]
4.receive_email:收件人地址,输入格式为["","",...]
'''
defSend_email_text(subject,content,filepath,receive_email):
importsmtplib
fromemail.mime.multipartimportMIMEMultipart
fromemail.mime.textimportMIMEText
fromemail.mime.
sender="发送方邮箱"
passwd="填入发送方密码"
receivers=receive_email#收件人邮箱

msgRoot=MIMEMultipart()
msgRoot['Subject']=subject
msgRoot['From']=sender

iflen(receivers)>1:
msgRoot['To']=','.join(receivers)#群发邮件
else:
msgRoot['To']=receivers[0]

part=MIMEText(content)
msgRoot.attach(part)

##添加附件部分
forpathinfilepath:
if".jpg"inpath:
#jpg类型附件
jpg_name=path.split("\")[-1]
part=MIMEApplication(open(path,'rb').read())
part.add_header('Content-Disposition','attachment',filename=jpg_name)
msgRoot.attach(part)

if".pdf"inpath:
#pdf类型附件
pdf_name=path.split("\")[-1]
part=MIMEApplication(open(path,'rb').read())
part.add_header('Content-Disposition','attachment',filename=pdf_name)
msgRoot.attach(part)

if".xlsx"inpath:
#xlsx类型附件
xlsx_name=path.split("\")[-1]
part=MIMEApplication(open(path,'rb').read())
part.add_header('Content-Disposition','attachment',filename=xlsx_name)
msgRoot.attach(part)

if".txt"inpath:
#txt类型附件
txt_name=path.split("\")[-1]
part=MIMEApplication(open(path,'rb').read())
part.add_header('Content-Disposition','attachment',filename=txt_name)
msgRoot.attach(part)

if".mp3"inpath:
#mp3类型附件
mp3_name=path.split("\")[-1]
part=MIMEApplication(open(path,'rb').read())
part.add_header('Content-Disposition','attachment',filename=mp3_name)
msgRoot.attach(part)

try:
s=smtplib.SMTP()
s.connect("smtp.mail.aliyun.com")#这里我使用的是阿里云邮箱,也可以使用163邮箱:smtp.163.com
s.login(sender,passwd)
s.sendmail(sender,receivers,msgRoot.as_string())
print("邮件发送成功")
exceptsmtplib.SMTPExceptionase:
print("Error,发送失败")
finally:
s.quit()

J. python批量发送邮件--包括批量不同附件

小猪在公司做出纳,干的活却包括了出纳、会计、结算专员等工作,周末都要被无奈在家加班,主要还没有加班费,简直是被公司严重压榨。每个月初都要给每个工长发预付款账单邮件,月中发结算款账单。重复性机械工作。
一个及格线上的程序员,最起码的觉悟就是将重复性的机械工作自动化,于是,在我花了一个多小时,帮她给一部分工长发了一次邮箱后,默默的回来写了这个脚本。
所以,设计要点就是一个字——
恩,就酱。

经过我观察,邮件内容分为两种,这里先说第一种,“结算款”:
(1) 邮件内容(content)不变,为固定的txt文本
(2) 附件(attch)为每个工长的结算账单(excel文件.xlsx),此文件命名为总账单中自动分割出来的名字(暂时不懂怎么分割出来的=.=),格式为:

(3) 邮件主题(Subject)为附件名(不带后缀名)
(4) 邮件接收对象(工长)的名单及其邮箱地址基本不变,偶尔变动
(5)

(1) 将工长及其邮箱地址存为CSV文件的两列,python中将其读取为字典形式,存储以供后续查询邮箱地址。

(2) 遍历文件夹中的附件(.xlsx类型文件),对其进行两种操作,一方面将其名字(不带路径和后缀)提取出来,作为邮件主题(Subject),并对Subject进一步划分,得到其中的人名(工长);另一方面,将其传入MIMEbase模块中转为邮件附件对象。

(3) 由上述得到的人名(name),在字典形式的通讯录中,查找相应的地址(value),即为收件人名称和地址
(4) 利用python中的email模块和smtp模块,登录自己的邮箱账号,再对每个附件,得到的收件人名和地址,添加附件,发送邮件。done

在设计过程中有几点需要注意
(1) 有时一个邮件地址对应两个人名,此时应该在CSV文件中分为两行存储,而不是将两个人名存为同一个键;
(2)有账单.xlsx文件,通讯录里却没存储此人记录,程序应该打印提示没有通讯记录的人名,且不能直接退出,要保证员工看到此提示,此第一版程序还有解决此问题;
(3)此程序发送的邮件内容为纯文本,若要求邮件内容有不同格式(如部分加粗,部分红色),还有小部分需要每次更改的地方(如邮件内容包含当前月份),如何解决?(这就是第二种邮件内容,“预算款”);
(4)重名的,暂时还没碰到,程序中也没给出解决方案。

第一版到此,20180830,待更新
第二版更新,20180904

第三版更新,20180909

转战CSDN博客,更多博客见传送门《 xiaozhou的博客主页 》

热点内容
sql创建表查询表 发布:2024-05-05 01:00:12 浏览:798
食色抖音上传 发布:2024-05-05 00:55:56 浏览:656
java图片下载 发布:2024-05-05 00:50:45 浏览:597
唱吧如何上传伴奏 发布:2024-05-05 00:49:04 浏览:443
什么配置单反拍视频最好 发布:2024-05-05 00:30:56 浏览:478
sql敏感 发布:2024-05-05 00:28:20 浏览:62
android工程师笔试 发布:2024-05-05 00:10:52 浏览:948
python调试pycharm 发布:2024-05-05 00:10:51 浏览:707
索尼电脑vaio忘了密码如何恢复出厂设置 发布:2024-05-05 00:09:56 浏览:895
安卓系统的用户管理在哪里 发布:2024-05-04 23:12:27 浏览:430