要通过Python给指定CSV表格中的联系人群发带附件的邮件,需要分为以下几个步骤:
- 从CSV文件中读取收件人邮箱和附件路径等信息。
- 登录SMTP服务器发送邮件。
- 将收件人信息、邮件内容和附件添加到邮件中。
- 发送邮件。
具体步骤和代码实现如下:
- 读取CSV文件中的收件人邮箱和附件路径
可以使用Python内置模块csv来读取CSV文件:
import csv
with open('recipients.csv', newline='') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
to_email = row['email']
attachment_path = row['attachment_path']
这里使用了csv.DictReader来读取CSV文件,并把每一行转化为一个字典。可以通过字典键来获取每个字段的值。
- 登录SMTP服务器发送邮件
在Python中,可以使用smtplib模块来实现SMTP客户端。使用SMTP客户端发送邮件的主要步骤如下:
- 连接SMTP服务器。
- 登录SMTP服务器。
- 发送邮件。
- 关闭SMTP连接。
示例代码:
import smtplib
# 连接SMTP服务器
smtp_server = 'smtp.example.com'
port = 587
smtp_obj = smtplib.SMTP(smtp_server, port)
smtp_obj.ehlo()
smtp_obj.starttls()
# 登录SMTP服务器
username = 'xxx@example.com'
password = 'xxx'
smtp_obj.login(username, password)
SMTP服务器的地址、端口号以及登录凭据需要根据实际情况进行配置。
- 将收件人信息、邮件内容和附件添加到邮件中
使用Python内置库email构建邮件,分别添加收件人、邮件正文、附件。
示例代码:
import os
from email import encoders
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
# 创建邮件对象
msg = MIMEMultipart()
# 添加收件人
to_email = 'user@example.com'
msg['To'] = to_email
# 添加邮件正文
body = '邮件正文'
msg.attach(MIMEText(body, 'plain'))
# 添加附件
attachment_path = 'example.pdf'
filename = os.path.basename(attachment_path)
with open(attachment_path, 'rb') as f:
attachment = MIMEBase('application', 'octet-stream')
attachment.set_payload(f.read())
encoders.encode_base64(attachment)
attachment.add_header('Content-Disposition', f'attachment; filename="{filename}"')
msg.attach(attachment)
- 发送邮件
调用SMTP对象的sendmail方法发送邮件。
示例代码:
# 发送邮件
smtp_obj.sendmail(username, to_email, msg.as_string())
# 关闭SMTP连接
smtp_obj.quit()
完整代码实例:
import csv
import smtplib
import os
from email import encoders
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
# 读取CSV文件中的收件人邮箱和附件路径
with open('recipients.csv', newline='') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
to_email = row['email']
attachment_path = row['attachment_path']
# 连接SMTP服务器
smtp_server = 'smtp.example.com'
port = 587
smtp_obj = smtplib.SMTP(smtp_server, port)
smtp_obj.ehlo()
smtp_obj.starttls()
# 登录SMTP服务器
username = 'xxx@example.com'
password = 'xxx'
smtp_obj.login(username, password)
# 创建邮件对象
msg = MIMEMultipart()
# 添加收件人
msg['To'] = to_email
# 添加邮件正文
body = '邮件正文'
msg.attach(MIMEText(body, 'plain'))
# 添加附件
filename = os.path.basename(attachment_path)
with open(attachment_path, 'rb') as f:
attachment = MIMEBase('application', 'octet-stream')
attachment.set_payload(f.read())
encoders.encode_base64(attachment)
attachment.add_header('Content-Disposition', f'attachment; filename="{filename}"')
msg.attach(attachment)
# 发送邮件
smtp_obj.sendmail(username, to_email, msg.as_string())
# 关闭SMTP连接
smtp_obj.quit()
另外可以参考下面的代码库:
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python给指定csv表格中的联系人群发邮件(带附件的邮件) - Python技术站