高级mailto在Python中使用

时间:2016-09-01 09:15:40

标签: python python-2.7 email python-webbrowser

我正在尝试使用Python发送包含自定义收件人,主题和正文的电子邮件。 这意味着我不想使用Python's smtp packages,而是webbrowser之类的东西,因为我需要这个来打开默认的电子邮件客户端(在我的情况下是Thunderbird)。

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

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

有什么“简单”的方法可以找到我找不到的吗? 提前谢谢。

2 个答案:

答案 0 :(得分:3)

我使用变量收件人主题来存储相对值。只需用实际值替换单引号之间的示例文本。

recipient = 'emailaddress'
subject = 'mysubject'

主题字段不能包含空格,因此必须使用%20 ASCII码

进行网址编码
subject = subject.replace(' ', '%20')

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

也可以使用 urllib 模块进行网址编码(参见 urllib.urlencode()方法),但只需使用替换就可以完成()方法,这样就可以避免为此导入另一个模块。

现在您需要从文本文件加载文本并将其存储在变量中。 想象一下,你有一个名为 body.txt 的文本文件:

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

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

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

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

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

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

现在最好将url编码变量 body 中包含的字符串,因此我们对主题做了同样的事情:

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)

答案 1 :(得分:0)

使用字符串连接。

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