多部分电子邮件附件丢失或损坏



我使用以下代码发送带有pdf附件的电子邮件。对于大多数接收者来说,这没有任何问题,但一些客户端显示pdf已损坏或根本没有。因此,我认为可能是出了问题,大多数客户都足够宽容,无论如何都能让它发挥作用。不幸的是,在这一点上,我没有主意,因为我尝试了太多的头球组合,但都没有成功。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,因为后者正是这样做的。

相关内容

最新更新