【问题标题】:Open the default Mail app with html on Mac OS在 Mac OS 上使用 html 打开默认的邮件应用程序
【发布时间】:2015-05-04 09:57:32
【问题描述】:

我正在尝试在 Mac OS(和其他 OS,但我只在 Mac 上遇到问题)上启动默认邮件应用程序,并且已经编写了一封电子邮件。电子邮件的正文包含 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 版本是 Yosemite,邮件 App 是默认的(不是 Thunderbird)

  • 我无法使用网络浏览器模块

【问题讨论】:

    标签: python html macos email


    【解决方案1】:

    你正在尝试做的事情不应该任何地方工作。

    mailto: URL 方案在RFC 6068 中定义,它表示:

    特殊的“body”表示关联的 是消息的正文。 “body”字段值旨在 包含第一个文本/纯正文部分的内容 信息。 “body”伪标头字段主要用于 生成用于自动处理的短文本消息(例如 作为邮件列表的“订阅”消息),不适用于一般 MIME 身体。除了基于 UTF-8 的字符编码和 百分比编码,没有额外的编码(例如 base64 或 引用可打印;请参阅 [RFC2045])用于“body”字段值。 因此,与消息编码相关的标头字段(例如, 'mailto' URI 中的 Content-Transfer-Encoding)是不相关的,必须 被忽略。 “body”伪头域名称已注册 出于此特殊目的与 IANA 合作(请参阅第 8.2 节)。

    事实上,它恰好适用于您在 Windows 和 Linux 上设置的任何默认邮件程序,这意味着这些邮件程序正在做一些非标准的事情,您不应该依赖它。

    此外,将整个正文作为命令行参数传递(就像您在所有三个平台上所做的那样)可能会遇到命令行长度的限制,并且许多邮件程序甚至会截断太长的 mailto如果它没有触及他们。

    同时:

    我们可以在 Mac OS 上的电子邮件正文中编写 HTML 吗?

    是的,但不是mailto: URL。例如,您可以使用 AppleEvents 编写任何处理“标准邮件套件”(当然包括 Mail.app)的邮件程序的脚本。请参阅SBSendEmail 以获取一些这样做的示例代码(在 ObjC 中,但使用 ScriptingBridge,您可以类似地从 Python 访问)。

    【讨论】:

    • 好的,感谢您的回答。我知道我不能在 mailto 的正文中使用 HTML。但我不想使用任何复杂的解决方案,如苹果脚本或其他任何东西。我会简化我的身体,这是一个更容易接受的解决方案。我假设我仍然可以在 mailto 的正文字段中传递一个 URL 和几行纯文本,对吧?
    • @Rififi:是的,只要“很少”在你这里的顺序上,它就在Mail.app 将从mailto 读取的内容以及 OS X 可以适合命令行。 (如果你想太大更大,你要么需要查找所有相关版本的限制,要么针对所有版本进行测试,但这绝对足够小。)跨度>
    猜你喜欢
    • 2010-09-30
    • 1970-01-01
    • 2012-04-17
    • 2018-12-08
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    相关资源
    最近更新 更多