如何用Python结合win32com通过for循环发送个性化邮件?
实现Python批量个性化邮件发送
你的现有代码已经能完成批量发送邮件的基础功能,要实现邮件内容的个性化(比如替换称呼为收件人姓名),只需要调整循环逻辑,同时获取收件人的姓名和邮箱信息,再将姓名插入到邮件内容中即可。
核心修改点
- 不要只遍历邮箱列,改为遍历DataFrame的每一行,这样能同时拿到姓名和邮箱
- 将Outlook实例化操作移到循环外,避免重复创建客户端,提升效率
- 使用字符串格式化将收件人姓名插入到邮件正文的对应位置
修改后的完整代码
import win32com.client as win32 import pandas as pd df = pd.read_excel("test_emails.xlsx") # 仅初始化一次Outlook客户端 outlook = win32.Dispatch('outlook.application') # 遍历DataFrame的每一行,获取姓名和邮箱 for _, row in df.iterrows(): # 提取当前行的姓名和邮箱 first_name = row['first_name'] last_name = row['Last_name'] recipient_email = row['email'] # 创建邮件 mail = outlook.CreateItem(0) mail.Subject = 'Test email' mail.To = recipient_email # 用f-string实现个性化称呼,可根据需求调整为仅名字或全名 mail.HTMLBody = f""" Dear {first_name} {last_name},<br><br> This is a test email. """ # 如果只需要称呼名字,可替换为: # mail.HTMLBody = f""" # Dear {first_name},<br><br> # This is a test email. # """ mail.Send()
关键说明
df.iterrows()会返回每一行的索引和行数据,这里用_忽略索引,直接用row获取行内字段- f-string是Python中简洁的字符串格式化方式,能直接将变量嵌入到字符串中
- 若你的Python版本低于3.6,可改用
.format()方法:mail.HTMLBody = """ Dear {} {},<br><br> This is a test email. """.format(first_name, last_name)
内容的提问来源于stack exchange,提问作者dom_2108
相关产品推荐
相关产品推荐

