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()
<pre><code>print(data_dict)
for i in range(len(data_dict)):
    sendsmtpm(url,data_dict[i]['user_email'])
    print('成功发送给:'+data_dict[i]['user_email'])</code></pre><h4 style="">2.2.2.发送邮件方法</h4><p style="">注:如果没有SMTP服务器可以用163邮箱代替,详见文末4.1</p><pre><code>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()</code></pre><h4 style="">2.2.3.获取rss并发送邮件</h4><pre><code>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</p>
<p>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()</p>
<pre><code>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