手把手教python发送邮件

手把手教python发送邮件使用 python 内置模块 smtplib 和 email 进行邮件发送 其中 smtplib 模块负责发送邮件 而 email 模块负责构造邮件内容 一 基本用法介绍 1 smtplib 模块 1 引入 smtplib 模块 importsmtpli 2 创建 SMTP 对象 SMTP 协议是由源服务器到目的地服务器传送邮件的一组规则 可简单理解为 我们需要通过 SMTP 指定一个服务器 这样才能把邮件送到另一个服务器 smtpObj smtplib SMTP 3 连接 con

使用python内置模块–smtplibemail进行邮件发送。其中smtplib模块负责发送邮件,而email模块负责构造邮件内容

一、基本用法介绍:

1、smtplib模块
'''1、引入smtplib模块''' import smtplib '''2、创建 SMTP 对象 SMTP 协议是由源服务器到目的地服务器传送邮件的一组规则。(可简单理解为:我们需要通过SMTP指定一个服务器,这样才能把邮件送到另一个服务器)''' smtpObj = smtplib.SMTP() '''3、连接(connect)指定服务器''' smtpObj.connect(host,port) '''4、登录,需要:登录邮箱和授权码''' smtpObj.login(uer_name,password) '''5、发邮件。 参数:发件人,收件人和邮件内容 msg.as_string()是一个字符串类型:as_string()是将发送的信息msg变为字符串类型。 ''' smtpObj.send_mail(from_addrs,to_addr,msg.as_string()) '''6、退出''' smtpObj.quit() 

连接(connect)指定的服务器:
host是连接的邮箱服务器,可以指定服务器的域名。
port 是“端口”,一般情况下SMTP默认端口号为25。
host和port均可百度到呀~~~~
如下图,的SMTP服务地址是:smtp..com 端口是465或587
在这里插入图片描述
提醒:
邮箱一般默认关闭SMTP服务,得先去开启它。打开https://mail..com/,登录你的邮箱。然后点击位于顶部的【设置】按钮,选择【账户设置】,然后下拉到这个位置。开启POP3/SMTP服务,验证后会给到一个授权码,后续服务端用该授权码登录邮箱。
在这里插入图片描述
















2、email 模块:

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

from email.mime.text import MIMEText #纯文本,HTML from email.mime.image import MIMEImage #图片 from email.mime.multipart import MIMEMultipart #多种组合内容 

详细使用可查看文档。

二、完整代码示例

1、发送文本内容
# smtplib 用于邮件的发信动作 import smtplib # email 用于构建邮件内容 from email.mime.text import MIMEText # 构建邮件头 from email.header import Header # 发信方的信息:发信邮箱, 邮箱授权码 from_addr = '' password = '*' # 收信方邮箱 to_addr = '' # 发信服务器 smtp_server = 'smtp..com' # 邮箱正文内容,第一个参数为内容,第二个参数为格式(plain 为纯文本),第三个参数为编码 msg = MIMEText('使用python发送邮件测试', 'plain', 'utf-8') # 邮件头信息 msg['From'] = Header('张三') # 发送者 msg['To'] = Header('李四') # 接收者 subject = 'Python SMTP 邮件测试' msg['Subject'] = Header(subject, 'utf-8') # 邮件主题 try: smtpobj = smtplib.SMTP_SSL(smtp_server) # 建立连接--邮箱服务和端口号(可百度查询) smtpobj.connect(smtp_server, 465) # 登录--发送者账号和口令 smtpobj.login(from_addr, password) # 发送邮件 smtpobj.sendmail(from_addr, to_addr, msg.as_string()) print("邮件发送成功") except smtplib.SMTPException: print("无法发送邮件") finally: # 关闭服务器 smtpobj.quit() 
2、发送HTML格式邮件

仅需将1中如下代码:

msg = MIMEText('使用python发送邮件测试', 'plain', 'utf-8') 

修改为:

html_msg = """ 

Python 邮件发送HTML格式文件测试...

这是一个链接

"""
msg = MIMEText(html_msg, 'html', 'utf-8')
3、发送带附件的邮件

发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送。
完整代码如下:

# smtplib 用于邮件的发信动作 import smtplib # email 用于构建邮件内容 from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart # 构建邮件头 from email.header import Header # 发信方的信息:发信邮箱, 邮箱授权码 from_addr = '@.com' password = '' # 收信方邮箱 to_addr = '' # 发信服务器 smtp_server = 'smtp..com'

html_msg = """ 

Python 邮件发送HTML格式文件测试...

这是一个链接

"""
# 创建一个带附件的实例msg msg = MIMEMultipart() msg['From'] = Header('张三') # 发送者 msg['To'] = Header('李四') # 接收者 subject = 'Python SMTP 邮件测试' msg['Subject'] = Header(subject, 'utf-8') # 邮件主题 # 邮件正文内容 msg.attach(MIMEText(html_msg, 'html', 'utf-8')) # 构造附件1,传送当前目录下的 test1.txt 文件 att1 = MIMEText(open('test1.txt', 'rb').read(), 'base64', 'utf-8') att1["Content-Type"] = 'application/octet-stream' # 这里的filename可以任意写,写什么名字,邮件中显示什么名字 att1["Content-Disposition"] = 'attachment; filename="test1.txt"' msg.attach(att1) # 构造附件2,传送当前目录下的 test2.txt 文件 att2 = MIMEText(open('test2.txt', 'rb').read(), 'base64', 'utf-8') att2["Content-Type"] = 'application/octet-stream' att2["Content-Disposition"] = 'attachment; filename="test2.txt"' msg.attach(att2) try: smtpobj = smtplib.SMTP_SSL(smtp_server) smtpobj.connect(smtp_server, 465) # 建立连接--邮箱服务和端口号 smtpobj.login(from_addr, password) # 登录--发送者账号和口令 smtpobj.sendmail(from_addr, to_addr, msg.as_string()) print("邮件发送成功") except smtplib.SMTPException: print("无法发送邮件") finally: # 关闭服务器 smtpobj.quit()
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
上一篇 2026年3月26日 下午3:05
下一篇 2026年3月26日 下午3:05


相关推荐

  • Linux-pstree命令

    Linux-pstree命令概述 pstree 命令以树状图的方式展现进程之间的派生关系 显示效果比较直观 pstree 命令以树状图显示进程间的关系 displayatree ps 命令可以显示当前正在运行的那些进程的信息 但是对于它们之间的关系却显示得不够清晰 在 Linux 系统中 系统调用 fork 可以创建子进程 通过子 shell 也可以创建子进程 Linux 系统中进程之间的关系天生就是一棵树 树的

    2026年3月16日
    2
  • python urllib库安装_urllib库安装

    python urllib库安装_urllib库安装ubuntu 怎样安装 urllib 库 ubuntu 怎样安装 urllib 库先看一下 ubuntu 的软件源里是否有 urllib 如果没有就需要去官网下载手动安装 一般在软件的说明文档里有具体的安装方法 可自行查看 pythonurllib 模块在哪里下载 一般使用在 python 下的模块去哪里下载的 我找了好久 没发现有下载模块的 urllib2 是 python 自带的模块 不需要下载 urllib2

    2026年3月19日
    2
  • python学习–mac 下pycharm安装激活成功教程

    python学习–mac 下pycharm安装激活成功教程pycharm下载路径:http://www.https://www.jetbrains.com/pycharm/pycharm社区版:https://www.cr173.com/soft/752801.htmlpycharm激活成功教程:(1)hosts文件路径:sudovim/etc/hosts(2)将0.0.0.0account.jetbrains.com添加到hosts文件中…

    2022年8月28日
    4
  • 由真值表求逻辑表达式的方法是_与非门逻辑表达式

    由真值表求逻辑表达式的方法是_与非门逻辑表达式第一种方法:以真值表内输出端“1”为准第一步:从真值表内找输出端为“1”的各行,把每行的输入变量写成乘积形式;遇到“0”的输入变量上加非号。第二步:把各乘积项相加,即得逻辑函数的表达式。第二种方法:以真值表内输出端“0”为准第一步:从真值表内找输出端为“0”的各行,把每行的输入变量写成求和的形式,遇到“1”的输入变量上加非号。第二步:把各求和项相乘,即得逻辑函数表达式。总结,哪…

    2025年5月26日
    6
  • string用法总结[建议收藏]

    要想使用标准C++中的string类,必须要包含#include<string>注意是<string>而不是<string.h>,带.h的是C语言中的头文件s

    2021年12月18日
    37
  • zip文件后缀改成什么可以用_zip格式转rar格式

    zip文件后缀改成什么可以用_zip格式转rar格式案例2,批量修改文件扩展名\后缀名1上面介绍的是只修改某一类的后缀名,那么如果我整个文件夹下面的所有类型的文件都要修改怎么办呢?如下图什么类型的文件都有呢【强烈推荐】如何批量修改文件后缀名?超详细2其实也很简单,只需要修改一个参数就好了。如下图找到刚刚那个bat文件,右键编辑–或者用记事本打开。(注意:在*之前有一个英文的空格把命令改成,ren.*.gif  格式 ren空格星点星空格星点文件后缀名【强烈推荐】如何批量修改文件后缀名?超详细【强烈推荐】如何批

    2022年10月12日
    4

发表回复

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

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