python3使用smtplib发送邮件,带xlsx附件

本文介绍了一种使用Python发送带有附件的电子邮件的方法。通过smtplib和email.mime模块,实现了一个SendMail类,该类可以将指定的文件作为附件发送到指定的邮箱。文章详细解释了如何设置邮件服务器、登录账户、创建邮件实例并附加文件。

一、概述

最近在做一个统计报表,需要发送邮件,并带附件的。

在之前的文章中

https://www.cnblogs.com/xiao987334176/p/10022026.html

已经实现了发送邮件,但是没有实现发送附件功能。

 

二、正式代码

#!/usr/bin/env python3
# coding: utf-8


import smtplib  # 加载smtplib模块
from email.mime.text import MIMEText
from email.utils import formataddr
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication

class SendMail(object):
    def __init__(self,sender,title,content):
        self.sender = sender  #发送地址
        self.title = title  # 标题
        self.content = content  # 发送内容
        self.sys_sender = '123456@163.com'  # 系统账户
        self.sys_pwd = '123456'  # 系统账户密码

    def send(self,file_list):
        """
        发送邮件
        :param file_list: 附件文件列表
        :return: bool
        """
        try:
            # 创建一个带附件的实例
            msg = MIMEMultipart()
            # 发件人格式
            msg['From'] = formataddr(["技术服务部", self.sys_sender])
            # 收件人格式
            msg['To'] = formataddr(["", self.sender])
            # 邮件主题
            msg['Subject'] = self.title

            # 邮件正文内容
            msg.attach(MIMEText(self.content, 'plain', 'utf-8'))

            # 多个附件
            for file_name in file_list:
                print("file_name",file_name)
                # 构造附件
                xlsxpart = MIMEApplication(open(file_name, 'rb').read())
                # filename表示邮件中显示的附件名
                xlsxpart.add_header('Content-Disposition','attachment',filename = '%s'%file_name)
                msg.attach(xlsxpart)

            # SMTP服务器
            server = smtplib.SMTP_SSL("smtp.163.com", 465,timeout=10)
            # 登录账户
            server.login(self.sys_sender, self.sys_pwd)
            # 发送邮件
            server.sendmail(self.sys_sender, [self.sender, ], msg.as_string())
            # 退出账户
            server.quit()
            return True
        except Exception as e:
            print(e)
            return False

if __name__ == '__main__':
    # 发送地址
    sender = "88888888@qq.com"
    # 标题
    title = "统计"
    # 发送内容
    content = "2019-11-01 ~ 2019-11-30 统计,见附件!"
    # 附件列表
    file_list = ["工作.xls","外出.xls"]
    ret = SendMail(sender, title, content).send(file_list)
    print(ret,type(ret))

 

注意:附件是和python文件在同一目录,请根据实际情况,修改附件的路径。

阿里云服务器,从即日起,不再提供25端口邮件服务 。必须使用SSL加密465端口发信!

所以上面的代码中,改成了SMTP_SSL,并使用了465端口。

 

执行脚本,查看邮件,效果如下:

本文参考链接:

https://blog.youkuaiyun.com/sempronx86/article/details/83753689

 

为了实现通过Python发送Excel附件邮件,可以组合使用`email`库来构建邮件结构以及`smtplib`来进行邮件传输。下面是一个具体的例子: ```python import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.base import MIMEBase from email import encoders def send_email_with_excel_attachment(sender_address, sender_pass, receiver_address, subject, body, excel_path): message = MIMEMultipart() message['From'] = sender_address message['To'] = receiver_address message['Subject'] = subject # 添加邮件正文 message.attach(MIMEText(body, 'plain')) # 打开文件并设置为MIME应用/八位字节流对象 with open(excel_path, "rb") as attachment: part = MIMEBase('application', 'octet-stream') part.set_payload(attachment.read()) encoders.encode_base64(part) part.add_header( 'Content-Disposition', f'attachment; filename= {excel_path}', ) message.attach(part) session = smtplib.SMTP('smtp.gmail.com', 587) # 使用Gmail作为SMTP服务器为例 session.starttls() # 启用TLS加密 session.login(sender_address, sender_pass) # 登录发件箱 text = message.as_string() session.sendmail(sender_address, receiver_address, text) session.quit() send_email_with_excel_attachment("your_email@gmail.com", "password", "receiver@example.com", "Test Subject", "This is test mail.", "/path/to/excel/file.xlsx") ``` 此代码片段展示了创建一个多部分消息体,其中一部分是纯文本形式的邮件主体,另一部分则是以二进制方式读取的Excel文件,并将其编码成base64格式附加到邮件中[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值