You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:57:00