python smtp 自动发送带excel附件的邮件

一、准备工作

使用第三方SMTP服务,首先需要开启相应邮箱的SMTP服务,并生成口令或授权码。(参考:腾讯企业邮箱怎样获取16位授权密码)

1、腾讯企业邮箱

smtp服务器地址:smtp.exmail.qq.com,端口号:25
2、qq邮箱

smtp服务器地址:smtp.qq.com, 端口号:456
3、163邮箱

smtp服务器地址:smtp.163.com,端口号:25

二、代码实现

1、思路

一、导入需要的包

二、提前设置信息

smtp发件服务器地址、用户名(带邮件后缀)、16位口令或授权码;

发收件人邮箱、收件人邮箱列表;

主题-字符串对象、正文内容-字符串对象;

附件文件的路径、附件文件的名称。

2、具体过程

# 一、导入需要的包
import smtplib
from email.mime.multipart import MIMEMultipart  # 发送带附件的邮件,首先要创建MIMEMultipart()实例
from email.mime.text import MIMEText            # html格式和文本格式邮件
from email.mime.application import MIMEApplication # 被用来表示主要类型的MIME消息对象应用 ???
from email.header import Header


# 二、提前设置信息
mail_host = "smtp.exmail.qq.com"   # 这里我用的是腾讯企业邮箱。
mail_user = "XXX@hkaspire.cn"      # 用户名
mail_pass = "VNiUx8PKH3rFNfJS"     # 口令,参考:腾讯企业邮箱怎样获取16位授权密码。
 
sender = 'XXX@hkaspire.cn'                # 发件人的邮箱-字符串
receivers = ['fXXdXXXfXfXXX@hkaspire.cn', # 收件人的邮箱-字符串列表                        
#              'bb@hkaspire.cn',    
#              'cc@hkaspire.cn',       
             'XXXXX@hkaspire.cn']

print(now_my)
subject =  '8月XXXXXXXXXXX订单_at{}'.format(now_my)                  # 主题-字符串对象
mainText = '附件为,8月XXXXXXXXXXX订单_at{},请查收。'.format(now_my)  # 正文-字符串对象
fpath = r"F:\XXXXXXXXXXXXXXXXXXXXXXXXXXX\\"      # 附件文件的路径
fname = '8月XXXXXXXXXXX订单_at%s.xlsx'%now_my     # 附件文件的名称


# 三、定义函数
def mySendEmail():
    # 1、实例化【message对象】
    message = MIMEMultipart()

    # 2、【message对象】的属性:发件人名称、收件人名称、主题
    message['From'] = sender            # 一般直接使用发件人邮箱
    message['To'] = ','.join(receivers) # 用“,”将列表中的元素,拼接为一个大字符串,比如:'aa,bb,cc,dd'
    message['Subject'] = Header(subject, 'utf-8')

    # 3、【message对象】的方法:正文内容
    content = MIMEText(mainText)
    message.attach(content)

    # 3、【message对象】的方法:附件文件
    xlsx = MIMEApplication(open(fpath+fname, 'rb').read())  # 打开Excel,读取Excel文件
    xlsx["Content-Type"] = 'application/octet-stream'       # 设置内容类型
    xlsx.add_header('Content-Disposition', 'attachment', filename=fname) # ?
    message.attach(xlsx)

    # 4、发送邮件
    try:
        smtpObj = smtplib.SMTP()
        smtpObj.connect(mail_host, 25)  # 25为SMTP端口号
        smtpObj.login(mail_user, mail_pass)
        smtpObj.sendmail(sender, receivers, message.as_string())
        print("邮件发送成功")
    except Exception as e:
        print(e)
        print("邮件发送失败......")


# 四、调用函数
mySendEmail()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值