Python发送邮件:将URL列表嵌入正文而非附件的实现问题
解决邮件正文显示URL列表而非附件的问题
嘿,我懂你遇到的麻烦了——用multipart.MIMEMultipart('mixed')发邮件时,本来想把URL列表直接放在正文里,结果它们变成附件了对吧?这是因为mixed类型的MIMEMultipart是专门用来区分正文内容和附件的,如果你之前的代码把URL内容当成附件对象来添加,就会出现这个问题。下面给你两种解决方案,按需选择:
方案1:不需要附件时,直接用纯文本正文
如果你的邮件不需要带任何附件,其实完全可以不用MIMEMultipart,直接用MIMEText构造邮件就行,代码更简洁:
import smtplib from email.mime.text import MIMEText BADURL = ['abc.123.com','xyz.456.com','rtf.892.com'] # 把URL列表拼接成你想要的正文格式 url_content = " ".join(BADURL) email_body = f"以下是不良URL:{url_content}" # 创建纯文本邮件对象 msg = MIMEText(email_body, 'plain', 'utf-8') msg['Subject'] = '不良URL列表通知' msg['From'] = '你的邮箱@example.com' msg['To'] = '收件人邮箱@example.com' # 发送邮件 with smtplib.SMTP('你的SMTP服务器地址', 587) as server: server.starttls() server.login('你的邮箱@example.com', '邮箱授权码/密码') server.send_message(msg)
方案2:需要带附件时,正确区分正文和附件
如果你的邮件确实需要附带其他文件,那还是要用MIMEMultipart,但要注意先添加正文部分,再添加附件,而且正文必须是MIMEText对象:
import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.base import MIMEBase from email import encoders BADURL = ['abc.123.com','xyz.456.com','rtf.892.com'] url_content = " ".join(BADURL) email_body = f"以下是不良URL:{url_content}" # 创建mixed类型的邮件对象(支持正文+附件) msg = MIMEMultipart('mixed') msg['Subject'] = '不良URL列表及相关附件' msg['From'] = '你的邮箱@example.com' msg['To'] = '收件人邮箱@example.com' # 第一步:添加正文部分 text_part = MIMEText(email_body, 'plain', 'utf-8') msg.attach(text_part) # 第二步:添加附件(示例为添加本地文件) attachment_path = '需要发送的文件.txt' with open(attachment_path, 'rb') as attachment: # 创建附件对象 part = MIMEBase('application', 'octet-stream') part.set_payload(attachment.read()) encoders.encode_base64(part) # 设置附件的文件名和格式 part.add_header('Content-Disposition', f"attachment; filename= {attachment_path.split('/')[-1]}") msg.attach(part) # 发送邮件 with smtplib.SMTP('你的SMTP服务器地址', 587) as server: server.starttls() server.login('你的邮箱@example.com', '邮箱授权码/密码') server.send_message(msg)
关键注意点
你之前的错误大概率是没有把URL内容包装成MIMEText对象,而是直接把URL字符串当成附件来处理了。记住:
- 邮件正文必须是
MIMEText(或MIMEMultipart里的子部分) MIMEMultipart('mixed')下,只有明确标记为附件的部分才会被当作附件,正文部分要先attach进去
内容的提问来源于stack exchange,提问作者newbie
相关产品推荐
相关产品推荐

