简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)是互联网标准协议之一,用于电子邮件的传输。该协议定义了电子邮件的传输方式以及客户端与服务器之间的通信规范。
在 Python 中使用 SMTP 协议向他人发起邮件的方式步骤大体如下:
1.连接 SMTP 服务器
2.发送 HELO 命令,告诉 SMTP 服务器你要发送邮件
3.如果服务器支持 TLS,则启动 TLS
4.验证登录账户密码(服务器常常需要先验证登录账户密码用户身份)
5.设置发件人、收件人、主题和正文
6.发送邮件
7.关闭 SMTP 连接
Python 内置了 smtplib 模块,可以通过 Python 自带的方式实现发送邮件。
代码示例:
import smtplib from email.mime.text import MIMEText from email.header import Header # 设置服务器所需信息 # 163邮箱服务器地址 mail_host = 'smtp.163.com' # 163用户名 mail_user = 'xxx@163.com' # 密码(部分邮箱为授权码) mail_pass = 'xxxxxx' # 邮件发送方邮箱地址 sender = 'xxx@163.com' # 邮件接受方邮箱地址 receivers = ['xxx@qq.com'] # 设置email信息 # 邮件内容设置 message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8') # 邮件主题 message['Subject'] = Header('Python SMTP 发邮件测试', 'utf-8') # 发送方信息 message['From'] = Header('发件人名字', 'utf-8') # 接受方信息 message['To'] = Header('测试', 'utf-8') # 连接并登录服务器 smtpObj = smtplib.SMTP() # 连接到服务器 smtpObj.connect(mail_host, 25) # 打印出和SMTP服务器交互的所有信息 smtpObj.set_debuglevel(1) # 登录到服务器 smtpObj.login(mail_user,mail_pass) # 发送邮件 smtpObj.sendmail( sender, receivers, message.as_string()) # 退出 smtpObj.quit()
在发送邮件的过程中,邮件正文的格式选择很重要,目前主流的邮件正文格式有:
在 Python 中,通过 MIMEText 模块实现上述代码示例中的邮件正文内容设置,其中 plain、html、rich 等均为 MIME 类型。
代码示例:
# 纯文本格式 message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8') # HTML格式 message = MIMEText('Python 邮件发送测试...
', 'html', 'utf-8') # 富文本格式HTML带图片 message = MIMEText('Hello
' + '' + '', 'html', 'utf-8') # 指定图片为当前目录 with open('./test.png', 'rb') as f: # 设置附件的 MIME 和文件名 mime = MIMEImage(f.read()) mime.add_header('Content-ID', '<0>') mime["Content-Disposition"] = 'attachment; filename="test.png"' message.attach(mime)
在使用 Python 发送邮件之前,需要先登录验证发件人账户密码,具体方式如下:
代码示例:
smtpObj.login(mail_user,mail_pass)
在 Python 发送邮件时,需要设置发件人和收件人信息,注意发件人和收件人信息都需要带上邮箱地址。
代码示例:
# 发送方信息 message['From'] = Header('发件人名字', 'utf-8') # 接受方信息 message['To'] = Header('测试', 'utf-8')
在 Python 发送邮件操作完成后,调用 SMTP 对象的 sendmail 方法,发送邮件到指定的邮件地址。在传递收件人和发件人信息时,需要将其包裹在列表中,如果有多个接收人,则在列表中添加多个邮件地址。
代码示例:
# 发送邮件 smtpObj.sendmail( sender, receivers, message.as_string())
Python 发送邮件完成后,需关闭 SMTP连接,释放连接资源。
代码示例:
smtpObj.quit()
此处为 Python 发送简单邮件的完整代码示例:
import smtplib from email.mime.text import MIMEText from email.header import Header # 设置服务器所需信息 # 163邮箱服务器地址 mail_host = 'smtp.163.com' # 163用户名 mail_user = 'xxx@163.com' # 密码(部分邮箱为授权码) mail_pass = 'xxxxxx' # 邮件发送方邮箱地址 sender = 'xxx@163.com' # 邮件接受方邮箱地址 receivers = ['xxx@qq.com'] # 设置email信息 # 邮件内容设置 message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8') # 邮件主题 message['Subject'] = Header('Python SMTP 发邮件测试', 'utf-8') # 发送方信息 message['From'] = Header('发件人名字', 'utf-8') # 接受方信息 message['To'] = Header('测试', 'utf-8') # 连接并登录服务器 smtpObj = smtplib.SMTP() # 连接到服务器 smtpObj.connect(mail_host, 25) # 打印出和SMTP服务器交互的所有信息 smtpObj.set_debuglevel(1) # 登录到服务器 smtpObj.login(mail_user,mail_pass) # 发送邮件 smtpObj.sendmail( sender, receivers, message.as_string()) # 退出 smtpObj.quit()
标签: python基础