简述
使用smtplib模块,用自己的163邮箱账号给自己发邮件。
初始配置
mail_host = smtp.163.com
mail_user = xxxx@163.com
mail_pass =xxxx
mail_port = 25
sender = xxxx@163.com
receiver = xxxx@163.com
subject = python
content = “All interface test has been compeleted\nplease read the report file about the detile of result in the attachment.”
报错信息
(550, b’User has no permission’)
经过查询,得知:我们使用python发送邮件时相当于自定义客户端根据用户名和密码登录,然后使用SMTP服务发送邮件,新注册的163邮箱是默认不开启客户端授权的,因此登录总是被拒绝。
需要打开客户端授权密码,但是我在设置中并没有找到这个。
但是我看到了另一个设置:
这里有两个服务,下面描述打开后可以在客户端收发邮件,于是乎,我打开了第二个,运行成功。第一个应该也可以。
打开服务后会显示一个授权码,并且只显示一次,保存后将mail_pass 修改为授权码,在运行就不报错了。
报错2
Connection unexpectedly closed
虽然第一个错误解决了,又遇到了一个。
原因:服务器的25端口默认封闭,需要使用SSL加密端口(通常是465)来对外发信,调用的邮箱服务器需要支持SSL加密。
将原本
smtp=smtplib.SMTP()
smtp.connect(mail_host,mail_port)
smtp.login(user,password)
smtp.sendmail(sender,self.receiver,self.msg.as_string())
修改为
smtplib.SMTP_SSL(mail_host,465) #将端口改成465
smtp.login(user,password)
smtp.sendmail(sender,self.receiver,self.msg.as_string())
至此,终于发送成功了!完结,撒花~~~