失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python自动发送邮件_Python自动发送邮件

python自动发送邮件_Python自动发送邮件

时间:2019-09-02 10:52:24

相关推荐

python自动发送邮件_Python自动发送邮件

用 Python 自动发送邮件在日常工作中可以避免一些重复性的工作,Python 用来发送邮件会涉及到 smtplib 和 Email 两个模块,smtplib 是用来发送邮件用的,Email 是用来构建邮件内容的,接下来我们看看这两个库的使用方法。

1. smtplib

SMTP 代表简单邮件传输协议,相当于一种计算机之间发邮件的约定。第一个参数 host 是获取到的服务器地址,第二个参数 port 是 SMTP 端口号。下面常用的三个邮箱,可以按照自己的需要填入。腾讯企业邮箱 SMTP 服务器:smtp.,端口是 465,腾讯邮箱支持 SSL(不强制), 不支持 TLS;

QQ 邮箱 smtp 服务器地址:,端口号:456;

163 邮箱 smtp 服务器地址:,端口号:25。importsmtplib

#连接服务器

server=smtplib.SMTP_SSL("smtp.",465)

#登录服务器,括号中对应的是发件人邮箱账号、邮箱密码

server.login(from_addr,password)

#发送邮件,括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件,as_string()是将发送的信息msg变为字符串类型。

server.sendmail(from_addr,to_addrs,msg.as_string())

#退出服务器,结束SMTP会话

server.quit()

2. Email

Email 模块是用来写邮件内容的模块。这个内容可以是纯文本、HTML 内容、图片、附件等多种形式。fromemail.mime.textimportMIMEText#内容形式为纯文本

fromemail.mime.imageimportMIMEImage#内容形式为图片

fromemail.mime.multipartimportMIMEMultipart#多形式组合,可包含文本和附件

构建纯文本

构建纯文本时包含使用 MIMEText(msg,type,chartset)方法需要输入三个参数:文本内容(自定义),文本类型(默认为 plain)和文本编码(中文为"utf-8")。msg['From']=Header(from_addr)

msg['To']=Header(",".join(to_addrs))

msg['Cc']=Header(cc_addrs)

msg['Subject']=Header('邮件主题')

#邮箱正文内容,第一个参数为内容,第二个参数为格式(plain为纯文本),第三个参数为编码

content="正文内容"

msg.attach(MIMEText(content,'plain','utf-8'))

构建附件

构建附件是需要使用 MIMEMultipart()方法,MIME 邮件中各种不同类型的内容是分段存储的,各个段的排列方式、位置信息都通过 Content-Type 域的 multipart 类型来定义。multipart 类型主要有三种子类型:mixed、alternative、related。msg=MIMEMultipart()#MIMEMultipart类可放至任何内容

file_path="/Users/date.xlsx"#文件路径

att1=MIMEText(open(file_path,'rb').read(),'base64','utf-8')

#没有这三行会出现文件结尾变成bin,filename可任意取名

att1.add_header('Content-Disposition','attachment',filename="shuju.xlsx")

att1.add_header('Content-ID','<0>')

att1.add_header('X-Attachment-Id','0')

msg.attach(att1)

3. 定时邮件 schedule

在这里选用 schedule 解决定时功能#引入schedule和time

importschedule

importtime

#定义一个叫job的函数,函数的功能是打印'I'mworking...'

defjob():

print("I'mworking...")

#部署每10分钟执行一次job()函数的任务

schedule.every(10).minutes.do(job)

#部署每×小时执行一次job()函数的任务

schedule.every().hour.do(job)

#部署在每天的10:30执行job()函数的任务

schedule.every().day.at("10:30").do(job)

#部署每个星期一执行job()函数的任务

schedule.every().monday.do(job)

#部署每周三的13:15执行函数的任务

schedule.every().wednesday.at("13:15").do(job)

whileTrue:

schedule.run_pending()

time.sleep(1)

4. 封装函数importsmtplib

fromemail.mime.textimportMIMEText

fromemail.mime.multipartimportMIMEMultipart

fromemail.headerimportHeader

importschedule

importtime

importtraceback

defsendmail():

try:

#用于构建邮件头

#发信方的信息:

from_addr='发件人邮箱'

password='发件人邮箱密码'

to_addrs=['收件人邮箱1','收件人邮箱2']

cc_addrs='抄送人邮箱'

#发信服务器

#SMTP服务器,腾讯企业邮箱端口是465,腾讯邮箱支持SSL(不强制),不支持TLS

# qq邮箱smtp服务器地址:,端口号:456

# 163邮箱smtp服务器地址:,端口号:25

smtp_server="smtp."

#设置邮件内容,MIMEMultipart类可放至任何内容

#邮件头信息

msg=MIMEMultipart()

msg['From']=Header(from_addr)

msg['To']=Header(",".join(to_addrs))

msg['Cc']=Header(cc_addrs)

msg['Subject']=Header('邮件主题')

#邮箱正文内容,第一个参数为内容,第二个参数为格式(plain为纯文本),第三个参数为编码

content="正文内容"

msg.attach(MIMEText(content,'plain','utf-8'))

#邮件附件内容

file_path1="/Users/date.xlsx"

att1=MIMEText(open(file_path1,'rb').read(),'base64','utf-8')

att1.add_header('Content-Disposition','attachment',filename="shuju.xlsx")#没有这三行会出现文件结尾变成bin现象

att1.add_header('Content-ID','<0>')

att1.add_header('X-Attachment-Id','0')

msg.attach(att1)

#开启发信服务,这里使用的是加密传输

server=smtplib.SMTP_SSL("smtp.",465)

#登录发信邮箱

server.login(from_addr,password)

#发送邮件

server.sendmail(from_addr,to_addrs,msg.as_string())

#关闭服务器

server.quit()

#server.sendmail(from_addr,to_addrs,msg.as_string())

print('恭喜,发送成功')

exceptsmtplib.SMTPExceptionase:

print('发送失败,请重试')

defjob():

print('开始一次任务')

sendmail()

print('任务完成')

schedule.every().day.at("09:30").do(job)

whileTrue:

schedule.run_pending()

time.sleep(1)

if__name__=='__main__':

job()

如果觉得《python自动发送邮件_Python自动发送邮件》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。