在Mac OS上用html打开默认的邮件应用程序
我试图在已经写好的电子邮件上启动Mac OS(和其他操作系统,但我只有Mac有问题)的默认邮件应用程序。电子邮件的正文包含HTML。在Mac OS上用html打开默认的邮件应用程序
body = "<span style='font-weight:bold'>Title : </span>{}</br> \
<span style='font-weight:bold'>Journal : </span>{}</br></br> \
<span style='font-weight:bold'>Abstract : </span></br></br>{}"
body = body.format(title, journal, abstract)
url = "mailto:?subject={}&body={}"
url = url.format(title, body)
if sys.platform=='win32':
os.startfile(url)
elif sys.platform=='darwin':
subprocess.Popen(['open', url])
else:
# Create an url to be opened with a mail client
try:
subprocess.Popen(['xdg-email', url])
except OSError:
self.l.error("shareByEmail: OSError")
在windows和linux上,此代码只是打开默认邮件应用程序,并填充所有字段。电子邮件已准备好发送,并且html标签不可见(标签正确转换为格式化文本)。
但在Mac OS上,电子邮件的正文是一个简单的文本,html标签完全可见(文本未格式化)。
这是邮件客户端的设置问题吗?它应该发生吗?我们可以在Mac OS上的电子邮件正文中编写HTML吗?
我不得不提到的几件事情:
我不会在我的电脑上测试代码(我不拥有一台Mac),所以我没有设置邮件应用自己
的Mac OS版本,我在测试代码是优山美地,邮件应用程序是默认的(未雷鸟)
我不能使用WebBrowser模块
你想要做什么不应该工作任何地方。
的mailto:
URL方案中RFC 6068定义,其表示:
特殊的“主体”表示相关的 是消息的主体中。 “正文”字段值旨在 包含 消息的第一个文本/普通正文部分的内容。 “body”伪头字段主要用于生成用于自动处理的短文本消息( 作为邮件列表的“订阅”消息),而不是用于一般MIME 机构。除了基于UTF-8和 百分比编码的字符编码之外,对于“主体”字段值不使用附加编码(例如,base64或 quoted-printable;参见[RFC2045])。因此,与'mailto'URI中的消息编码(例如, 内容传输编码)相关的头部字段是不相关的,并且必须被忽略。为了这个特殊目的,“body”伪头字段名称已经与IANA一起注册了 (见第8.2节)。
事实上,它恰好适用于您在Windows和Linux上设置的任何默认邮件程序,这意味着这些邮件程序正在做一些非标准的事情,您不应该依赖这一点。另外,将整个身体作为命令行参数传递(就像你在所有三个平台上进行的操作一样)可能会遇到命令行长度的限制,并且许多邮件程序将截断一个太长的mailto
,即使它没有受到伤害。
同时:
我们能写HTML在Mac OS的电子邮件的正文?
是的,但没有与mailto:
URL。例如,您可以使用AppleEvents编写处理“标准邮件套件”(当然包括Mail.app)的任何邮件程序。有关示例代码,请参阅SBSendEmail(在ObjC中,但使用ScriptingBridge,您可以从Python中类似地访问),这样做。
好的,谢谢你的回答。我知道我不能在mailto的主体中使用HTML。但我不想使用任何复杂的解决方案,如苹果脚本或任何其他。我会简化我的身体,这是一个更可接受的解决方案。我假设我仍然可以在mailto的正文字段中传递一个URL和几行纯文本,对吧? – Rififi
@Rififi:是的,只要“少”与你在这里的顺序相同,它就在'Mail.app'将从'mailto'中读取的限制以及OS X可以在命令行中适用的限制。 (如果你想让音乐变得更大,你需要查找所有相关版本的限制,或者针对所有相关版本进行测试,但这绝对够小。) – abarnert