下载地址:http://m.pan38.com/download.php?code=TMZENR 提取码:3382
这个代码实现了一个完整的邮件批量发送工具,包含SMTP连接、邮件发送、批量处理等功能。使用时需要准备一个CSV格式的收件人列表文件(receivers.csv),包含name和email两列。代码中加入了发送间隔控制,避免被识别为垃圾邮件。
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import time
import csv
class EmailSender:
def init(self, smtp_server, smtp_port, sender_email, sender_password):
self.smtp_server = smtp_server
self.smtp_port = smtp_port
self.sender_email = sender_email
self.sender_password = sender_password
self.server = None
def connect(self):
try:
self.server = smtplib.SMTP_SSL(self.smtp_server, self.smtp_port)
self.server.login(self.sender_email, self.sender_password)
print("SMTP服务器连接成功")
return True
except Exception as e:
print(f"连接SMTP服务器失败: {str(e)}")
return False
def send_email(self, receiver, subject, content):
if not self.server:
print("未连接到SMTP服务器")
return False
try:
message = MIMEText(content, 'plain', 'utf-8')
message['From'] = Header(self.sender_email, 'utf-8')
message['To'] = Header(receiver, 'utf-8')
message['Subject'] = Header(subject, 'utf-8')
self.server.sendmail(self.sender_email, [receiver], message.as_string())
print(f"邮件发送成功: {receiver}")
return True
except Exception as e:
print(f"发送邮件失败({receiver}): {str(e)}")
return False
def batch_send(self, receiver_list, subject, content_template, delay=5):
success_count = 0
fail_count = 0
for i, receiver in enumerate(receiver_list):
personalized_content = content_template.replace("{name}", receiver['name'])
if self.send_email(receiver['email'], subject, personalized_content):
success_count += 1
else:
fail_count += 1
if i < len(receiver_list) - 1:
print(f"等待{delay}秒后发送下一封...")
time.sleep(delay)
print(f"\n发送完成: 成功{success_count}封, 失败{fail_count}封")
def disconnect(self):
if self.server:
self.server.quit()
print("已断开SMTP服务器连接")
def load_receivers_from_csv(file_path):
receivers = []
try:
with open(file_path, mode='r', encoding='utf-8') as file:
reader = csv.DictReader(file)
for row in reader:
receivers.append({
'name': row.get('name', ''),
'email': row.get('email', '')
})
return receivers
except Exception as e:
print(f"读取收件人列表失败: {str(e)}")
return []
if name == "main":
# 配置SMTP服务器信息
SMTP_SERVER = "smtp.example.com" # 替换为您的SMTP服务器
SMTP_PORT = 465 # 替换为您的SMTP端口
SENDER_EMAIL = "your_email@example.com" # 替换为您的发件邮箱
SENDER_PASSWORD = "your_password" # 替换为您的邮箱密码
# 创建邮件发送器实例
sender = EmailSender(SMTP_SERVER, SMTP_PORT, SENDER_EMAIL, SENDER_PASSWORD)
if sender.connect():
# 从CSV文件加载收件人列表
receivers = load_receivers_from_csv("receivers.csv")
if receivers:
# 邮件主题和内容模板
subject = "重要通知"
content_template = """尊敬的{name}:
这是一封测试邮件,请勿回复。
祝好!
发件人团队"""
# 批量发送邮件
sender.batch_send(receivers, subject, content_template, delay=5)
sender.disconnect()