欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python利用stmp发邮件

程序员文章站 2024-03-18 13:57:40
...

python利用stmp发邮件

关键字:

  • SMTP:Simple Mail Transfer Protocol,相对简单的基于文本的协议
  • MIME:Multipurpose Internet Mail Extensions,多用途互联网邮件扩展协议

摘要:

  • python代码实现stmp发邮件;
  • 向多个收件人发送,带附件;
  • 本文使用的常用函数:(1) 列表拼接成字符串:','.join(list) ,用于将多个收件人拼接在一起存为收件人(展示在邮箱界面);(2)字符串切割成列表:string.split(',') ,用于将字符串重新展开为多个收件人(也可以直接将多个收件人填入相应区域);
  • 本文使用的库:(1) 发送邮件的库:import smtplib;(2) 邮件文本的库:from email.mime.text import MIMEText;(3) 邮件附件的库:from email.mime.multipart import MIMEMultipart

python利用stmp发邮件

邮箱设置客户端授权:

邮箱需要进行客户端授权,才能在python中使用SMTP发送邮件,过程:
(1) 邮箱界面设置按钮;
(2) 客户端授权密码按钮;
(3) 设置客户端授权码,选择开启
(4) 按弹出的对话框用绑定手机号发送短信;
(5) 我已发送按钮。

###在python中发送SMTP邮件步骤
(1) 导入库,如smtplib,文本库MIMEText,附件库MIMEMultipart;
(2) 设置邮箱服务器,发件人及授权密码,收件人(多人用英文逗号隔开);
(3) 创建能发附件的邮件对象;
(4) 设置在邮件页面的显示信息:文本信息(MIMEText)、邮件主题(subject)、发件人(可以是昵称)、收件人(多人逗号隔开);
(5) 设置附件路径,附件名;
(6) 发送过程:创建服务器(服务器及端口)、登录、发送、退出,显示发送成功与否。

  • 程序段展示:

# 发送邮件的库
import smtplib
# 邮件文本的库
from email.mime.text import MIMEText
# 邮件附件的库
from email.mime.multipart import MIMEMultipart

# 发送的服务器、发件人、授权密码、收件人(多个账号用','隔开)
SMTPServer = 'smtp.163.com'
sender = input('输入发件人邮箱: ')
passwd = input('输入发件人授权密码,不是登陆密码: ')
To = ['aaa@qq.com', 'aaa@qq.com']

# 构建能发附件的邮件对象
new_msg = MIMEMultipart()

# 设置发送的内容
message = '发送带附件邮件,无需回复'
new_msg.attach(MIMEText(message))
# 设置邮件的主题、发件人'昵称'、收件人(多个收件人用', '拼接)
new_msg['subject'] = '发送带一个附件的邮件给多人,代码见附件'
new_msg['From'] = sender
new_msg['To'] = ','.join(To)

# 设置附件路径,附件名
filepath = r'D:\Python\share\classmate\smtp163.py'
filename = filepath.rsplit('\\', 1)[1]
att = MIMEText(open(filepath, encoding='utf-8').read())
att['Content-Type'] = 'application/octet-stream'  # 请求体类型,只能发一个文件,二进制流
att['Content-Disposition'] = f'attachment; filename={filename}'  # 以附件方式下载;保存的文件名
new_msg.attach(att)

try:
    # 创建服务器:服务器  端口
    mailsever = smtplib.SMTP(SMTPServer, 25)
    # 登录自己的邮箱
    mailsever.login(sender, passwd)
    # 开始发送邮件
    mailsever.sendmail(sender, new_msg['To'].split(','), new_msg.as_string())  # 多个收件人用', '切割成列表
    # 退出服务器
    mailsever.quit()
    print("邮件发送成功")

except smtplib.SMTPException:
    print("Error: 无法发送邮件")

总结: