文章来源:GITHub:https://github.com/kootenpv/yagmail
pip3 install yagmail
pip3 install keyring
import yagmail yag = yagmail.SMTP(user = 'xxx@163.com', password = 'xxx', host = 'smtp.163.com') yag.send(to = 'xxx@163.com', subject = 'This is subject', contents = 'This is content')
注意:
yag.send(to = ['aa@163.com','bb@qq.com','cc@gmail.com'], 'subject', 'contents')
yag.send(to = 'xxx@163.com', subject = 'subject', contents = ['hello', 'C:\Users\Desktop\test.txt'])
注意:如果邮件发送之后被退回,那么程序不会显示任何错误信息,但是发件人的邮箱会有退信邮件。
yagmail.register('mygmailusername', 'mygmailpassword')
以下是项目介绍:
这里的目标是尽可能简单,无痛地发送电子邮件。
最后,您的代码将如下所示:
import yagmail yag = yagmail.SMTP() contents = ['This is the body, and here is just text http://somedomain/image.png', 'You can find an audio file attached.', '/local/path/song.mp3'] yag.send('to@someone.com', 'subject', contents)
或者简单的单行:
yagmail.SMTP('mygmailusername').send('to@someone.com', 'subject', 'This is the body')
请注意,它将从您的密钥环安全地读取密码(如下所示)。如果您不想这样,您也可以使用以下内容进行初始化:
yag = yagmail.SMTP('mygmailusername', 'mygmailpassword')
但老实说,你想在你的脚本中写下你的密码吗?
同样,我使用我的用户名.yagmail
在我的主文件夹中命名的文件中。
部分 | 说明 |
---|---|
安装 | 在此处查找有关如何安装yagmail的说明 |
用户名和密码 | 不再需要在脚本中填写用户名和密码 |
开始连接 | 开始吧 |
可用性 | 显示发送的一些使用模式 |
收件人 | 如何发送给多个人,给别名或发送给自己 |
神奇的内容 | 真的很容易发送文本,HTML,图像和附件 |
反馈 | 如何向我发送反馈 |
路线图(和优先事项) | 对 |
错误 | 处理发送电子邮件的人员的常见错误列表 |
对于Python 2.x和Python 3.x分别:
pip install yagmail[all] pip3 install yagmail[all]
如果您在安装密钥环时遇到问题,请尝试不安装,即pip install yagmail
。
作为旁注,yagmail
现在还可以用于从命令行发送电子邮件。
The Python
keyring
lib provides a easy way to access the system keyring service from python. It can be used in any application that needs safe password storage.
你知道你想要它。通过打开Python解释器并运行来设置它:
import yagmail yagmail.register('mygmailusername', 'mygmailpassword')
事实上,它只是一个包装keyring.set_password('yagmail', 'mygmailusername', 'mygmailpassword')
。
如果未给出密码且密钥环中未找到用户,getpass.getpass()
则用于提示用户输入密码。进入此一次后,它可以存储在钥匙圈中,永远不会再问。
另一个便利是将.yagmail文件保存在您的主文件夹中,只包含电子邮件用户名。然后,您可以省略所有内容,只需使用yagmail.SMTP()
连接即可。当然,这不适用于更多帐户,但它可能是一个很好的默认值。根据要求,我会考虑在此.yagmail文件中添加更多详细信息(主机,端口和其他设置)。
yag = yagmail.SMTP('mygmailusername')
请注意,此连接是可重用的,可关闭的,当它离开范围时,它将在CPython中自行清理。
正如tilgovi在#39中指出的那样,SMTP不会在PyPy中自动关闭。with
在这种情况下应该使用上下文管理器。
定义一些变量:
to = 'santa@someone.com' to2 = 'easterbunny@someone.com' to3 = 'sky@pip-package.com' subject = 'This is obviously the subject' body = 'This is obviously the body' html = '<a href="/links.html?l=TEIvSjBKT0RZaWhLNElCTGtUNTl3VVJIVlZ0bWtOdCtkUjFVY1JIZmhXUkN1ZFZTbUx0ajVFaXdsWVZ2dVhtWg%3D%3D">Click me!</a>' img = '/local/file/bunny.png'
所有变量都是可选的,并且知道甚至to
不需要(您将向自己发送电子邮件):
yag.send(to = to, subject = subject, contents = body) yag.send(to = to, subject = subject, contents = [body, html, img]) yag.send(contents = [body, img])
此外,如果您不想明确,可以执行以下操作:
yag.send(to, subject, [body, img])
也可以通过提供电子邮件字符串列表而不是单个字符串来发送给一组人:
yag.send(to = to) yag.send(to = [to, to2]) # List or tuples for emailadresses *without* aliases yag.send(to = {to : 'Alias1'}) # Dictionary for emailaddress *with* aliases yag.send(to = {to : 'Alias1', to2 : 'Alias2'}
不做任何to
争论将向您自己发送电子邮件。从这个意义上讲,yagmail.SMTP().send()
已经可以发送电子邮件了。请注意,如果未使用显式,则将to = ...
使用第一个参数发送到。可以避免像:
yag.send(subject = 'to self', contents = 'hi!')
请注意,默认情况下,所有电子邮件地址都使用soft_email_validation==True
(默认)进行保守验证。
使用Oauth2进行身份验证甚至更安全,因为您可以撤消令牌的权限。
这是oauth2代码严重依赖的最佳来源之一。
代码:
yag = SMTP("user@gmail.com", oauth2_file="~/oauth2_creds.json") yag.send(subject="Great!")
当无法找到文件时,它会提示a google_client_id
和a google_client_secret
。可以在前一个链接之后获得这些变量。
提供后,终端中将显示一个链接,您应该遵循该链接以获取google_refresh_token
。再次粘贴,你就安装好了!
请注意,获取该文件的人可以发送电子邮件,但没有其他内容。一旦发现,您可以直接禁用令牌。
contents
这个contents
论点将被巧妙地猜到。它可以传递一个字符串(将变成一个列表); 或者一份清单。对于列表中的每个对象:
<h1>This is a big title</h1>
请注意,本地文件可以是html(内联); 其他一切都会附上。
本地文件需要具有推断其内容类型的扩展名。
截至0.4.94版本,raw
并且inline
已被添加。
raw
确保字符串不会收到任何“魔法”(内联,html,附加)inline
将使图像出现在文本中。我将尽力在24小时内回应Github .....
请给我一些反馈意见SMTP().feedback('Great job!')
:-)
yagmail
安装时作为CLI上的命令feedback
在SMTP上添加功能可以直接向我发送反馈:-)raw
和'内联```.yagmail
文件包含更多参数(中)确保您有密钥环条目(请参阅“ 不再使用密码和用户名”一节),或使用getpass进行注册。我不鼓励在脚本中使用用户名/密码。
smtplib.SMTPException: SMTP AUTH extension not supported by server
SMTPAuthenticationError: Application-specific password required
YagAddressError:这意味着地址以无效格式给出。请注意,From
可以是字符串,也可以是键为a的字典,email
值为alias
{' sample@gmail.com ':'Sam'}。在'to'的情况下,它可以是字符串(email
),电子邮件列表(没有别名的电子邮件地址)或字典,其中键是电子邮件地址,值表示别名。
YagInvalidEmailAddress:请注意,这只会过滤掉emailaddresses中的语法错误。如果一个人认为它可能是有效的电子邮件,它很可能会通过。但是,它仍然很可能是任何人都没有声称实际的电子邮件地址(因此这个功能无法取消验证)。
点击以启用外部使用的电子邮件https://www.google.com/settings/security/lesssecureapps
确保您有可用的互联网连接
如果您ImportError
尝试安装sudo
,请参阅问题#13
参与评论
手机查看
返回顶部