用python发送邮件 smtp
来源:互联网 发布:淘宝秒杀群怎么建立 编辑:程序博客网 时间:2024/04/30 16:52
看了廖雪峰老师的教程,决定试试看能不能发送,试验用的是自己去QQ邮箱,首先要去QQ邮箱开启pop和SMTP服务才可以,下面是老师的代码块:
from email.mime.text import MIMETextmsg = MIMEText('hello, send by Python...', 'plain', 'utf-8')# 输入Email地址和口令:from_addr = raw_input('From: ')password = raw_input('Password: ')# 输入SMTP服务器地址:smtp_server = raw_input('SMTP server: ')# 输入收件人地址:to_addr = raw_input('To: ')import smtplibserver = smtplib.SMTP(smtp_server, 25) # SMTP协议默认端口是25server.set_debuglevel(1)server.login(from_addr, password)server.sendmail(from_addr, [to_addr], msg.as_string())server.quit()
输入自己对应的QQ邮箱和密码之后,报错了:
raise SMTPServerDisconnected("Connection unexpectedly closed")smtplib.SMTPServerDisconnected: Connection unexpectedly closed
百度了一下说是端口问题,尝试将SMTP端口换成465或者587,两个都试了一下:
raise SMTPAuthenticationError(code, resp)smtplib.SMTPAuthenticationError: (530, b'Must issue a STARTTLS command first.')
说明不是端口的问题,继续百度说是输入密码不是自己的密码,而是授权码,这就需要在QQ邮箱设置那里点击授权码的时候发送短信,然后获得授权码了,获得授权码之后再次运行,还是不行,再检查,发现别人的成功案例,在原基础上写多一句代码:
from email.mime.text import MIMETextmsg = MIMEText('hello, send by Python...', 'plain', 'utf-8')# 输入Email地址和口令:from_addr = raw_input('From: ')password = raw_input('Password: ')# 输入SMTP服务器地址:smtp_server = raw_input('SMTP server: ')# 输入收件人地址:to_addr = raw_input('To: ')import smtplibserver = smtplib.SMTP(smtp_server, 25) # SMTP协议默认端口是25server.set_debuglevel(1)server.starttls()server.login(from_addr, password)server.sendmail(from_addr, [to_addr], msg.as_string())server.quit()
运行之后成功发送邮件
这里有个问题就是,用QQ邮箱发送邮件,一个是没有主题等信息,还有就是发送到其他邮箱会被认为是垃圾邮件,只有QQ邮箱自己才不会。
决定改动代码,参考廖雪峰老师:
#-*- coding:utf-8 -*-from email import encodersfrom email.header import Headerfrom email.mime.text import MIMETextimport smtplibfrom_addr=input('From:')password=input('password:')to_addr=input('To:')smtp_server=input('SMTP server:')msg=MIMEText('hello,send by python...','plain','utf-8')msg['From']=Header('python爱好者','utf-8')msg['To']=Header('管理员','utf-8')msg['Subject']=Header('来自SMTP的问候','utf-8')server=smtplib.SMTP(smtp_server,25)server.set_debuglevel(1)server.starttls()server.login(from_addr,password)server.sendmail(from_addr,[to_addr],msg.as_string())server.quit()
上面有些改动,我的是python3.5的版本,3.6还有很多不稳定,所以不敢升级,发送的邮件有主题和发件人,下面做具体的分析。
SMTP,即简单邮件传输协议,由它来控制信件的中转方式,python的smtplib就提供了一种很方便的途径发送电子邮件:
import smtplibobj=smtplib.SMTP([host [, port [, local_hostname]]])
- 其中host是指SMTP服务器自己,需要指定主机的IP地址或者域名,例如smtp.qq.com
- port:提供指定SMTP服务器的使用端口号,一般都是25
- local_hostname:如果SMTP在你的本机上,你只需要指定服务器的地址为localhost即可,一般不用理会
python SMTP对象使用sendmail方式发送邮件,语法如下:
SMTP.sendmail(from_addr,to_addrs,msg[,mail_options,rcpt_options])
- from_addr:邮件发送者地址
- to_addrs:字符串列表,可以用[]括起来,邮件发送地址
- msg:发送信息
第三个参数,msg是字符串,表示邮件,我们知道的邮件一般是由标题,发信人,收件人,邮件内容,附件等构成,发送邮件的时候,要注意msg的格式,这个格式是SMTP协议中定义的格式
MIMEText构建对象时,第一个参数就是邮件正文,第二个参数就是MIMEsubtype,传入‘plain’表示纯文本,最终的MIME就是‘text/plain’,最后用‘utf-8’或者‘as-ascii’编码来保证多语言的兼容
smtplib.SMTP.set_debuglevel(1)
可以打印和SMTP服务器交互的所有信息,设置是否为调试模式。默认为False,即非调试模式,表示不输出任何调试信息
login()方法用来登录SMTP服务器
Header,根据官网的文档说明,用来连接不同编码的文本,会统一编码格式,直接在括号里面标明utf-8
smtplib.SMTP.connect([host[, port]])
连接到指定的smtp服务器。参数分别表示smpt主机和端口。注意: 也可以在host参数中指定端口号(如:smpt.yeah.net:25),这样就没必要给出port参数。
smtplib.SMTP.starttls(keyfile=None, certfile=None, context=None)
使用标准的25端口连接SMTP服务器时,使用的是明文传输,发送邮件的整个过程可能会被窃听。要更安全地发送邮件,可以加密SMTP会话,实际上就是先创建SSL安全连接,然后再使用SMTP协议发送邮件。只需要在创建SMTP对象后,立刻调用starttls()方法,就创建了安全连接。官方文档说需要再跳用ehlo()方法,但是我这里没有调用就成功了
- 用python发送邮件 smtp
- python smtp发送邮件
- python smtp发送邮件
- Python SMTP发送邮件
- Python SMTP发送邮件
- python smtp 发送邮件
- Python SMTP发送邮件
- Python SMTP发送邮件
- python SMTP发送邮件
- Python SMTP发送邮件
- Python SMTP发送邮件
- Python SMTP发送邮件
- Python SMTP发送邮件
- 用Python实现SMTP邮件发送
- 用SMTP发送邮件
- Python发送邮件(Email SMTP)
- python使用smtp发送邮件
- python下smtp发送邮件
- CDimage windows平台命令行生成iso
- Object Relational Mapping (ORM) Data Access
- 数据结构实验之栈与队列二:一般算术表达式转换成后缀式
- Python入门基础之条件循环语句(二)
- 通配符的匹配很全面, 但无法找到元素 'aop:config' 的声明
- 用python发送邮件 smtp
- H5页面轮播图插件
- MediaPlayer: start called in state 0报错处理
- CommonJS语法中的require寻找‘包’的规则
- margin和padding的高级用法
- 数据结构实验之串三:KMP应用
- ubuntu 16.04安装后只有一个分辨率,无法用xrandr命令也无法修改xorg.conf(已解决)
- windows上php安装扩展遇到的坑
- 安卓学习笔记(9)-文件共享到其他应用