Python实现自动发送邮件(详解) 您所在的位置:网站首页 邮件内容写在哪里 Python实现自动发送邮件(详解)

Python实现自动发送邮件(详解)

2023-06-27 05:46| 来源: 网络整理| 查看: 265

Python实现自动发送邮件 1.开启SMTP服务

为了实现自动发送邮件的目的,我们需要在邮箱中开启SMTP服务: 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 这点很关键,别忘了去开启SMTP, 别忘了去开启SMTP,否则邮件是无法发送成功的 。然后你还需要点击下面生成授权码,这个授权码才是使用Python发送邮件时的真正密码。 在这里插入图片描述

2.python发邮件需要掌握两个模块

smtplib和email,这俩模块是python自带的,只需import即可使用。smtplib模块主要负责发送邮件,email模块主要负责构造邮件。

smtplib模块主要负责发送邮件:是一个发送邮件的动作,连接邮箱服务器,登录邮箱,发送邮件(有发件人,收信人,邮件内容)。

email模块主要负责构造邮件:指的是邮箱页面显示的一些构造,如发件人,收件人,主题,正文,附件等。

代码说明: 1)smtplib模块

smtplib.SMTP() :实例化SMTP()

login(user,password): user:登录邮箱的用户名。 password:登录邮箱的密码,像笔者用的是网易邮箱,网易邮箱一般是网页版,需要用到客户端密码,需要在网页版的网易邮箱中设置授权码,该授权码即为客户端密码。

sendmail(from_addr,to_addrs,msg,…): from_addr:邮件发送者地址 to_addrs:邮件接收者地址。字符串列表[‘接收地址1’,‘接收地址2’,‘接收地址3’,…]或’接收地址’ msg:发送消息:邮件内容。一般是msg.as_string():as_string()是将msg(MIMEText对象或者MIMEMultipart对象)变为str。

quit():用于结束SMTP会话。

2)email模块

email模块下有mime包,mime英文全称为“Multipurpose Internet Mail Extensions”,即多用途互联网邮件扩展,是目前互联网电子邮件普遍遵循的邮件技术规范。

该mime包下常用的有三个模块:text,image,multpart。 导入方法如下:

from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.header import Header

构造一个邮件对象就是一个Message对象,如果构造一个MIMEText对象,就表示一个文本邮件对象,如果构造一个MIMEImage对象,就表示一个作为附件的图片,要把多个对象组合起来,就用MIMEMultipart对象,而MIMEBase可以表示任何对象。它们的继承关系如下:

Message +- MIMEBase +- MIMEMultipart +- MIMENonMultipart +- MIMEMessage +- MIMEText +- MIMEImage

1、自动发送普通的文字邮件代码实现如下:

from smtplib import SMTP_SSL from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.header import Header # smtplib模块主要负责发送邮件:是一个发送邮件的动作,连接邮箱服务器,登录邮箱,发送邮件(有发件人,收信人,邮件内容)。 # email模块主要负责构造邮件:指的是邮箱页面显示的一些构造,如发件人,收件人,主题,正文,附件等。 host_server = 'smtp.qq.com' #qq邮箱smtp服务器 sender_qq = '[email protected]' #发件人邮箱 pwd = '你的授权码' receiver = ['[email protected]','[email protected]' ]#收件人邮箱 #receiver = '[email protected]' mail_title = 'Python自动发送的邮件' #邮件标题 mail_content = "您好,这是使用python登录QQ邮箱发送邮件的测试——zep" #邮件正文内容 # 初始化一个邮件主体 msg = MIMEMultipart() msg["Subject"] = Header(mail_title,'utf-8') msg["From"] = sender_qq # msg["To"] = Header("测试邮箱",'utf-8') msg['To'] = ";".join(receiver) # 邮件正文内容 msg.attach(MIMEText(mail_content,'plain','utf-8')) smtp = SMTP_SSL(host_server) # ssl登录 # login(user,password): # user:登录邮箱的用户名。 # password:登录邮箱的密码,像笔者用的是网易邮箱,网易邮箱一般是网页版,需要用到客户端密码,需要在网页版的网易邮箱中设置授权码,该授权码即为客户端密码。 smtp.login(sender_qq,pwd) # sendmail(from_addr,to_addrs,msg,...): # from_addr:邮件发送者地址 # to_addrs:邮件接收者地址。字符串列表['接收地址1','接收地址2','接收地址3',...]或'接收地址' # msg:发送消息:邮件内容。一般是msg.as_string():as_string()是将msg(MIMEText对象或者MIMEMultipart对象)变为str。 smtp.sendmail(sender_qq,receiver,msg.as_string()) # quit():用于结束SMTP会话。 smtp.quit()

在这里插入图片描述 2、发送html格式邮件

import smtplib from smtplib import SMTP_SSL from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.header import Header host_server = 'smtp.qq.com' #qq邮箱smtp服务器 sender_qq = '[email protected]' #发件人邮箱 pwd = '你的授权码' receiver = '[email protected]' mail_title = 'Python自动发送html格式的邮件' #邮件标题 #邮件正文内容 mail_content = "您好,

这是使用python登录QQ邮箱发送HTNL格式邮件的测试:

CSDN个人主页

" msg = MIMEMultipart() msg["Subject"] = Header(mail_title,'utf-8') msg["From"] = sender_qq msg["To"] = Header("测试邮箱","utf-8") msg.attach(MIMEText(mail_content,'html')) try: smtp = SMTP_SSL(host_server) # ssl登录连接到邮件服务器 smtp.set_debuglevel(1) # 0是关闭,1是开启debug smtp.ehlo(host_server) # 跟服务器打招呼,告诉它我们准备连接,最好加上这行代码 smtp.login(sender_qq,pwd) smtp.sendmail(sender_qq,receiver,msg.as_string()) smtp.quit() print("邮件发送成功") except smtplib.SMTPException: print("无法发送邮件")

在这里插入图片描述

3、发送带附件的邮件

import smtplib import string from smtplib import SMTP_SSL from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.header import Header from email.mime.application import MIMEApplication # 用于添加附件 host_server = 'smtp.qq.com' #qq邮箱smtp服务器 sender_qq = '[email protected]' #发件人邮箱 pwd = '你的授权码' receiver = '[email protected]' mail_title = 'Python自动发送html格式的邮件' #邮件标题 #邮件正文内容 mail_content = "您好,

这是使用python登录QQ邮箱发送HTNL格式邮件的测试:

CSDN个人主页

" msg = MIMEMultipart() msg["Subject"] = Header(mail_title,'utf-8') msg["From"] = sender_qq msg["To"] = Header("测试邮箱","utf-8") msg.attach(MIMEText(mail_content,'html')) attachment = MIMEApplication(open('./test.xlsx','rb').read()) attachment["Content-Type"] = 'application/octet-stream' # 给附件重命名 basename = "test.xlsx" attachment.add_header('Content-Dispositon','attachment',filename=('utf-8', '', basename))#注意:此处basename要转换为gbk编码,否则中文会有乱码。 msg.attach(attachment) try: smtp = SMTP_SSL(host_server) # ssl登录连接到邮件服务器 smtp.set_debuglevel(1) # 0是关闭,1是开启debug smtp.ehlo(host_server) # 跟服务器打招呼,告诉它我们准备连接,最好加上这行代码 smtp.login(sender_qq,pwd) smtp.sendmail(sender_qq,receiver,msg.as_string()) smtp.quit() print("邮件发送成功") except smtplib.SMTPException: print("无法发送邮件")

在这里插入图片描述

3.使用zmail模块读取邮件

首先需要在cmd命令行安装zmail模块,输入pip install zmail安装即可 在这里插入图片描述

import zmail server = zmail.server('[email protected]','你的授权码') mail = server.get_latest() zmail.show(mail)

在这里插入图片描述

import zmail server = zmail.server('[email protected]','你的授权码') mail = server.get_latest() # zmail.show(mail) print(mail['subject']) print(mail['id']) print(mail['from']) print(mail['to']) print(mail['content_text']) print(mail['content_html']) # 用来保存附件 # target_path为None则默认保存在当前目录下 # overwrite=True 是指如果出现同名文件则进行覆盖 zmail.save_attachment(mail,target_path=None,overwrite=True)

在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有