多部分 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
,因为后者正是这样做的。
我使用以下代码发送带有 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
,因为后者正是这样做的。