Python使用smtplib实现邮件发送功能详解

沈亦白
沈亦白
发布时间:2026-10-13| 7人浏览过
原创

本文详细介绍如何利用Python标准库smtplib实现邮件发送功能。内容涵盖SMTP协议基本概念、smtplib模块的创建语法及参数说明,重点解析sendmail方法的使用,包括发件人、收件人列表及消息格式要求。附带完整代码示例,帮助开发者快速掌握Python发送邮件的核心技巧。

Python SMTP邮件发送基础

借助Python内置的smtplib模块,开发者可以便捷地实现电子邮件发送功能。本文将深入探讨SMTP协议的基本概念,并演示具体的邮件发送实现步骤。

SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)是一套用于从源地址向目的地址传输邮件的规则集合,它负责控制信件在网络中的中转与传递方式。

Python中的smtplib模块对SMTP协议进行了封装,提供了一种简洁高效的途径来发送电子邮件。

SMTP对象创建与参数配置

在Python中创建SMTP对象的语法如下所示:


import smtplib
smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )

以下是相关参数的详细说明:

host:指定SMTP服务器的主机名或IP地址(例如runoob.com)。此参数为可选配置。

port:若已提供host参数,则需指定SMTP服务所使用的端口号。通常情况下,SMTP默认端口号为25。

local_hostname:若SMTP服务器运行在本机,只需将服务器地址指定为localhost即可。

邮件发送方法详解

Python SMTP对象通过调用sendmail方法来执行邮件发送操作,其语法格式如下:


SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])

各参数含义如下:

from_addr:指定邮件发送者的邮箱地址。

to_addrs:一个字符串列表,包含所有邮件接收者的地址。

msg:表示要发送的具体邮件内容。

需特别注意第三个参数msg,它必须是符合SMTP协议格式的标准字符串。一封完整的邮件通常包含标题、发件人、收件人、正文及附件等信息,因此在构造msg时需严格遵循SMTP协议定义的格式规范。

代码实现与示例

以下提供具体的代码实现供参考:


import smtplib, socket
fromaddr = a@b.com
toaddrs = ["c@d.com",   "e@f.com"]
msg = open("multimsg.eml", "r").read()
try:
 server = smtplib.SMTP('10.0.0.1')
 result = server.sendmail(fromaddr, toaddrs, msg)
 server.quit()
 if result:
  for r in result.keys():
   print "Error sending to", r
   rt = result[r]
   print "Code", rt[0], ":", rt[1]
except (smtplib.SMTPException, socket.error), arg:
 print "SMTP Server could not send mail", arg

补充实例说明:

使用Python实现邮件发送功能的具体代码示例。


'''套接字是为特定的网络协议(例如TCP/IP,ICMP/IP,UDP/IP等),允许程序和接受并进行连接,要在python 中建立具有TCP和流套接字的简单服务器,需要使用socket模块,利用该模块包含的函数和类定义,可生成通过网络通信的程序,分为六步服务端的一些方法:
1.  何为套接字
内核中套接字是一层一层进行抽象展示的,把共性的东西抽取出来,这样对外提供的接口可以尽量的统一,Socket函数中的三个参数其实就是把抽象的socket具体化的条件,famil参数决定了图中所示的第二层通信域,type决定了第三层的通信模式,protocol
决定了第四层真正的通信协议。
首先了解这个内容是是在哪个层?是如何通信的
http://www.cnblogs.com/wangcq/p/3520400.html,看了以方法,大体服务器和客户端就分为这几步
1.创建对象
2.将socket绑定在指定地址上,socket.bing(地址)
3.第3步,绑定后,必须准备好套接字,对端口进行监听 socket.listen(backlog)
4.socket的accept方法等待客户请求一个连接
5.处理阶段
6.传输结束,服务器调用socket的close方法以关闭连接
客户端就为4个步骤:
1.创建socket连接服务器
2.使用socket的connect方法连接服务器 socket.connect((host,port))
3.客户和服务器通过send和recv方法通信
4.调用socket的close方法通信
'''
#encoding=utf-8
import socket
t = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
'''创建socket对象,格式socket.socket(family,type),family格式是AF_INET(对于IPV4协议的TCP和 UDP),type参数,SOCK_STREAM(流套接字,提供面向连接,可靠的数据服务,用于TCP)或者 SOCK_DGRAM(数据报文套接字提供无无面向连接,不可靠的数据服务,用于UDP),SOCK_RAW(raw套接字,较低层的协议)'''
t.connect(('smtp.126.com', 25)) #建立连接
print "start", t.recv(1024) #使用recv方法通信,传输数据 
t.send("helo 126.com\r\n") #发送内容
print "111", t.recv(1024) 
t.send("auth login\r\n") #进行邮箱的登录
print "222", t.recv(1024) #打印在控制台
t.send("dGVzdG1hbjE5ODA=\r\n") #base64位方式编码,解码为:testman1980
print "333", t.recv(1024) #打印在控制台
t.send("Zm9zdGVyd3UxOTc4\r\n")#base64位方式编码,解码为:fosterwu1978
print "444", t.recv(1024) #打印在控制台
t.send("mail from:<xxx1980@126.com>\r\n") #发件人 这里不是很清楚同样在下方的邮件内容中,为何还要在一次
print "555", t.recv(1024) #打印在控制台
t.send("rcpt to:<xxx@qq.com>\r\n") #改变了收件人,但是不明白下方也有一个收件人,下方是否会收到消息,并且优先级是怎样的,明天实验来看
print "666", t.recv(1024) #打印在控制台
t.send("data\r\n")  #data的作用目前还没有发现,明天实践
print "777", t.recv(1024)  #打印在控制台
#发送邮件内容
t.send("from:xxx@126.com\r\n") #optional,可伪造别人的发件记录
t.send("to:xxx@qq.com\r\n")  #optional,可发给任何人
t.send("subject:hello!\r\n")
t.send("\r\n") #按照smtp协议要求,在标题后要发个空行
t.send("mail test1111!\r\n") #发送邮件内容
t.send(".\r\n")
print "888", t.recv(1024)

至此,关于Python实现邮件发送功能的介绍已完成。如需了解更多相关方法,欢迎查阅本站其他文章或继续关注后续更新,感谢支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。