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

Python实现自动发送邮件(详解)Python实现自动发送邮件1.开启SMTP服务为了实现自动发送邮件的目的,我们需要在邮箱中开启SMTP服务:这点很关键,别忘了去开启SMTP,别忘了去开启SMTP,否则邮件是无法发送成功的。然后你还需要点击下面生成授权码,这个授权码才是使用Python发送邮件时的真正密码。2.python发邮件需要掌握两个模块smtplib和email,这俩模块是python自带的,只需import即可使用。smtplib模块主要负责发送邮件,email模块主要负责构造邮件。smtplib模块主要

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

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

Jetbrains全家桶1年46,售后保障稳定

构造一个邮件对象就是一个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 = '9156393@qq.com' #发件人邮箱
pwd = '你的授权码'
receiver = ['910393@qq.com','824864@qq.com' ]#收件人邮箱
#receiver = '913@qq.com'
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 = '91693@qq.com' #发件人邮箱
pwd = '你的授权码'
receiver = '96393@qq.com'
mail_title = 'Python自动发送html格式的邮件' #邮件标题

#邮件正文内容
mail_content = "您好,<p>这是使用python登录QQ邮箱发送HTNL格式邮件的测试:</p> <p><a href='https://blog.csdn.net/weixin_44827418?spm=1000.2115.3001.5113'>CSDN个人主页</a></p>"

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 = '91393@qq.com' #发件人邮箱
pwd = '你的授权码'
receiver = '9193@qq.com'
mail_title = 'Python自动发送html格式的邮件' #邮件标题

#邮件正文内容
mail_content = "您好,<p>这是使用python登录QQ邮箱发送HTNL格式邮件的测试:</p> <p><a href='https://blog.csdn.net/weixin_44827418?spm=1000.2115.3001.5113'>CSDN个人主页</a></p>"

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('9193@qq.com','你的授权码')
mail = server.get_latest()
zmail.show(mail)

在这里插入图片描述

import zmail

server = zmail.server('993@qq.com','你的授权码')
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)

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213566.html原文链接:https://javaforall.net

(0)
上一篇 2025年7月20日 下午5:22
下一篇 2025年7月20日 下午6:01


相关推荐

  • OpenClaw升级后OpenClaw和飞书“未建立有效的长链接“的问题修复过程

    OpenClaw升级后OpenClaw和飞书“未建立有效的长链接“的问题修复过程

    2026年3月15日
    4
  • Java实例变量和类变量

    Java实例变量和类变量Java 程序的变量大体可分为成员变量和局部变量 其中局部变量可分为如下 3 类 形参 在方法签名中定义的局部变量 由方法调用者负责为其赋值 随方法的结束而消亡 方法内的局部变量 在方法内定义的局部变量 必须在方法内对其进行显示初始化 这种类型的局部变量从初始化完成后开始生效 随方法的结束而消亡 代码块的局部变量 在代码块内定义的局部变量 必须在代码块内对其进行显式初始化 这种类型的局部变量从初始化

    2026年3月26日
    2
  • OpenClaw 本地安装部署讲解

    OpenClaw 本地安装部署讲解

    2026年3月13日
    2
  • ubuntu通过conda安装tensorflow

    ubuntu通过conda安装tensorflowubuntu版本:16.04,Anaconda3版本:5.3.1 tensorflow没有32位的!tensorflow没有32位的!tensorflow没有32位的! 安装Anaconda 通过conda来创建tensorflow虚拟环境:conda-ntensorflowpython=3.6 激活刚刚创建的虚拟环境:condaactiva…

    2022年6月19日
    35
  • 流处理旅程——storm之spout介绍

    流处理旅程——storm之spout介绍核心 Spout 中方法的说明 1 Spout 数据源消息源 Spout 是 storm 的 Topology 中的消息生产者 2 spout 介绍 2 1spout 的结构 Spout 是 storm 的核心组件之一 最源头的接口是 IComponent2 2Spout 发出的消息 Spout 从外部获取数据后 向 Topology 中发出的 Tuple 可以是可靠的 也可以是不可靠的 注意 一个可靠的消息源可以重新发射

    2026年3月17日
    1
  • document的visibilitychange事件

    document的visibilitychange事件有时,你跑到另外一个页面去,回来发现自己的页面出了个bug,如轮播图写出来当你从别的页面在进去,原先的定时器还是会再运行,这样里面的一些值就会改变,看到的效果就不一样, 下面就是解决这个问题的方法。…

    2022年6月18日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号