用于community.lsst.org的友好邮件转发机器人

community_mailbot的Python项目详细描述


https://img.shields.io/pypi/v/community_mailbot.svg

community_mailbot是一个友好的bot,它告诉lsst dm的旧邮件列表的订户有关community.lsst.org上发生的事情。

bot喜欢定期被cron唤醒;每次它都会向话语服务器询问bot跟踪的不同类别的最新消息(您可以用一个简单的config.json文件来设置)。 如果有新主题,community_mailbot将使用其好友Mandrill向相应的电子邮件列表发送电子邮件。 在bot重新进入睡眠状态之前,它会在一个简单的json缓存文件中记录已经通过电子邮件发送的所有主题。

安装

创建一个运行python 3.5的虚拟环境,然后:

pip install community_mailbot

运行社区mailbot

王国的钥匙

您需要从community.lsst.org和mandrill获取api密钥。 将它们设置为以下环境变量:

  • $MANDRILL_KEY(注意,对于community_mailbot子帐户使用api键)
  • $DISCOURSE_KEY(话语密钥应该对应于具有足够权限的用户)
  • $DISCOURSE_USER

(可选)将$COMMUNITY_MAILBOT_CACHE设置为希望mailbot跟踪其转发的主题的位置。

设置主题→电子邮件映射

要设置如何将话语类别映射到收件人电子邮件地址,您需要知道每个相关类别的整数ID。 要获取这些,请运行包含的脚本:

discourse_categories

如果设置上述环境变量,则无需为脚本提供任何参数。

接下来,创建一个config.json文件。 它是一个简单的散列结构;每个键值对都是该类别的话语类别id和电子邮件收件人列表。 一般格式为:

{"<id>":[{"email":"<email address>","name":"<recipient name>","type":"to"}],}

值中dict的结构与Mandrill send-template API匹配。 "type"字段通常应该是"to",但也可以是"cc""bcc"

请注意,由于每个类别的收件人信息是list,因此可以有多个收件人。

预缓存旧主题

在让机器人发送电子邮件之前,你会希望它知道并忽略较旧的消息。 要预热缓存,我们将使用--cache-only选项运行forward_discourse脚本。

forward_discourse config.json --cache-only

请注意,forward_discourse可以使用您已经设置的环境变量配置自己。 运行forward_discourse --help获取完整的选项集。

设置cron调度

当机器人定期监视一个新话题的讨论站点时,它的工作效果最好。 cron是一个很好的设置方法。

创建一个shell脚本来包含所有脚本参数是很有用的。 例如,创建一个名为run_mailbot.sh

#!/bin/bash
source /home/ec2-user/.bash_profile
source activate community_mailbot
forward_discourse /home/ec2-user/config.json

echo"$(date) Ran forward_discourse"

此脚本设置shell环境,加载python环境,然后运行mailbot。

然后指示cron每隔10分钟运行一次此脚本

首先,打开终端中的crontab

crontab -e

并为bot添加一行

*/10 * * * * /home/ec2-user/run_mailbot.sh

然后坐下来看邮件流。

开发

要在community_mailbot上开发,您需要克隆存储库并安装开发副本(最好在virtualenv中):

git clone https://github.com/lsst-sqre/community_mailbot.git
cd community_mailbot
python setup.py develop

运行测试套件:

python -m unittest discover -s community_mailbot/tests

粗糙点

community_mailbot意味着相当通用,可用于任何话语安装。

但是,请注意,mandrill电子邮件模板信息是当前硬编码的。 理想情况下,这将是用户可配置的。

许可证

版权所有2015 Aura/LSST。

mit许可;请参阅LICENSE文件。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何向xsi:nil元素添加另一个属性?   Java抽象泛型方法,使用具体类型实现通配符   java使用pcap4j截断pcap文件   当我放置字母a、b和c时,java中的异常预期会下降   java设置活动对话框不可取消   接口类型变量上的Java克隆   使用Java或BouncyCastle对CSR(证书签名请求)进行安全解码/读取   java调用SavingsAccount对象上的函数并打印结果   java如何在Android应用程序上显示地图上的兴趣点(POI)并与之交互?   如果在JavaFX中的ResultSet中未找到任何内容,则显示java警报   java我将springboot和@component与@scheduled一起使用,它每12小时锁定一次   ApachePOI如何使用java删除包含字符串的word表的行   java如果对象(x,y)靠近其他对象(x,y)   从未对JMSException调用java JMS CachingConnectionFactory OneException方法   javascript使用java将HTML页面转换为MS word