python批量发送带附件邮件

    技术2026-06-21  7

    工作中常常碰到需要给不同的人发不同的附件,但是内容又相似的情况,比如给合作方发送账单,给员工发工资,用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])#附件未找到的不发;也可以只发正文,不发附件,要稍作调整

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

    Processed: 0.011, SQL: 10