import os
import smtplib
import traceback
from email.header import Header
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.utils import formataddr
from email.mime.application import MIMEApplication
# 发件人邮箱账号
my_sender = '
# user登录邮箱的用户名,password登录邮箱的密码(授权码,即客户端密码,非网页版登录密码),但用腾讯邮箱的登录密码也能登录成功
my_pass = ''
# 收件人邮箱账号
my_user = ''
def mail():
ret = True
try:
#要添加的附件
filePath = r"D:\pythonProject\Colgate差评明细清单(2021.12.13-2021.12.19).xlsx"
# 邮件内容
# 不带附件使用这个MIMEText('填写邮件内容测试', 'plain', 'utf-8'),带附件使用这个MIMEMultipart不加参数
msg = MIMEMultipart()
# 括号里的对应发件人邮箱昵称、发件人邮箱账号
msg['From'] = formataddr(["fangzheng@cyberway.net.cn", my_sender])
#处理多个收件人信息,list转字符串
# msg['To']=Header(",".join(my_user))
# 括号里的对应收件人邮箱昵称、收件人邮箱账号
msg['To'] = formataddr(["xx", my_user])
# 邮件的主题
msg['Subject'] = "测试成功"
# 邮件正文内容
msg.attach(MIMEText('邮件发送测试……', 'plain', 'gbk'))
#对附件进行封装
# 附件名称 要发两个表?附件有三个 正文2个
xlsxPart = MIMEText(open(filePath, 'rb').read(), '', 'gbk')
xlsxPart["Content-Type"] = 'application/octet-stream'
xlsxPart.add_header('Content-Disposition','attachment',filename=("gbk","", os.path.split(filePath)[-1]))
msg.attach(xlsxPart)
# SMTP服务器,腾讯企业邮箱端口是465,腾讯邮箱支持SSL(不强制), 不支持TLSc,
# qq邮箱smtp服务器地址:smtp.qq.com,端口号:456
# 163邮箱smtp服务器地址:smtp.163.com,端口号:25
server = smtplib.SMTP_SSL("smtp.exmail.qq.com", 465)
# 登录服务器,括号中对应的是发件人邮箱账号、邮箱密码
server.login(my_sender, my_pass)
# 发送邮件,括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
server.sendmail(my_sender, [my_user, ], msg.as_string())
# 关闭连接
server.quit()
# 如果 try 中的语句没有执行,则会执行下面的 ret=False
except Exception:
print(traceback.format_exc())
ret = False
return ret
ret = mail()
if ret:
print("邮件发送成功")
else:
print("邮件发送失败")