简述
使用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())
至此,终于发送成功了!完结,撒花~~~
|