Python-使用SMTP服务发送邮件
2021/10/18 17:11:50
本文主要是介绍Python-使用SMTP服务发送邮件,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.SMTP 发送邮件
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。
如果我们本机没有 sendmail 访问,可以使用其他邮件服务商的 SMTP 访问(QQ、网易、Google等)。
下面以QQ邮箱为例:
1.1使用SMTP的第一步需要把邮箱的SMTP服务打开:
-
登录QQ邮箱网页版,点击设置:
-
在账户一栏中找到SMTP服务:
-
打开SMTP服务,根据提示验证密保:
-
验证成功后复制授权码备用:
1.2准备发送邮件
import smtplib from email.mime.text import MIMEText from email.header import Header # 第三方SMTP服务器地址: smtp_server = 'smtp.qq.com' # 输入Email地址和授权码: from_addr = 'xxxxx@qq.com' password = 'xxxxxxxxxxxxxx' # 输入收件人地址: to_addr = 'weijiajian@wei.tax' # 定义发送的消息,其中plain是文本格式 message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8') # 定义发送人名字 message['From'] = Header('Python', 'utf-8') # 定义接收人的名字 message['To'] = Header('测试员', 'utf-8') # 定义邮件主题 subject = 'Python SMTP 邮件测试' message['Subject'] = Header(subject, 'utf-8') # 尝试发送邮件 try: # 创建SMTP对象 smtpObj = smtplib.SMTP() # 创建SMTP连接 smtpObj.connect(smtp_server, 25) # SMTP的端口号,一般为25 # 登录邮箱 smtpObj.login(from_addr, password) # 发送邮件 发送方 接收方 信息 smtpObj.sendmail(from_addr, to_addr, message.as_string()) print('邮件发送成功') except smtplib.SMTPException: print('Error:邮件发送失败')
运行代码:
可以看到邮件发送成功,打开邮箱:
可以看到收到了一封邮件:
1.3使用Python发送HTML格式的邮件
Python发送HTML格式的邮件与发送纯文本消息的邮件不同之处就是将MIMEText中_subtype设置为html。具体代码如下:
import smtplib from email.mime.text import MIMEText from email.header import Header # 第三方SMTP服务器地址: smtp_server = 'smtp.qq.com' # 输入Email地址和授权码: from_addr = 'w.yuling@qq.com' password = 'xxxxxxxxx' # 输入收件人地址: to_addr = 'weijiajian@wei.tax' # 定义发送的消息,定义为html格式 html_message = """ <p>这是一封html格式的邮件</p> <p><a href="https://weibk.github.io">这是一个连接,通往我的主页</a></p> """ message = MIMEText(html_message, 'html', 'utf-8') # 定义发送人名字 message['From'] = Header('Python', 'utf-8') # 定义接收人的名字 message['To'] = Header('测试员', 'utf-8') # 定义邮件主题 subject = 'Python SMTP 邮件测试' message['Subject'] = Header(subject, 'utf-8') # 尝试发送邮件 try: # 创建SMTP对象 smtpObj = smtplib.SMTP() # 创建SMTP连接 smtpObj.connect(smtp_server, 25) # SMTP的端口号,一般为25 # 登录邮箱 smtpObj.login(from_addr, password) # 发送邮件 发送方 接收方 信息 smtpObj.sendmail(from_addr, to_addr, message.as_string()) print('邮件发送成功') except smtplib.SMTPException: print('Error:邮件发送失败')
发送的邮件如下:
1.4给邮件添加附件
发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送。
import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.header import Header # 第三方SMTP服务器地址: smtp_server = 'smtp.qq.com' # 输入Email地址和授权码: from_addr = 'w.yuling@qq.com' password = 'xxxxxxxxxxx' # 输入收件人地址: to_addr = 'weijiajian@wei.tax' # 创建一个带附件的实例 message = MIMEMultipart() # 定义发送人名字 message['From'] = Header('Python', 'utf-8') # 定义接收人的名字 message['To'] = Header('测试员', 'utf-8') # 定义邮件主题 subject = 'Python SMTP 带附件的邮件测试' message['Subject'] = Header(subject, 'utf-8') # 邮件正文: message.attach(MIMEText('这封邮件带了两个附件.....', 'plain', 'utf-8')) # 添加第一个附件,传送当前目录下的 abs_test.py 文件 att1 = MIMEText(open('abs_test.py').read(), 'base64', 'utf-8') att1["Content-Type"] = 'application/octet-stream' # 这里的filename可以任意写,写什么名字,邮件中显示什么名字 att1["Content-Disposition"] = 'attachment; filename="abs_test.py"' message.attach(att1) # 添加第二个附件 att2 = MIMEText(open('calc_test.py').read(), 'base64', 'utf-8') att2["Content-Type"] = 'application/octet-stream' # 这里的filename可以任意写,写什么名字,邮件中显示什么名字 att2["Content-Disposition"] = 'attachment; filename="calc.py"' message.attach(att2) # 尝试发送邮件 try: # 创建SMTP对象 smtpObj = smtplib.SMTP() # 创建SMTP连接 smtpObj.connect(smtp_server, 25) # SMTP的端口号,一般为25 # 登录邮箱 smtpObj.login(from_addr, password) # 发送邮件 发送方 接收方 信息 smtpObj.sendmail(from_addr, to_addr, message.as_string()) print('邮件发送成功') except smtplib.SMTPException: print('Error:邮件发送失败')
成功发送的邮件如下:
这篇关于Python-使用SMTP服务发送邮件的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门
- 2024-11-14Python编程入门指南
- 2024-11-13Python基础教程
- 2024-11-12Python编程基础指南
- 2024-11-12Python基础编程教程
- 2024-11-08Python编程基础与实践示例
- 2024-11-07Python编程基础指南
- 2024-11-06Python编程基础入门指南
- 2024-11-06怎么使用python 计算两个GPS的距离功能-icode9专业技术文章分享