写在前面
自己在学习python的过程中有时候想要写一个爬虫来获取一些信息为自己带来方便,比如在爬取12306或者淘宝某一件商品降价的时候呢为了最快得到消息可以怎么做呢?就可以在脚本代码里面加入一下自动发送邮件的代码。这一篇文章写的是yagmail这个第三方库,比python自带的库更好掌握和使用。
前置条件
- 安装好python
- 对自己的邮箱开启SMTP支持并获取到key,可以看一下这个:各个邮箱如何开启SMTP设置
安装yagmail
pip install yagmail
开始使用
引入yagmail
import yagmail
使用
- 我们初始化一个smtp对象,如下:
myyag = yagmail.SMTP("your mail", "your mail stmppkey", host="smtp.qq.com", port='25')
解释一下:这是最简单的一种初始化模式,如果你不想自己的密码被暴露出来可以通过官方文档中提示那样使用
yagmail.register('mygmailusername', 'mygmailpassword')
来将密码保存好,然后这个默认使用的时候Gmail的SMTP服务器,大家如果使用其他的邮箱就要像上面一样声明host和port。关于常见邮箱的host和port我会放在最后。
- 当你拿到上面一个这样的对象时候你就可以开始发送邮件呢,但是呢,邮件是需要内容的,内容可以是文本也可以是附件形式还可以是HTML文本。这个时候已经可以开始使用
s = "hi, this is test"
myyag.send(to="want to mail", subject="test", contents=s)
来发送邮件,这里的to可以是一个字符串亦可以是一个列表和字典,当然还有一个就是不填写那就是默认发给自己,content里面呢可以像我这样是一个文本,亦可以指定文件的路径,最好是放在项目路径下方便读取,当然也可以是一个list,同时发送多个文件。当然你也可以指出邮件的主题,通过subject="",指出就好。
- 我们再来好好看一下send方法的具体定义:
def send(self, to=None, subject=None, contents=None, attachments=None, cc=None, bcc=None,preview_only=False, validate_email=True, throw_invalid_exception=False, headers=None)
这是关于content的介绍,就是这样了大概。
The contents argument will be smartly guessed. It can be passed a string (which will be turned into a list); or a list. For each object in the list:
If it is a dictionary it will assume the key is the content and the value is an alias (only for images currently!) e.g. {'/path/to/image.png' : 'MyPicture'}
It will try to see if the content (string) can be read as a file locally, e.g. '/path/to/image.png'
if impossible, it will check if the string is valid html e.g. <h1>This is a big title</h1>
if not, it must be text. e.g. 'Hi Dorika!'
Note that local files can be html (inline); everything else will be attached.
Local files require to have an extension for their content type to be inferred.
后面就可以开始发送邮件了,我们来看一下效果:
image.png
写在最后
- key不是邮箱的登录密码而是SMTP授权码
附录
常用邮箱host以及port
sina.com:
POP3服务器地址:pop3.sina.com.cn(端口:110)
SMTP服务器地址:smtp.sina.com.cn(端口:25)
sinaVIP:
POP3服务器:pop3.vip.sina.com (端口:110)
SMTP服务器:smtp.vip.sina.com (端口:25)
sohu.com:
POP3服务器地址:pop3.sohu.com(端口:110)
SMTP服务器地址:smtp.sohu.com(端口:25)
126邮箱:
POP3服务器地址:pop.126.com(端口:110)
SMTP服务器地址:smtp.126.com(端口:25)
139邮箱:
POP3服务器地址:POP.139.com(端口:110)
SMTP服务器地址:SMTP.139.com(端口:25)
163.com:
POP3服务器地址:pop.163.com(端口:110)
SMTP服务器地址:smtp.163.com(端口:25)
QQ邮箱
POP3服务器地址:pop.qq.com(端口:110)
SMTP服务器地址:smtp.qq.com (端口:25)
QQ企业邮箱
POP3服务器地址:pop.exmail.qq.com (SSL启用 端口:995)
SMTP服务器地址:smtp.exmail.qq.com(SSL启用 端口:587/465)
yahoo.com:
POP3服务器地址:pop.mail.yahoo.com
SMTP服务器地址:smtp.mail.yahoo.com
yahoo.com.cn:
POP3服务器地址:pop.mail.yahoo.com.cn(端口:995)
SMTP服务器地址:smtp.mail.yahoo.com.cn(端口:587)
HotMail
POP3服务器地址:pop3.live.com (端口:995)
SMTP服务器地址:smtp.live.com (端口:587)
gmail(google.com)
POP3服务器地址:pop.gmail.com(SSL启用 端口:995)
SMTP服务器地址:smtp.gmail.com(SSL启用 端口:587)
263.net:
POP3服务器地址:pop3.263.net(端口:110)
SMTP服务器地址:smtp.263.net(端口:25)
263.net.cn:
POP3服务器地址:pop.263.net.cn(端口:110)
SMTP服务器地址:smtp.263.net.cn(端口:25)
x263.net:
POP3服务器地址:pop.x263.net(端口:110)
SMTP服务器地址:smtp.x263.net(端口:25)
21cn.com:
POP3服务器地址:pop.21cn.com(端口:110)
SMTP服务器地址:smtp.21cn.com(端口:25)
Foxmail:
POP3服务器地址:POP.foxmail.com(端口:110)
SMTP服务器地址:SMTP.foxmail.com(端口:25)
china.com:
POP3服务器地址:pop.china.com(端口:110)
SMTP服务器地址:smtp.china.com(端口:25)
tom.com:
POP3服务器地址:pop.tom.com(端口:110)
SMTP服务器地址:smtp.tom.com(端口:25)
etang.com:
POP3服务器地址:pop.etang.com
SMTP服务器地址:smtp.etang.com
网友评论