高性能、事务性电子邮件消息队列、日志记录、多语言HTML和纯文本模板管理。

PonyExpress的Python项目详细描述


Ponyexpress
==


>高性能、事务性电子邮件队列、日志记录,
以及多语言HTML和纯文本模板管理。


*将JSON发送到rest接口(与语言和平台无关)
*创建CouchDB文档(语言和平台不可知)
*将json发送到gearman作业(gearman库存在于多种语言中)
*使用ponyexpress类(python)

也不为非开发人员提供对副本进行更改或为翻译人员执行工作的机制。

ponyexpress提供了一个web界面,让程序员从维护电子邮件的混乱中解放出来。它还允许从应用程序中的任何位置发送电子邮件的极其简单的机制,包括变量替换和用于报告的自定义标记。



对于高性能应用程序,负载平衡等待smtp连接和响应对性能有很大影响。

消息异步推送到该队列,使应用程序能够分配电子邮件处理负载。

功能。

此外,Ponyexpress还提供Gearman接口,性能更高,还使用
CouchDB记录消息和任何错误。

使用Ponyexpress启动和运行的最简单方法是使用CouchDB
队列方法。它也是最具容错性的服务,因为couchdb是为了插入队列而需要运行的唯一服务。


由于快速事务的折衷
要求Gearman服务器和工作守护进程启动并运行,
此外还有CouchDB,它仍用于消息和错误日志记录。



例如,由于smtp服务关闭或超时,
它会在couchdb中创建一个日志,其中包含错误和重新发送消息所需的详细信息。

这将使开发人员免于创建自己的电子邮件失败例程,as
还提供了一种简单的方法来查看哪些消息失败以及失败的原因。




自定义标记可以传递到发送的每条消息中,以及
在以后的报告中使用。




独立于语言和平台的
使用的,或正在开发的平台。






Ponyexpress入门

======


若要开始,请克隆Git回购并运行安装程序。py

git clone git@github.com:tony landis/Ponyexpress.git
CD Ponyexpress
python setup.py在Linux/Unix上安装
cp default\u settings.cfg









在Windows上设置ponyexpress\u cfg=\full path to\settings.cfg


edit settings.cfg并将SMTP字符串设置为有效主机,然后端口:

smtp_string="mail.server.com 25"


IRED,然后按如下方式设置smtp_字符串:





ponyexpress_cfg=`pwd`/settings.cfg
python ponyexpress/u init_uuu.py

您应该看到:


*运行在http://0.0.0.0:4000/
*重新加载后重新启动…

在这里,您可以管理
电子邮件模板和查看报告。如果运行gearman服务器,ping时间,
作业,工作人员将在此处进行总结。



'{"id":"test","replacements":{"name":"your name","from":"pony express","sig":"这是我的签名行"},"tags":["pony","express"],"recipient\u name":"您的姓名","recipient\u address":"you@you.com","sender\u name":"pony express","sender\u address":"you@you.com"}

嗯,我们应该看到类似的响应,其中id是消息日志的couchdb doc.\u id。

{
"id":"1cbb1b9400396a1b7cb0e7b35b1eecd4",
"result":true
}


演示目的。

您需要再次打开settings.cfg并立即将couch_conn更新到您自己的couch数据库。

要添加报表和列表所需的couchdb视图,运行此命令:

export ponyexpress_cfg=`pwd`/settings.cfg
python manage.py couch_sync

您可以重新启动ponyexpress服务器并添加自己的电子邮件模板。



您可以访问http://127.0.0.1:4000/add_template来添加电子邮件模板。


tag:这是您稍后实际发送电子邮件时将传递的ID
name:帮助您记住模板功能的名称
content type:如果要在正文中输入HTML,请选择html,否则选择纯文本
默认语言:此模板的默认语言。en、es等。
主题:电子邮件
正文的主题行:完整的电子邮件正文

保存模板后,您将有机会添加其他语言的翻译。

您可以在主题和正文中使用替换项,并且发送消息时在替换字典中传递的任何键都将替换为值。


例如:


模板正文:
----
您好$name,
购买$purchase后,您的余额现在是$new_balance。
谢谢,
$sig




购买5个小部件后,您的余额现在是25美元。
谢谢,
窗口小部件团队
1-800-222-3333'




向couchdb队列添加消息(python方法)
--------------------------


最简单的消息排队方法是使用python库。

下面是一个示例,该消息将是存储在couchdb中以供以后处理。

r/>发件人地址='sales@widgets.com',
收件人姓名='john doe',
收件人地址='john@gmail.com',
语言='es',
替换=dict(name='john',new\u balance=25,purchase='5 widgets'),
标记=['newbalance','someothertag]
"
"不使用默认值127.0.0.1:5984,数据库"ponyexpress"
,则需要使用to_couchdb()调用传递该值。否则不要传递配置值。
"
config={'couch_conn':'http://127.0.0.1:5984',"couch-db":"ponyexpress"}
doc=pony.to_couchdb(config=config)
打印文档。



>将消息添加到couchdb队列(非python方法)
库。


只需使用此结构将a文档放入couchdb中:

-h"内容类型:应用程序/json"\
-d'{"文档类型":"ponyexpressmessage"、
"模板":"测试"、
"状态":"排队",
"发件人姓名":"小部件团队"
"发件人地址":"sales@widgets.com"
"收件人姓名":"john doe"
"收件人地址":"john@gmail.com"
"lang":"en"
"替换":{"姓名":"john","新余额":"$25","购买":"5个小部件"},
"tags":["newbalance","someothertag"]}'




使用下面的couchdb方法之一将电子邮件添加到队列中之后,
下一步是处理队列。这样做,只需运行以下命令:

python manage.py queue

不排队的消息(python方法)
——#模板文档。sender_name='小部件团队',
sender_address='sales@widgets.com',
recipient_name='john doe',
recipient_address='john@gmail.com',
lang='es',
replacements=dict(name='john',new_balance=25,purchase='5 widgets'),
tags=['newbalance','someothertag']


"
如果couchdb不使用默认值127.0.0.1:5984,数据库'ponyexpress'
,则需要使用send()调用传递该值。

如果使用localhost:25以外的内容进行SMTP或需要提供
SMTP身份验证,则需要在配置中传递该内容。


否则不要传递配置值。
"
config={'couch-conn':'http://127.0.0.1:5984','couch-db':'ponyexpress',"smtp_u string":"mail.some.com 25 user pass'}
rs=pony.send(config=config)
打印rs






必须首先启动gearman的python工作脚本。这假设您已经在settings.cfg中配置了正确的gearman ip:port,并在该ip:port上运行gearmand服务。


export ponyexpress_cfg=`pwd`/settings.cfg
python run_gearman.py

下面是python的一个示例:

from ponyexpress.gearman_interface import ponyexpressclient
pony=ponyexpressclient(
id='test',模板文档。sender_name='the widget team',
sender_address='sales@widgets.com',
recipient_name='john doe',
收件人地址='john@gmail.com',
语言='es',
替换ents=dict(name='john',new懔balance=25,purchase='5widgets'),
tags=['newbalance','someothertag']


等待_直到_complete=false)
打印"状态":%s%rs.get('result')
打印"文档ID:%s%rs.get('id')

发送并等待响应
rs=pony.to _gearman(['localhost:4730'])
打印"状态":%s%rs.get('result')
打印"文档ID:%s%rs.get('id')

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

推荐PyPI第三方库


热门话题
java语义理解递归反向字符串返回语句   java toString()方法打印空值   java大型IN子句   如何使用JavaSpring在JavaScriptjQuery中设置post路径   java ByteArrayOutputStream已上载到服务器   java为什么轮询在SocketIO上获取数据“无法加载请求的项”?   java源代码应该以UTF8格式保存   Java数据库轮询器?   在Java中将double转换为float   java AccessDeniedException:C:\Windows\System32\drivers\etc\hosts