首页 > 解决方案 > 使用 SMTP 发送附件时正文/文本为空

问题描述

如果使用 smtplib 有任何附件,我无法通过电子邮件发送任何文本或 html 正文。如果没有传递附件,则正文可见/不为空。

我尝试使用MIMEMultipart('alternative'),发送文本作为msg.attach(MIMEText(kwargs.get('text'), 'plain'))发送正文msg.attach(MIMEText(body))和附件作为msg.attach(MIMEApplication(fil.read(),Content_Disposition='attachment; filename="%s"' % basename(f),Name=basename(f)))

守则如下 -

    msg = MIMEMultipart('alternative')
    author = formataddr((str(Header(header)), sender))
    msg['From'] = author
    msg['To'] = ','.join(receiver)
    msg['Subject'] = subject

    if "reply_to" in kwargs and kwargs["reply_to"]:
        msg['Reply-to'] = kwargs["reply_to"]

    if 'Bcc' in kwargs:
        if not isinstance(kwargs['Bcc'], list):
            kwargs['Bcc'] = [kwargs['Bcc']]
        receiver = receiver + kwargs['Bcc']
        msg['Bcc'] = ','.join(kwargs['Bcc'])

    if 'Cc' in kwargs:
        if not isinstance(kwargs['Cc'], list):
            kwargs['Cc'] = [kwargs['Cc']]
        receiver = receiver + kwargs['Cc']
        msg['Cc'] = ','.join(kwargs['Cc'])

    if 'text' in kwargs:
        msg.attach(MIMEText(kwargs.get('text'), 'plain'))

    if body != []:
        if 'mime_only' in kwargs and kwargs['mime_only']:
            msg.attach(MIMEText(body))
        else:
            msg.attach(MIMEText(body, 'html'))

    if 'files' in kwargs:
        files = kwargs['files']
        for f in files:
            with open(f, "rb") as fil:
                msg.attach(MIMEApplication(
                    fil.read(),
                    Content_Disposition='attachment; filename="%s"' % basename(f),
                    Name=basename(f)
                ))

所有部分都在单独工作,即 - 我能够发送文本电子邮件、html 电子邮件和附件,但不能发送 HTML 或带有附件的文本。

我注意到的一件事是,当我在 gmail 上收到邮件时,它确实会在我点击邮件(在通知/摘要中)之前显示正文内容,但是当我点击或打开它时正文不存在。

标签: pythonpython-3.xsmtpsmtplib

解决方案


推荐阅读