Python:通过SMTP服务器发送邮件

最近在网上看到一篇很有趣的博客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="EmilXXX@163.com"    #用户名
mail_pass="XXXXXX"       #口令 
mailto_list=['xxxxxx@qq.com']     #邮件接受者

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'])<minlen:
                first_title = item['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")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值