多部分 E-Mail 丢失或损坏的附件

Multipart E-Mail missing or corrupt attachment

我使用以下代码发送带有 pdf 附件的 e-mail。对于大多数接收者来说,这没有任何问题,但有些客户端显示 pdf 已损坏或根本没有。因此,我认为可能有问题,大多数客户只是足够宽容,无论如何都能让它发挥作用。不幸的是,在这一点上我没有想法,因为我尝试了这么多 header 组合 - 都没有成功。 pdf 是 base64 编码的。

def sendMail(receiver, pdf):
    marker = "AUNIQUEMARKER"
    message = """Subject: The Subject
From: {sender}
To: {receiver}
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary={marker}
--{marker}
Content-Type: text/plain; charset="utf-8"

Text goes here.
--{marker}
Content-Type: application/pdf; name="{filename}"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename={filename}

{pdfcontent}
--{marker}--
""".format(marker=marker, sender="some@sender.com", receiver=receiver, filename="Test.pdf", pdfcontent=pdf)
    port = 587
    smtp_server = "some.server.com"
    context = ssl.create_default_context()
    with smtplib.SMTP(smtp_server, port) as server:
        server.starttls(context=context)
        server.login("user", "password")
        server.sendmail("some@sender.com", [receiver, "cc@sender.com"], message.encode())

如果相关,pdf 是通过 LaTex 创建的,如下所示

pdfl = PDFLaTeX.from_texfile('latex/test.tex')
pdf, log, completed_process = pdfl.create_pdf(keep_pdf_file=False, keep_log_file=False)
pdfBase64 = base64.b64encode(pdf).decode()

感谢您的帮助。

PS:当我从 Content-Type: multipart/alternative 切换到 multipart/mixed 时,根本不显示附件可能已修复。

好吧,显然 base64 块应该每 76 个字符包含一个换行符。就我而言,这意味着我必须从 base64.b64encode 切换到 base64.encodebytes,因为后者正是这样做的。