【python】如何通过python来发邮件,各种发邮件方式详细解析

04-23 1306阅读

【python】如何通过python来发邮件,各种发邮件方式详细解析

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑

🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。

🏆《博客》:Python全栈,前后端开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,linux,shell脚本等实操经验,网站搭建等分享。

所属的专栏:python基础语法,高阶实战应用教学

景天的主页:景天科技苑

文章目录

  • Python 发送邮件
    • 1.发送普通邮件
      • 1 需要有一个发送邮件的邮箱
      • 2 申请开启发送邮件
      • 3 写python代码,实现发送邮件(smtp模块--》python内置)
      • 4.发送邮件api详解
      • 5.发送普通邮件完整代码
      • 2.发送html格式邮件
      • 3 发送带附件邮件
      • 4.总结

        Python 发送邮件

        在日常工作中,我们可能经常会用到发送邮件,但如果每次都人工来发送,那岂不是很麻烦,今天我们就来讲解下如何通过python语言来优雅地发送邮件

        1.发送普通邮件

        1 需要有一个发送邮件的邮箱

        • 163,126,qq…
        • 今天咱们是以 qq 邮箱为例,其它大家自行尝试,都基本类似

          2 申请开启发送邮件

          • 生成一个秘钥:x**************ic # 很重要,不要泄露

            3 写python代码,实现发送邮件(smtp模块–》python内置)

            • 就使用我们的账号:31*******35@qq.com

              以QQ邮箱为例,开启授权码图解,登录邮箱,点击设置

              【python】如何通过python来发邮件,各种发邮件方式详细解析

              往下拉,找到pop3那一串,点击开启

              【python】如何通过python来发邮件,各种发邮件方式详细解析

              点击管理服务,在弹出的页面生成授权码

              【python】如何通过python来发邮件,各种发邮件方式详细解析

              点击生成授权码,然后需要扫码发短信同意授权,会生成一串字符串

              4.发送邮件api详解

              在Python3中,使用mimetext模块可以轻松地创建电子邮件消息。在发送电子邮件时,我们需要设置邮件的主题、收件人、发件人、正文和附件等信息。

              而mimetext模块就是用来处理邮件中的文本和附件的。本文将详细介绍mimetext模块中的参数及其用法。

              发邮件常见的几个类介绍

              1.MIMEText类

              MIMEText类用来创建邮件的正文,它有三个参数:

              _text:邮件正文内容,可以是纯文本或HTML格式。

              _subtype:邮件正文内容的类型,可以是"plain"(纯文本)、“html”(HTML格式)。

              _charset:邮件正文内容的编码方式,常用的有"utf-8"、"gbk"等。

              常见用法如下:

              from email.mime.text import MIMEText
              # ----------方法1
              msg = MIMEText('测试邮件。收到请不用回复', 'plain', 'utf-8')
              # -----------方法2
              content = '''
               

              我的地址:

              点击进入我的

              我的公众号二维码:

              【python】如何通过python来发邮件,各种发邮件方式详细解析

              ''' html = MIMEText(content, 'html', 'utf-8')

              2.MIMEImage类

              MIMEImage类用来创建邮件中的图片,它有两个参数:

              _imagedata:图片的二进制数据。

              _subtype:图片的类型,可以是"jpeg"、“gif”、"png"等。

              代码示例

              from email.mime.image import MIMEImage
              #-----------方法1
              with open('test.jpeg', 'rb') as f:
                  image_data = f.read()
              msg = MIMEImage(image_data, 'jpeg')
              # ----------方法2
              with open('test.gif', 'rb') as f:
                  image_data = f.read()
              msg = MIMEImage(image_data, 'gif')
              # ---------方法3
              with open('test.png', 'rb') as f:
                  image_data = f.read()
              msg = MIMEImage(image_data, 'png')
              

              3.MIMEAudio类

              MIMEAudio类用来创建邮件中的音频文件,它有两个参数:

              _audiodata:音频文件的二进制数据。

              _subtype:音频文件的类型,可以是"mp3"、"wav"等。

              代码示例

              from email.mime.audio import MIMEAudio
              with open('test.mp3', 'rb') as f:
                  audio_data = f.read()
              msg = MIMEAudio(audio_data, 'mp3')
              

              4.MIMEBase类

              MIMEBase类是所有MIME类型的基类,它有四个参数:

              _maintype:MIME类型的大类,常见的有"text"、“image”、“audio”、“video”、"application"等。

              _subtype:MIME类型的子类,如"text/plain"、“image/jpeg”、"audio/mp3"等。

              _encoder:编码方式,可以是"base64"、"quoted-printable"等。

              _payload:MIME类型的内容,可以是文本、图片、音频、视频等。

              代码示例:

              from email.mime.base import MIMEBase
              with open('test.pdf', 'rb') as f:
                  pdf_data = f.read()
              msg = MIMEBase('application', 'octet-stream')
              msg.set_payload(pdf_data)
              

              5.发送普通邮件完整代码

              # 1 导入模块
              import smtplib
              from email.mime.text import MIMEText  #往邮件中写内容的对象
              from email.utils import formataddr #发件人信息
              # 2 发送方和接收方配置
              # 发件方邮箱:谁发送的
              msg_from='3*****2@qq.com'
              # 生成的授权码:不能泄露
              password='h******ifj'
              # # 发送给谁,可以写多个人,以列表形式存储
              msg_to=['li*****91@126.com','18*******68@139.com']
              # 邮件主题
              subject = "给领导问好"  # 主题
              content = "领导早上好,领导辛苦了" #邮件内容
              # 生成一个MIMEText对象(还有一些其它参数)
              msg = MIMEText(content)
              # 放入邮件主题
              msg['Subject'] = subject
              # 放入发件人,元祖中内容第一个是发件人名称,第二个是发件地址
              msg['From'] = formataddr(('景天',msg_from))
              # 放入收件人,将收件人转化为以逗号分隔的字符串
              msg['to'] = ','.join(msg_to)
              try:
                  # 通过ssl方式发送,服务器地址,端口
                  s = smtplib.SMTP_SSL("smtp.qq.com", 465)
                  # 登录到邮箱
                  s.login(msg_from, password)
                  # 发送邮件:发送方,收件方,要发送的消息
                  s.sendmail(msg_from, msg_to, msg.as_string()) #第二个参数可以以列表的方式写多个
                  print('成功')
              except BaseException as e:
                  print(e)
              finally:
                  #不管是否发送成功,都退出服务
                  s.quit()
              

              登录邮箱查看,发送成功

              【python】如何通过python来发邮件,各种发邮件方式详细解析

              2.发送html格式邮件

              # 1 导入模块
              import smtplib
              from email.mime.text import MIMEText  #往邮件中写内容的对象
              from email.utils import formataddr #发件人信息
              # 2 发送方和接收方配置
              # 发件方邮箱:谁发送的
              msg_from='3******72@qq.com'
              # 生成的授权码:不能泄露
              password='h*********ifj'
              # # 发送给谁,可以写多个人,以列表形式存储
              msg_to=['li*******1@126.com','1**********8@139.com']
              # 邮件主题
              subject = "非常重要,中了五百万"  # 主题
              # 构建html标签
              content = '''
              

              恭喜您中奖了

              点我兑换奖品

              ''' # 生成一个MIMEText对象(发送html格式邮件) msg = MIMEText(content,'html','utf-8') # 放入邮件主题 msg['Subject'] = subject # 放入发件人,元祖中内容第一个是发件人名称,第二个是发件地址 msg['From'] = formataddr(('景天',msg_from)) # 放入收件人,将收件人转化为以逗号分隔的字符串 msg['to'] = ','.join(msg_to) try: # 通过ssl方式发送,服务器地址,端口 s = smtplib.SMTP_SSL("smtp.qq.com", 465) # 登录到邮箱 s.login(msg_from, password) # 发送邮件:发送方,收件方,要发送的消息 s.sendmail(msg_from, msg_to, msg.as_string()) #第二个参数可以以列表的方式写多个 print('成功') except BaseException as e: print(e) finally: #不管是否发送成功,都退出服务 s.quit()

              邮箱查看,发送成功

              【python】如何通过python来发邮件,各种发邮件方式详细解析

              3 发送带附件邮件

              添加附件时需要使用MIMEMultipart类,它有一个attach()方法可以添加邮件中的附件。用smtplib模块发送示例代码:

              # 1 导入模块
              import smtplib
              from email.mime.image import MIMEImage
              from email.mime.text import MIMEText  #往邮件中写内容的对象
              from email.utils import formataddr #发件人信息
              from email.mime.multipart import MIMEMultipart
              from email.mime.base import MIMEBase
              from email import encoders
              # 2 发送方和接收方配置
              # 发件方邮箱:谁发送的
              msg_from='3*******2@qq.com'
              # 生成的授权码:不能泄露
              password='h**********fj'
              # # 发送给谁,可以写多个人,以列表形式存储
              msg_to=['li*********1@126.com','1*********8@139.com','3*********2@qq.com']
              # 邮件主题
              subject = "老板,这是今日日报,请查收"  # 主题
              # 创建一个带附件的实例
              msg = MIMEMultipart()
              # 放入邮件主题
              msg['Subject'] = subject
              # 放入发件人,元祖中内容第一个是发件人名称,第二个是发件地址
              msg['From'] = formataddr(('景天',msg_from))
              # 放入收件人,将收件人转化为以逗号分隔的字符串
              msg['to'] = ','.join(msg_to)
              # 邮件正文内容
              msg.attach(MIMEText('今日日报:1 xxx', 'plain', 'utf-8'))
              # 添加附件1
              # 构造附件1,传送当前目录下的 ribao.txt 文件,注意文件要以rb的形式读取
              file = open('ribao.txt', 'rb').read()
              att1 = MIMEText(file, 'base64', 'utf-8')
              att1["Content-Type"] = 'application/octet-stream'
              # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
              att1.add_header('Content-Disposition', 'attachment', filename="日报.txt")
              msg.attach(att1)
              
              # 添加附件2--图片
              with open('gzh.png', 'rb') as f:
                  # 设置附件的MIME和文件名,这里是png类型:
                  mime = MIMEBase('image', 'png', filename='gzh.png')
                  # 加上必要的头信息:
                  mime.add_header('Content-Disposition', 'attachment', filename='gzh.png')
                  mime.add_header('Content-ID', '')
                  mime.add_header('X-Attachment-Id', '0')
                  # 把附件的内容读进来:
                  mime.set_payload(f.read())
                  # 用Base64编码:
                  encoders.encode_base64(mime)
                  # 添加到MIMEMultipart:
                  msg.attach(mime)
              # 构造附件3,图片格式
              fp = open('对称加密.png', 'rb')
              msgImage = MIMEImage(fp.read(),'png')
              fp.close()
              # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
              msgImage.add_header('Content-Disposition', 'attachment', filename="对称加密.png")
              # 定义图片 ID,在 HTML 文本中引用
              msgImage.add_header('Content-ID', '')
              msg.attach(msgImage)
              try:
                  # 通过ssl方式发送,服务器地址,端口
                  s = smtplib.SMTP_SSL("smtp.qq.com", 465)
                  # 登录到邮箱
                  s.login(msg_from, password)
                  # 发送邮件:发送方,收件方,要发送的消息
                  s.sendmail(msg_from, msg_to, msg.as_string()) #第二个参数可以以列表的方式写多个
                  print('成功')
              except BaseException as e:
                  print(e)
              finally:
                  #不管是否发送成功,都退出服务
                  s.quit()
              

              【python】如何通过python来发邮件,各种发邮件方式详细解析

              查看邮件中,已包含附件

              【python】如何通过python来发邮件,各种发邮件方式详细解析

              4.总结

              综上,就是我们通过python来发送邮件的常用方法的详细流程,我们也可以结合linux定时任务,或者celery来实现定时发送,也不难。上述代码在使用时可以直接拿去用,只需要改下自己邮箱的参数即可,是不是很方便,喜欢的朋友一键三连,python常规用法持续更新中!!!

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]