Fab*_*cin 6 python email python-2.7 python-webbrowser
我正在尝试用 Python 发送一封带有自定义收件人、主题和正文的电子邮件。这意味着我不想使用Python 的 smtp 包,而是使用webbrowser 之类的东西,因为我需要它来打开带有上述参数的默认电子邮件客户端(在我的情况下为 Thunderbird)。
import webbrowser
webbrowser.open("mailto:?to=aaa@email.com&subject=mysubject", new=1)
Run Code Online (Sandbox Code Playgroud)
工作,但我需要它从我之前找到的字符串和我之前创建的文本文件中的正文中获取收件人。
有没有我找不到的“简单”方法来做到这一点?提前致谢。
Fab*_*bio 10
我使用变量接收者和主题来存储相对值。只需将单引号之间的示例文本替换为您的实际值。
recipient = 'emailaddress'
subject = 'mysubject'
Run Code Online (Sandbox Code Playgroud)
主题字段不能包含空格,因此必须使用 %20 ASCII 代码对它们进行 url 编码
subject = subject.replace(' ', '%20')
Run Code Online (Sandbox Code Playgroud)
上面的函数用“%20”替换空格并将修改后的主题分配给同一个变量,因为你可以重用它,在这种情况下你真的不需要另一个。
也可以使用urllib模块进行 url 编码(请参阅urllib.urlencode()方法),但只需使用replace()方法即可完成,这样您就可以避免为此导入另一个模块。
现在您需要从文本文件中加载文本并将其存储在变量中。假设您有一个名为body.txt的文本文件:
with open('body.txt', 'r') as b:
body = b.read()
Run Code Online (Sandbox Code Playgroud)
请注意,我假设body.txt位于 Python 脚本的同一目录中,否则在 filename 参数中,您必须包含文件的完整绝对或相对路径,后跟文件名。
我使用了open()函数并提供了 2 个参数:第一个是文件名,第二个是您想要打开文件的模式。您想读取该文件,因此必须以读取模式( 'r' )打开它。打开文件后,您需要能够使用变量识别文件,以便对其执行某些操作。这种变量在技术上称为handle,在这种情况下我称之为b。
现在要阅读所有文本,您可以使用b.read(),然后您可以将其分配给变量body。(如果你想一行一行地阅读它,你会这样做:b.readline()但在这种情况下你不想要这个。)
请注意,我使用了with语句,这是打开和处理文件的首选方式,因为它会在最后自动关闭文件,否则您必须手动执行此操作。在with可用之前,您必须执行以下操作:
b = open('body.txt', 'r'):
body = b.read()
b.close()
Run Code Online (Sandbox Code Playgroud)
现在最好对包含在变量body 中的字符串进行 url 编码,所以我们对主题做同样的事情:
body = body.replace(' ', '%20')
Run Code Online (Sandbox Code Playgroud)
现在是时候使用webbrowser模块并提供您目前获得的数据作为参数,连接字符串。
webbrowser.open('mailto:?to=' + recipient + '&subject=' + subject + '&body=' + body, new=1)
Run Code Online (Sandbox Code Playgroud)
显然,您还需要在使用之前导入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)
Run Code Online (Sandbox Code Playgroud)