Python实现WP博客文章更新提醒

1.导入

最近翻邮箱的时候,无意间看到了各种厂商发来的产品广告,突发奇想用Python做了一个Wordpress文章更新自动给所有用户发邮件的功能。

本篇文章部分内容涉及到数据库操作,请提前做好备份

2.制作

2.1.模块安装

这个功能需要以下模块:

import time
import pymysql
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import feedparser

可以在CMD内使用:

pip install time pymysql smtplib email feedparser

安装这些模块。

2.2.代码

2.2.1.从数据库获取用户列表方法

需要填入你Wordpress博客数据库的用户名,名称,还有用户名对应的密码

注意:如果这个Python脚本运行在本地,服务器ip就可以用127.0.0.1代替,如果运行在其他地方,需要填写服务器外网ip,并且数据库要改成对所有人开放

def sendmain(url):
    db = pymysql.connect(host='你服务器的ip', user="数据库用户名", passwd="数据库密码", db='数据库名称', port=3306, charset='utf8')
    cursor = db.cursor()
    sql = """SELECT * FROM wp_users"""
    cursor.execute(sql)
    desc = cursor.description
    data_dict = [dict(zip([col[0] for col in desc], row)) for row in cursor.fetchall()] 
    cursor.close()
    db.close()

    print(data_dict)
    for i in range(len(data_dict)):
        sendsmtpm(url,data_dict[i]['user_email'])
        print('成功发送给:'+data_dict[i]['user_email'])

2.2.2.发送邮件方法

注:如果没有SMTP服务器可以用163邮箱代替,详见文末4.1

def sendsmtpm(url,to):
    smtp = smtplib.SMTP()
    smtp.connect("你的smtp服务器", port=25)
    smtp.login(user="你的smtp用户名", password="smtp服务器用户名对应的密码")
    message = MIMEText('xxxxx新文章更新了:'+url)# 发送的一段文字,url变量是更新的文章地址
    message['From'] = Header("xxxxx",'utf-8')  # 发件人的昵称
    message['Subject'] = 'xxxxx有文章更新啦'  # 定义主题内容
    print(message)

    smtp.sendmail(from_addr="smtp发送者邮箱,一般跟用户名相同", to_addrs=to, msg=str(message))
    smtp.close()

2.2.3.获取rss并发送邮件

rss_oschina = feedparser.parse('你的RSS链接')
first=[rss_oschina['entries'][0]['links'][0]['href'],rss_oschina['entries'][1]['links'][0]['href'],rss_oschina['entries'][2]['links'][0]['href'],rss_oschina['entries'][3]['links'][0]['href'],rss_oschina['entries'][4]['links'][0]['href'],rss_oschina['entries'][5]['links'][0]['href']]
print('Start')
print(first)
while True:
    rss_oschina = feedparser.parse('你的RSS链接')
    send=True
    for i in range(len(first)):
        if first[i]==rss_oschina['entries'][0]['links'][0]['href']:
            send=False
    if send:
        sendmain(rss_oschina['entries'][0]['links'][0]['href'])
        print('stmpsend:'+rss_oschina['entries'][0]['links'][0]['href'])
        first.append(rss_oschina['entries'][0]['links'][0]['href'])
    time.sleep(5)

2.2.4.完整代码

import time
import pymysql
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import feedparser

def sendmain(url):
    db = pymysql.connect(host='你服务器的ip', user="数据库用户名", passwd="数据库密码", db='数据库名称', port=3306, charset='utf8')
    cursor = db.cursor()
    sql = """SELECT * FROM wp_users"""
    cursor.execute(sql)
    desc = cursor.description
    data_dict = [dict(zip([col[0] for col in desc], row)) for row in cursor.fetchall()] 
    cursor.close()
    db.close()

    print(data_dict)
    for i in range(len(data_dict)):
        sendsmtpm(url,data_dict[i]['user_email'])
        print('成功发送给:'+data_dict[i]['user_email'])
def sendsmtpm(url,to):
    smtp = smtplib.SMTP()
    smtp.connect("你的smtp服务器", port=25)
    smtp.login(user="你的smtp用户名", password="smtp服务器用户名对应的密码")
    message = MIMEText('xxxxx新文章更新了:'+url)# 发送的一段文字,url变量是更新的文章地址
    message['From'] = Header("xxxxx",'utf-8')  # 发件人的昵称
    message['Subject'] = 'xxxxx有文章更新啦'  # 定义主题内容
    print(message)

    smtp.sendmail(from_addr="smtp发送者邮箱,一般跟用户名相同", to_addrs=to, msg=str(message))
    smtp.close()
rss_oschina = feedparser.parse('你的RSS链接')
first=[rss_oschina['entries'][0]['links'][0]['href'],rss_oschina['entries'][1]['links'][0]['href'],rss_oschina['entries'][2]['links'][0]['href'],rss_oschina['entries'][3]['links'][0]['href'],rss_oschina['entries'][4]['links'][0]['href'],rss_oschina['entries'][5]['links'][0]['href']]
print('Start')
print(first)
while True:
    rss_oschina = feedparser.parse('你的RSS链接')
    send=True
    for i in range(len(first)):
        if first[i]==rss_oschina['entries'][0]['links'][0]['href']:
            send=False
    if send:
        sendmain(rss_oschina['entries'][0]['links'][0]['href'])
        print('stmpsend:'+rss_oschina['entries'][0]['links'][0]['href'])
        first.append(rss_oschina['entries'][0]['links'][0]['href'])
    time.sleep(5)

3.完成

可以将这些代码部署到你的服务器上,详见:将你的代码部署到服务器上

4.1.163邮箱启用SMTP

先注册并登录163邮箱,在后台顶栏找到“设置”菜单点击进入

选择 POP3/SMTP/IMAP

点击”开启“

按照步骤发送短信验证,就可以获取SMTP密码了

注:163邮箱的smtp服务器地址为:smtp.163.com

阅读剩余
THE END