Python - 使用mailto打开默认邮件客户端,具有多个收件人

vic*_*ooi 5 python email

我正在尝试编写一个Python函数,使用默认安装的邮件客户端将电子邮件发送到用户列表.我想打开电子邮件客户端,并让用户有机会编辑用户列表或电子邮件正文.

我做了一些搜索,并根据这里:

http://www.sightspecific.com/~mosh/WWW_FAQ/multrec.html

显然违反了RFC规范,将多个以逗号分隔的收件人放在mailto链接中.然而,这就是其他人似乎都在这样做的方式.这个现代立场究竟是什么?

无论如何,我发现了以下两个网站:

这似乎建议使用urllib.parse(url.parse.quote为我)和webbrowser.open建议解决方案.

我尝试了第一个链接(2ality.blogspot.com)中的示例代码,并且工作正常,并打开了我的默认邮件客户端.但是,当我尝试在我自己的模块中使用代码时,似乎打开了我的默认浏览器,出于一些奇怪的原因.地址栏中没有有趣的文字,它只是打开浏览器.

email_incorrect_phone_numbers()函数位于Employees类中,该类包含Employee对象的字典(employee_dict),这些对象本身具有许多雇员属性(sn,givenName,mail等).完整的代码实际上在这里(Python - 将CSV转换为对象 - 代码设计)

from urllib.parse import quote
import webbrowser

....

    def email_incorrect_phone_numbers(self):
        email_list = []
        for employee in self.employee_dict.values():
            if not PhoneNumberFormats.standard_format.search(employee.telephoneNumber):
                print(employee.telephoneNumber, employee.sn, employee.givenName, employee.mail)
                email_list.append(employee.mail)
        recipients = ', '.join(email_list)
        webbrowser.open("mailto:%s?subject=%s&body=%s" %
                    (recipients, quote("testing"), quote('testing'))
                    )
Run Code Online (Sandbox Code Playgroud)

有什么建议?

干杯,维克多

Dav*_*d Z 3

好吧,既然你征求建议:忘记方案mailto:webbrowser,并使用 Python 的smtplib模块编写一个小型 SMTP 客户端。它是标准的,在所有系统上完全支持,并且文档中包含一个示例,您实际上可以从中复制和粘贴片段。

当然,如果您正在使用,smtplib则必须向用户询问要使用的 SMTP 服务器的详细信息(主机名和端口,可能还有登录名/密码)。诚然,这很不方便,所以我明白为什么您想要委托系统上的现有程序来处理电子邮件。问题是,没有独立于系统的方法可以做到这一点。即使该webbrowser模块也不是在所有地方都能工作;有些人使用的系统上的模块无法检测到默认(或任何)浏览器,即使可以检测到,当您提供链接时会发生什么mailto:完全取决于浏览器。

如果您不想或不能使用 SMTP,最好的选择可能是编写一个自定义模块,该模块能够在尽可能多的不同系统上检测并打开默认电子邮件客户端 - 基本上是该模块的功能webbrowser,除了用于电子邮件客户端而不是浏览器。在这种情况下,您需要确定您的用户安装了哪些类型的邮件客户端并确保您支持它们。如果你足够彻底,你可能会在 PyPI(Python 包索引)上发布你的模块,甚至可能将其包含在 Python 标准库的未来版本中 - 我确信有很多人会欣赏这样的东西那。