在 Python 中使用高级 mailto

Advanced mailto use in Python

我正在尝试在 Python 中发送带有自定义收件人、主题和正文的电子邮件。 这意味着我不想使用 Python's smtp packages, but something like webbrowser 因为我需要它来打开带有所述参数的默认电子邮件客户端(在我的例子中是 Thunderbird)。

import webbrowser
webbrowser.open("mailto:?to=aaa@email.com&subject=mysubject", new=1)

有效,但我需要它从我之前找到的字符串中获取收件人,并从我之前创建的文本文件中获取正文。

有什么 "simple" 我找不到的方法吗? 提前致谢。

使用字符串连接。

recipient = 'aaa@email.com'
subject = 'mysubject'
body = 'This is a message'
webbrowser.open("mailto:?to='+ recipient + '&subject=' + subject + "&body=" + body, new=1)

我使用变量 recipientsubject 来存储相对值。只需将单引号之间的示例文本替换为您的实际值。

recipient = 'emailaddress'
subject = 'mysubject'

主题字段不能包含白色 space,因此它们必须 url 使用 %20 ASCII 码

编码
subject = subject.replace(' ', '%20')

上面的函数将白色的 space 替换为“%20”并将修改后的主题分配给同一个变量,因为您可以重复使用它,在这种情况下您真的不需要另一个。

也可以使用 urllib 模块进行 url 编码(参见 urllib.urlencode() 方法),但它可以简单地使用 replace() 方法来完成,这样你就可以避免为此导入另一个模块。

现在您需要从文本文件加载文本并将其存储在变量中。 假设您有一个名为 body.txt:

的文本文件
with open('body.txt', 'r') as b:
    body = b.read()

请注意,我假设 body.txt 与您的 Python 脚本位于同一目录中,否则在文件名参数中您必须包含完整的绝对值或文件的相对路径,后跟文件名。

我使用了 open() 函数并提供了 2 个参数:第一个是 filename,第二个是打开文件的模式。您想阅读该文件,因此您必须以 阅读模式 ('r') 打开它。打开文件后,您需要能够使用变量识别文件,以便对其执行一些操作。这种变量在技术上称为handle,在这种情况下我称之为b.

现在要阅读所有文本,您可以使用 b.read() 然后您可以将其分配给变量 body. (如果你想逐行阅读它,你会这样做:b.readline() 但在这种情况下你不希望这样。)

请注意,我使用了 with 语句,这是打开和处理文件的首选方式,因为它会在结束时自动关闭文件,否则你会手动完成。在 with 可用之前,您必须执行以下操作:

b = open('body.txt', 'r'):
body = b.read()
b.close()

现在最好 url 也对变量 body 中包含的字符串进行编码,所以我们对 subject 做同样的事情:

body = body.replace(' ', '%20')

现在是时候使用 webbrowser 模块并提供您目前获得的数据作为参数,连接字符串。

webbrowser.open('mailto:?to=' + recipient + '&subject=' + subject + '&body=' + body, new=1)

显然你还需要在使用前导入webbrowser模块。 为了清楚起见,我将重写整个程序而不加注释:

import webbrowser

recipient = 'emailaddress'
subject = 'mysubject'

with open('body.txt', 'r') as b:
    body = b.read()

body = body.replace(' ', '%20')

webbrowser.open('mailto:?to=' + recipient + '&subject=' + subject + '&body=' + body, new=1)