- 邮件批量发送
import os
import sys
import csv
import smtplib
import pandas as pd
import numpy as np
from email.mime.base import MIMEBase
from email.mime.image import MIMEImage
from email.utils import formataddr
from email import encoders
import time,datetime
import smtplib
import email.mime.multipart
import email.mime.text
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.header import Header
def get_current_date():
"""获取当前时间"""
return str(time.strftime('%Y%m%d'))
def getAddrBook(addrBook):
'''
@作用:根据输入的CSV文件,形成相应的通讯录字典
@返回:字典类型,name为人名,value为对应的邮件地址
'''
with open(addrBook,'r',encoding='UTF-8') as addrFile:
#将文件名和邮件接收人邮箱地址分行存放在csv文件中,用逗号分隔
reader = csv.reader(addrFile)
name = []
value = []
for row in reader:
name.append(row[0])
value.append(row[1])
addrs = dict(zip(name, value))
return addrs
def send_email(inputpath,smtpHost,port,sendAddr,password,recipientAddrs, subject, content,attachfilename):
"""定义并配置好发邮件的函数"""
msg = email.mime.multipart.MIMEMultipart()
msg['from'] =sendAddr #发件人
msg['to'] =recipientAddrs #接收人
# msg['cc'] =cc_name #抄送人名称
msg['subject'] =subject #主题
content=content
txt = email.mime.text.MIMEText(content, 'plain', 'UTF-8')
msg.attach(txt)
print("准备添加附件...")
inputfile=inputpath+attachfilename #文件路径
part = MIMEText(open(inputfile,'rb').read(),'base64', 'utf-8')
part["Content-Type"] = 'application/octet-stream'
part.add_header('Content-Disposition', 'attachment', filename=Header(attachfilename,'utf-8').encode())
msg.attach(part)
smtp = smtplib.SMTP_SSL(smtpHost, port)
smtp.login(sendAddr, password)
smtp.sendmail(sendAddr, recipientAddrs.split(','), str(msg)) #+cc_name.split(',')
#print("发送成功!")
smtp.quit()
if __name__=='__main__':
#这里需要定义send_email函数中传入的所有变量
inputpath = "r'D:/" #数据存放的文件路径(这里是绝对路径)
smtpHost = 'smtp.exmail.qq.com' # 默认服务器地址及端口
port=465
sendAddr ="" #自己也就是发件人的邮箱账号
password = "" #自己的邮箱密码
subject=" "+current_date #主题+当前日期
content='''附件为测试文件'''+current_date# 正文内容+当前日期
addrBook=r'D:\邮箱联系人表单.csv' #联系人表单文件路径
addrs=getAddrBook(addrBook)
for i in addrs:
attachfilename=i+'.xlsx' #将要发送的文件添加为附件
recipientAddrs=addrs[i] #接收人的邮箱地址
result = os.path.exists(inputpath+i+'.xlsx') #判断当前目录是否存在该文件
if result:
#存在就执行邮件
send_email(inputpath,smtpHost,port,sendAddr,password,recipientAddrs,subject,content,attachfilename)
print (('发给 %s 的邮件执行成功') %(recipientAddrs))
这里也看到有使用126邮箱的smtp服务器:'smtp.126.com'
https://blog.csdn.net/weixin_42350212/article/details/118751583
Python smtp发送邮件怎么设置抄送人
https://www.cnblogs.com/shiyixirui/p/14692146.html