chili 默默学编程

Tweet 邮件提醒功能


本文目录:

1、Tweet 邮件提醒功能(使用 python SMTP 库)

https://docs.python.org/2/library/smtplib.html

http://www.runoob.com/python/python-email.html

2、尝试 QQ 提醒功能(使用 python qqbot 库)(这个功能很诱人,但是由于腾讯设置的限制,放弃了该功能,毕竟邮箱是通用的方法,而QQ、微信是独立公司的产品);

https://github.com/pandolia/qqbot


Tweet 邮件提醒功能

- 作用:

tweet 页面有人写新内容时,会自动发邮件提醒关注者。

完成效果如下:

Image

- 实现过程:

1、开通邮箱 smtp 功能(我用的是 163 邮箱)

2、在前端页面点击发布 tweet 的按钮上新增 send email 行为

3、在后端新增 send mail 的路由处理方法(使用 python SMTP 库)


截图如下:

1、开通邮箱 smtp 功能(我用的是 163 邮箱)

Image

2、在前端页面点击发布 tweet 的按钮上新增 send email 行为

Image

 3、在后端新增 send mail函数

from models.email import Email

@main.route("/send_email", methods=['POST'])
def send_email():
    u = current_user()
    ...
    if u is not None:
        data = request.form.to_dict()
        username = u.username
        ...
        data_content = data.get('content', '')
        title = '{} 写了 tweet:{}'.format(username, data_content[:10] + '...')
        content = '{}\n{}'.format('http://shenkeyang.cc/tweet/', data_content)

        Email.send(title, content, username)
    ...

对应的 Email 类(使用 SMTP 库)

@classmethoddef send(cls, title, content, username):

    # 第三方 SMTP 服务    
    mail_host = "smtp.163.com"  # SMTP服务器    
    mail_user = "xxxxx"  # 用户名    
    mail_pass = "xxxxx"  # 授权密码,非登录密码    
    sender = 'xxxxx@163.com'  # 发件人邮箱(最好写全, 不然会失败)    

    # 所有 email    
    receivers = []
    emails = cls.all()
    for email in emails:
        if email.username != username:
            receivers.append(email.email)
    
    # 发送内容
    message = MIMEText(content, 'plain', 'utf-8')  # 内容, 格式, 编码    
    message['From'] = "{}".format(sender)
    message['To'] = ';'.join(receivers)
    message['Subject'] = title

    # 发送
    try:
        smtpObj = smtplib.SMTP_SSL(mail_host, 465)  # 启用SSL发信, 端口一般是465        
        smtpObj.login(mail_user, mail_pass)  # 登录验证        
        smtpObj.sendmail(sender, receivers, message.as_string())  # 发送        
        smtpObj.quit()
        log("mail has been send successfully.")

    except smtplib.SMTPException as e:
        log('not send', e)

尝试 QQ 提醒功能

- 安装

pip install qqbot

- 测试成功

from qqbot import _bot as bot
bot.Login(['-q', '357052544'])

names = ['xx1', 'xx2', 'xx3']
for name in names:
    contact = bot.List('buddy', name)
    bot.SendTo(contact[0], '机器人测试', resendOn1202=True)

Image

- 限制

无法长时间保持在线状态,每次登录成功后的 cookie 会每在 1 ~ 2 天后失效,将被腾讯服务器强制下线,此时 必须 重新登录。

Image

这样就失去了自动提醒的意义。。就此作罢。


reply ( 0 )