最近在网上看到一篇很有趣的博客http://python.jobbole.com/84796/,于是自己动手实现了一遍,这篇博客就记录一下在实现的时候遇到的一些问题。
要通过SMTP的服务器发送邮件,必须要保证你的邮箱已经开启了SMTP服务,比如你用网易的邮箱(在这之前我也用了企鹅的邮箱试了试,没成功,也没清楚原因,后来果断转163邮箱,结果一试就成了),开启之后,会要求你设置SMTP服务的独立密码,以后就可以通过邮箱账号和这个密码进行登陆了,具体方法还是百度吧,比我说的清楚。设置服务器的时候如果是163的就用SMTP.163.com,QQ的就用SMTP.qq.com,端口号一般都是25。
这里邮件内容是从网上的开源的API获取的,可以在网上找找,但是想要调用他的API,必须先要获取一个APIKEY。这里有很多免费的API:https://free.juhe.cn/,可以去找找有趣的。
还有注意,发送的邮件必须要有主题(msg[‘Subject’] = ‘XXXX’),不然163把邮件当成垃圾邮件,直接就发不出了。
如果发现邮件并没有发送成功,可以在链接服务器的语句之后加上
(smtpObj.set_debuglevel(1)),查看与服务器的交互状况,看到底是哪里除了问题。
还是看代码吧,非常简短也有注释:
# -*- coding: utf-8 -*-
"""
Created on Fri Apr 15 21:33:14 2016
@author: hp
"""
import urllib.request,urllib.error,json,smtplib
from email.mime.text import MIMEText
mail_host="smtp.163.com" #设置服务器
mail_user="[email protected]" #用户名
mail_pass="XXXXXX" #口令
mailto_list=['[email protected]'] #邮件接受者
def send_mail(to_list,sub,content):
content+='戳这里:'+'http://python.jobbole.com/84796/'
#to_list:收件人;sub:主题;content:邮件内容;
msg = MIMEText(content,'plain','utf-8')#创建一个实例,这里设置为纯文字格式邮件编码utf8
msg['From'] = mail_user
msg['To'] = ";".join(to_list)
msg['Subject'] = 'XXXX'
try:
s = smtplib.SMTP() #实例化
s.connect(mail_host,25) #连接smtp服务器
s.login(mail_user,mail_pass) #登陆服务器
s.sendmail(mail_user, to_list, msg.as_string()) #发送邮件
s.close()
return True
except Exception as e:
print(str(e))
return False
if __name__ == '__main__':
appkey = "XXXXXXXXXXXXXXXXXXXXXX"
url = 'http://apis.baidu.com/showapi_open_bus/showapi_joke/joke_text?page=1'
req = urllib.request.Request(url)
req.add_header("apikey", appkey)
resp = urllib.request.urlopen(req)
content = resp.read()
if(content):
json_result = json.loads(content.decode())
content_list = json_result['showapi_res_body']['contentlist']
minlen = 10000
for item in content_list:
if len(item['text'])'title']
first_text = item['text']
minlen = len(item['text'])
print('title:'+first_title)
print('content:'+first_text)
if send_mail(mailto_list,first_title,first_text):
print("send msg succeed")
else:
print("send msg failed")
else:
print("get joke error")