代码如下:
import smtplib
from email.mime.text import MIMEText
# 设置邮箱地址】
mail_host = 'smtp.139.com'
# 设置用户名
mail_user = 'xxxxx667@139.com'
#设置密码
mail_pass = '520297fa8ab835d2xxxx'
# 设置以哪个地址来发送
sender = '136088xxxxx7@139.com'
# 发给哪些人
receivers = ['9967xxxx@qq.com']
# 设置文本,用到"from email.mime.text import MIMEText",'plain'格式,'utf-8'编码
message = MIMEText('你好', 'plain', 'utf-8')
# 邮件内容
message['Subject'] = '每日运行报告'
message['From'] = sender
message['To'] = receivers[0]
try:
# 现在的邮箱一般都支持SSl安全协议,加密后端口为465,
smtpObj = smtplib.SMTP_SSL(mail_host, 465)
# 方便通过日志找异常原因
smtpObj.set_debuglevel(1)
# 登陆邮箱
smtpObj.login(mail_user, mail_pass)
# 发送
smtpObj.sendmail(sender, receivers, message.as_string())
# 退出/关闭发送邮箱
smtpObj.quit()
print("邮件发送成功")
# 捕捉异常
except smtplib.SMTPException as e:
print('error', e)
报错为:
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:992)
如果是开了vpm(代 理)的话,请把vpm关闭后执行代码
现在很多网站都要求使用 HTTPS 协议,但是有些网站可能并没有设置好 HTTPS 证书,或者网站的 HTTPS 证书可能并不被 CA 机构认可,这时候,这些网站可能就会出现 SSL 证书错误的提示。
如果我们一定要爬取这个网站怎么办呢?我们可以使用 verify 参数控制是否验证证书,如果将其设置为 False,在请求时就不会再验证证书是否有效。如果不加 verify 参数的话,默认值是 True,会自动验证。因此我们将verify参数设为False即可。
import requests
response = requests.get('https://ssr2.scrape.center/', verify=False)
print(response.status_code)
但是报了一个警告,它建议我们给它指定证书。我们可以对警告进行忽略。
import requests
from requests.packages import urllib3
urllib3.disable_warnings()
response = requests.get('https://ssr2.scrape.center/', verify=False)
print(response.status_code)
我们还可以导入证书进行访问,注意,私有证书的key必须是解密状态,加密状态的key是不支持的。
import requests
response=requests.get('https://www.12306.cn',cert=('/path/server.crt','/path/key'))
print(response.status_code)