python批量发送带附件邮件

自动化办公 同时被 2 个专栏收录
4 篇文章 0 订阅
1 篇文章 0 订阅

工作中常常碰到需要给不同的人发不同的附件,但是内容又相似的情况,比如给合作方发送账单,给员工发工资,用python的 email库,可以方便的发送邮件,参考了一些网上的资料,整理了一个批量发送邮件的python脚本

#分别发送给多个人,每个人的附件内容不一样
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header
from email.utils import formataddr
import smtplib
from pandas import DataFrame,Series
import pandas as pd
from_addr='****'#发件地址
password = '****'#邮箱授权码,非邮箱登录密码
cc_addr="****"  #抄送地址,其实抄送和发送是一样的,只不过显示的不一样

smtp_server = 'smtp.163.com'#假设是用163邮箱发送的
data=pd.read_excel("数据列表.xlsx",keep_default_na=False)#一张记录邮件地址的基本信息表

for i in range(len(data)):
    if data['邮件地址'][i]=="":#如果没有记录邮件地址,就略过
        continue
    to_addr= data['邮件地址'][i]
    
    msg = MIMEMultipart()#这个对象代表邮件本身
    #一下主要是显示在发件人,收件人,抄送人,标题,正文等的内容
    msg['From'] = formataddr((Header("发件人姓名","utf-8").encode(),from_addr))
    msg['To'] = formataddr((Header(data['姓名'][i],"utf-8").encode(),to_addr))
    msg['Cc'] = formataddr((Header('抄送人姓名',"utf-8").encode(),cc_addr))
    msg['Subject'] = Header('这是一封python邮件','utf-8').encode()
    mail_content='hi %s\n  hello,it is an email...,一二三'%data['姓名'][i] #正文
    msg_text = MIMEText(mail_content,'plain','utf-8')
    msg.attach(msg_text)   
    #mail_content = """<p>Python 邮件发送测试...</p><p><a href="http://www.sina.com">这是一个链接</a></p>"""  
    #msg_text = MIMEText(mail_content, 'html', 'utf-8'),正文也可以是这种带链接的形式
        
    try:
        with open(data['附件名称'][i],'rb') as f:
            fc=f.read()
        atta=MIMEText(fc,'base64','utf-8')    
        atta.add_header("Content-Disposition", "attachment", filename=("gbk","",data['附件名称'][i])) #这里我的名字是正文,视不同情况更改
        msg.attach(atta)
        server = smtplib.SMTP(smtp_server,25)#默认端口是25
        #server.set_debuglevel(1)#可以打印出和stamp服务器的交互信息
        
        #登录,然后发送
        server.login(from_addr,password)
        server.sendmail(from_addr,[to_addr,cc_addr],msg.as_string())
        server.quit()
        print("邮件已发送")
    except FileNotFoundError: 
        print("%s这个文件找到"%data['附件名称'][i])#附件未找到的不发;也可以只发正文,不发附件,要稍作调整                

邮件发送列表数据
以上内容还可再优化下,比如没有加密,正文还可更复杂一些,比如直接插入图片,直接插入表格,比如为保守起见,这些邮件先存在草稿箱,临发前再人工识别下

  • 2
    点赞
  • 0
    评论
  • 7
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 1024 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值