Python批量邮件应用字符串格式化问题求助:无法插入用户名
你的批量邮件代码问题分析与修复方案
嘿,我一眼就发现问题所在啦!你当前的代码逻辑顺序搞反了,导致函数里的姓名根本没用到邮件正文里。
问题根源
你在函数外面就用空的first_name(值是空格字符串)提前格式化了body,之后把这个已经固定好的字符串传给函数。而函数内部定义的first_name = 'mike'是局部变量,和已经生成的body完全没关系,自然没法替换正文里的占位符,所以输出才会显示Dear ,。
修复方案
要实现“给不同姓名的人发送定制邮件”,你需要把姓名参数传入函数,并在函数内部完成邮件正文的格式化。这里给你两种实用的写法:
1. 基础单姓名调用
把姓名作为参数传给函数,在函数内生成定制化的正文:
def send_test_email(first_name): # 将邮件模板放在函数内部,每次调用用传入的姓名填充 body = """Dear {}, Here is new email. Thanks. Mike""".format(first_name) print(body) # 实际项目中替换成你的发送邮件逻辑 # 调用时传入具体姓名 send_test_email('Mike')
2. 批量处理姓名列表
如果要给列表里的所有人发邮件,只需要遍历列表,逐个调用函数即可:
# 待发送的姓名列表 name_list = ['Alice', 'Bob', 'Charlie', 'Mike'] def send_test_email(first_name): body = """Dear {}, Here is new email. Thanks. Mike""".format(first_name) print(body) # 替换成实际发送邮件的代码 # 批量遍历发送 for name in name_list: send_test_email(name)
额外提示
如果你的邮件模板很长,也可以把模板定义成全局变量,然后在函数里用传入的姓名格式化它,比如:
# 全局邮件模板 EMAIL_TEMPLATE = """Dear {}, Here is new email. Thanks. Mike""" def send_test_email(first_name): body = EMAIL_TEMPLATE.format(first_name) print(body) send_test_email('Mike')
这样既保持模板的复用性,又能确保每次都用正确的姓名生成正文~
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

