600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Python用SMTP自动发送邮件email

Python用SMTP自动发送邮件email

时间:2019-11-13 15:48:10

相关推荐

Python用SMTP自动发送邮件email

发送邮件是一个常见的需求,一般会采用SMTP代理的形式,进行邮件自动发送

在发送邮件时,主要有如下准备工作:

① 发件人、收件人、抄送人

② 发件人邮箱授权码

③ 邮件主题

④ 邮件正文

⑤ 附件

发送邮件上,由浅到深,可以大致分为以下5种格式:

① 只有正文;

②正文+html+超链接;

③正文+正文图片;

④正文+附件;

⑤正文+html+可跳转url+正文图片+附件(这里会规范写一下)

其中,授权码的获取这里需要各自操作一下,示例如:QQ邮箱的授权码,需要在电脑上登录自己的QQ邮箱,在“设置” - “账户” - “POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务”中,开启相关服务,获取授权码

如图所示操作,点击生成授权码,发送短信即可获取到SMTP邮件代理授权码,将发送人邮箱授权码复制下来以便后面SMTP代理使用

接下来用QQ邮箱,示例自动发送以上类型的邮件(注意:带邮件和不带邮件中,实例不一样)

1、发送只有文本正文的邮件

# 发送只有文本正文的邮件import smtplibfrom email.mime.text import MIMEText# 配置邮件信息email = {'from': '111@','to': ['222@'],'cc': ['333@'],'subject': '自动发送邮件','license': '这里是你们的授权码','text': '示例:发送只含有文本的邮件' ,}# 创建一个文本实例# 正文msg = MIMEText(email['text'], 'plain', 'utf-8')# 发件人msg['From'] = email['from']# 收件人msg['To'] = ','.join(email['to'])# 抄送msg['Cc'] = ','.join(email['cc'])# 邮件标题msg['Subject'] = email['subject']# 登录邮箱服务器email_server = smtplib.SMTP_SSL('', 465)email_server.login(email['from'], email['license'])# 发送邮件try:email_server.sendmail(email['from'], email['to'], msg.as_string())print('发送成功')except:print('Error:发送失败')

2、发送包含正文、超链接的邮件

# 发送包含正文、可跳转URL链接的邮件import smtplibfrom email.mime.text import MIMEText# 配置邮件信息email = {'from': '111@','to': ['222@'],'cc': ['333@'],'subject': '自动发送邮件','license': '这里是你们的授权码','text': '示例:发送只含有文本的邮件' ,'html': '<p>欢迎进入我的博客:&nbsp&nbsp<a href="/wang1qqqq">点击进入</a></p>',}# 创建一个文本实例# 添加文本(可有可无)msg = MIMEText(email['text'], 'plain', 'utf-8')# 添加带url的html文本链接msg_html = MIMEText(email['html'], 'html', 'utf-8')msg.attach(msg_html)# 发件人msg['From'] = email['from']# 收件人msg['To'] = ','.join(email['to'])# 抄送msg['Cc'] = ','.join(email['cc'])# 邮件标题msg['Subject'] = email['subject']# 登录邮箱服务器email_server = smtplib.SMTP_SSL('', 465)email_server.login(email['from'], email['license'])# 发送邮件try:email_server.sendmail(email['from'], email['to'], msg.as_string())print('发送成功')except:print('Error:发送失败')

3、发送包含正文、图片的邮件

# 发送包含正文、图片的邮件import smtplibfrom email.mime.image import MIMEImagefrom email.mime.text import MIMEText# 配置邮件信息email = {'from': '111@','to': ['222@'],'cc': ['333@'],'subject': '自动发送邮件','license': '这里是你们的授权码','text': '示例:发送只含有文本的邮件' ,}# 创建一个文本实例# 添加文本(可有可无)msg = MIMEText(email['text'], 'plain', 'utf-8')# 插入图片html,命名图片id为i_imageimg_html = '<p><img src="cid:i_image"></p>'msg.attach(MIMEText(img_html, 'html', 'utf-8'))# 打开图片img_open = open(i_attach, 'rb')img = MIMEImage(img_open.read())# 插入图片img.add_header('Content-ID', '<i_image>')msg.attach(img)# 关闭图片img_open.close()# 发件人msg['From'] = email['from']# 收件人msg['To'] = ','.join(email['to'])# 抄送msg['Cc'] = ','.join(email['cc'])# 邮件标题msg['Subject'] = email['subject']# 登录邮箱服务器email_server = smtplib.SMTP_SSL('', 465)email_server.login(email['from'], email['license'])# 发送邮件try:email_server.sendmail(email['from'], email['to'], msg.as_string())print('发送成功')except:print('Error:发送失败')

4、发送包含正文、附件的邮件

# 发送包含正文、附件的邮件import smtplibfrom email.mime.image import MIMEImagefrom email.mime.text import MIMEText# 配置邮件信息email = {'from': '111@','to': ['222@'],'cc': ['333@'],'subject': '自动发送邮件','license': 'autmmyrqmqpcbace','text': '示例:发送只含有文本的邮件' ,}# 创建一个带附件的示例msg = MIMEMultipart()# 打开图片img_open = open(i_attach, 'rb')# 设置图片信息att = MIMEText(img_open.read(), 'base64', 'utf-8')att['Content-Type'] = 'application/octet-stream'# 添加到附件att.add_header('Content-Disposition', 'attachment', filename='疫情大数据.png')msg.attach(att)# 关闭图片img_open.close()# 发件人msg['From'] = email['from']# 收件人msg['To'] = ','.join(email['to'])# 抄送msg['Cc'] = ','.join(email['cc'])# 邮件标题msg['Subject'] = email['subject']# 登录邮箱服务器email_server = smtplib.SMTP_SSL('', 465)email_server.login(email['from'], email['license'])# 发送邮件try:email_server.sendmail(email['from'], email['to'], msg.as_string())print('发送成功')except:print('Error:发送失败')

5、发送包含正文、html、超链接、正文图片、附件的邮件

# 发送包含正文、html、可点击url、正文图片、附件的邮件import smtplibfrom email.mime.image import MIMEImagefrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextdef email_header(email):# 设置邮件信息# 无附件邮件使用:msg = MIMEText(email['text'], 'plain', 'utf-8')# MIMEMultipart:创建一个带附件的实例msg = MIMEMultipart()# 可以自定义发件人抬头(不理想,QQ邮箱列表上看不到发件人名称):Header('发送机器人', 'utf-8')msg['From'] = email['from']msg['To'] = ','.join(email['to'])msg['Cc'] = ','.join(email['cc'])msg['Subject'] = email['subject']return msgdef email_body(email, msg):# 添加文本(如果有html,文本会被覆盖)# msg.attach(MIMEText(email['text'], 'plain', 'utf-8'))# 添加htmlmsg.attach(MIMEText(email['text'], 'html', 'utf-8'))msg.attach(MIMEText(email['html'], 'html', 'utf-8'))for i_attach in email['attach']:# 添加正文图片(图片需要在html的情况下使用)img_html = '<p><img src="cid:i_image"></p>'msg.attach(MIMEText(img_html, 'html', 'utf-8'))img_open = open(i_attach, 'rb')img = MIMEImage(img_open.read())img.add_header('Content-ID', '<i_image>')msg.attach(img)# 关闭图片img_open.close()def email_att(email, msg):# 添加附件for i_attach in email['attach']:img_open = open(i_attach, 'rb')att = MIMEText(img_open.read(), 'base64', 'utf-8')att['Content-Type'] = 'application/octet-stream'att.add_header('Content-Disposition', 'attachment', filename='中国疫情大数据.png')msg.attach(att)# 关闭图片img_open.close()def email_login(email):# 登录邮箱服务器email_server = smtplib.SMTP_SSL('', 465)email_server.login(email['from'], email['license'])return email_serverdef email_send(email, email_server):# 发送邮件try:email_server.sendmail(email['from'], email['to'], msg.as_string())print('发送成功')except:print('Error:发送失败')if __name__ == '__main__':# 配置附件路径img_path = 'auto_img/'# 定义发送邮件信息email = {'from': '111@','to': ['222@'],'cc': ['333@'],'subject': '每日疫情数据推送','license': '这里是你们的授权码','text': '每日疫情数据推送:' + str(datetime.datetime.now().strftime("%Y-%m-%d")),'html': '<p>欢迎进入我的博客:&nbsp&nbsp<a href="/wang1qqqq">点击进入</a></p>','attach': [img_path + '中国疫情大数据.png']}# 配置收件人、发件人、抄送人、标题msg = email_header(email)# 配置正文内容email_body(email, msg)# 配置附件email_att(email, msg)# 登录邮件服务器email_server = email_login(email)# 发送邮件email_send(email, email_server)

如上,就是自动发送邮件的示范,可以根据自身情况,选择发送带正文、html、超链接、正文图片、附件的邮件。

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