基于python爬虫并将其结果利用smtp协议发送至邮箱:每天一则段子。

时间:2022-09-17 20:45:55

     SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件

python中有简洁可用的smtp模块,为邮件收发提供了便利,联系之前的用python写的爬虫爬下段子网站的段子(源博客:http://www.cnblogs.com/fuzzer/p/5094568.html),我们可以将其爬下的内容作为邮件内容进行发送。

源代码如下:

import sys
import re
import urllib
import smtplib
import random
from email.mime.text import MIMEText  

to=['duem123321@163.com'] 
host="smtp.163.com"  #smtp服务器
user="duem123321"    #用户名
password="******"   #密码 
postfix="163.com"  #后缀
def gethtml(url):
    page=urllib.urlopen(url)
    html=page.read()
    return html

def getmessage(html):
    p=re.compile(r'<div class="content">(.*)</div><script type="text/javascript">')
    #对段子内容进行正则匹配
    message=re.findall(p,html)#返回正则匹配的结果
    return message 
def send_mail(to_list,sub,content):  
    me="段子*"+"<"+user+"@"+postfix+">"  
    msg = MIMEText(content,_subtype='plain',_charset='gb2312')  #charset可改为utf-8根据实际情况
    msg['Subject'] = sub  
    msg['From'] = me  
    msg['To'] = ";".join(to_list)  
    try:  
        server = smtplib.SMTP()  
        server.connect(host)  
        server.login(user,password)  
        server.sendmail(me, to_list, msg.as_string())  
        server.close()  
        return True  
    except Exception, e:  
        print str(e)  
        return False  
if __name__ == '__main__':
    i=random.randint(1,500)
    i=str(i)
    web=gethtml('http://ishuo.cn/subject/'+i)
    #该网站段子的链接特点

    message=getmessage(web)

    message2=''.join(message)#将结果转换为字符串类型
    
    #message2=message2.decode('utf8')
    message2=str(message2)
    print message2   
    if send_mail(to,"每天一则搞笑段子",message2):  
        print "Suceed!"  
    else:  
        print "Failed!"

  自行选择encode的方式:简体中文:gb2312 繁体中文:big5  UNICODE:UTF-8

收信结果如下:

基于python爬虫并将其结果利用smtp协议发送至邮箱:每天一则段子。

可以将代码上传至购买的服务器,修改设置其运行时间,设置收信人列表,每天一则给想带去欢乐的人带去一点欢乐。

ps:文章里有一篇关于如何配置放于服务器上。