如何正确向MIMEText传递多个变量以生成纯文本邮件?
解决MIMEText传递多个变量作为邮件正文的问题
嘿,我明白你现在的困扰了——想把多个变量组合成纯文本邮件正文,结果直接给MIMEText传多个参数完全行不通对吧?问题出在MIMEText的构造逻辑上:它的第一个参数需要的是完整的文本字符串,而不是把变量一个个分开传,后面的参数是用来指定内容类型(比如纯文本plain)和编码的,不是用来传你要的cin、dn这些变量的。
错误原因分析
你写的msg = MIMEText(cid, cin...)是典型的用法错误,MIMEText的签名是MIMEText(_text, _subtype='plain', _charset=None),第二个参数是子类型(默认plain),第三个是编码,不是用来传你要的业务变量的。
正确的解决方法
先把所有需要的变量拼接成一个格式清晰的字符串,再把这个字符串传给MIMEText就行。推荐用Python的f-string来做格式化,排版起来很方便。
修改后的完整代码示例:
import cgi from datetime import datetime import smtplib from email.mime.text import MIMEText # 获取表单参数 arguments = cgi.FieldStorage() cid = arguments.getvalue('cid') or '未获取到CID' # 处理空值,避免出现None cin = arguments.getvalue('cin') or '未获取到CIN' dn = arguments.getvalue('dn') or '未获取到DN' sttime = datetime.now().strftime('%m/%d/%Y_%H:%M:%S') # 拼接邮件正文:用f-string把变量按需求排版 email_content = f""" 以下是提交的信息: CID: {cid} CIN: {cin} DN: {dn} 提交时间: {sttime} """ # 正确初始化MIMEText:传入完整的正文字符串,指定类型和编码 msg = MIMEText(email_content, 'plain', 'utf-8') # 补充邮件必要信息(示例) msg['Subject'] = '提交信息通知' msg['From'] = 'your_email@example.com' msg['To'] = 'recipient@example.com' # 发送邮件的示例代码 with smtplib.SMTP('smtp.example.com', 587) as server: server.starttls() server.login('your_email@example.com', 'your_password') server.send_message(msg)
几个实用小贴士
- 给每个变量加上说明文字,让邮件正文可读性更强,比如
CID: {cid}而不是只放变量值 - 用
or处理变量为空的情况,避免邮件里出现None这种不友好的内容 - 指定编码为
utf-8,防止中文或特殊字符出现乱码问题
内容的提问来源于stack exchange,提问作者djabe
相关产品推荐
相关产品推荐

