我试图使用smtplib
中的smtplib
发送XML内容。在
以下是我的代码:
#!/usr/bin/python
import smtplib
import os
fromAddress = "adipratapsingh.aps@gmail.com"
toAddress = "adirameshwarsingh.ars@gmail.com"
msg = "From: Aditya Thakur<"+fromAddress+">\r\n"
msg = msg + "To: Aditya Singh<"+toAddress+">\r\n"
msg = msg + "Reply-To: Aditya Thakur<"+fromAddress+">\r\n"
msg = msg + "Content-Type: text/xml\r\n"
msg = msg + "Subject: Python mail\r\n"
msg = msg + "\r\n"
msg = msg + """
<xml version="1.0" encoding="utf-8">
<Name>
<Firstname>Aditya</Firstname>
<Middlename>Rameshwarpratap</Middlename>
<Lastname>Singh</Lastname>
</Name>
"""
server = smtplib.SMTP("smtp.gmail.com:587")
server.starttls()
server.login(fromAddress, os.getenv("GMAIL_APP_PASSWORD"))
server.sendmail(fromAddress, toAddress, msg)
server.quit()
这段代码可以很好地处理普通的文本邮件和HTML邮件。我还可以向客户机发送XML内容。在
但问题是,这个XMl内容是以文件(附件)的形式发送的,名为“noname”,我无法为其指定任何文件名。它的名字是“noname”,没有任何扩展名。因此,我的客户甚至无法在不将其重命名为“的情况下查看它。”非名称.xml". 有什么方法可以为我发送的XML文件指定一个名称吗?在
第二,当我的客户将文件重命名为“非名称.xml,浏览器中会弹出一个错误
^{pr2}$为什么?在
注意:我只想使用smtplib
而不使用其他任何东西。在
这是个有趣的问题。您的邮件正是您想要发送的内容,以XML数据为主体,并且是完全正确的(只有在邮件头后面多出一行空行)。如果您使用了来自
smtpd
模块的DebuggingServer
,那么您可以控制它被发送为:但问题是邮件阅读器通常只处理纯文本(dynosaurs只使用这种格式)或HTML文本或附件的多部分。所以在这里,你的客户的邮件阅读器错误地将身体声明为一个附件,因为它找不到名字,所以说它是noname。在
你可以建议你的客户使用一个更好的阅读器,严格遵守标准(我绝不会这么做!)或者使用标准Python库中的
email
模块构建一条大多数读者都能理解的消息:一条纯文本介绍消息,以及作为附件连接的XML文件。在关于客户机为什么不能打开XML文件的问题,这仅仅是因为第一行是错误的。正确的行应该有
^{pr2}$?
:所以您需要手工构建一个包含附加XML文件的邮件。使用
email
模块会更简单,但是由于XML文件只是一个文本文件,所以可以避免使用base64编码。您必须:正如我已经说过的,
email
Python模块可以为您做到这一点,但是您也可以手动完成这项工作,前提是您将Content-Transfert-Encoding
强制为8位以避免任何base64编码。代码变成:相关问题 更多 >
编程相关推荐