Turbomail与Pyramid集成
我需要一个方法来从Pyramid应用程序发送电子邮件。我知道有一个叫做 pyramid_mailer 的工具,但它似乎在消息类方面功能比较有限。我不太明白是否可以用模板来生成电子邮件的内容。还有,我也没看到关于是否支持富文本的说明,或者它只是简单的纯文本。
之前,我是用 Turbomail 和Pylons框架一起使用的。不过,似乎没有适配器可以让TurboMail在Pyramid中使用。我知道TurboMail可以扩展到其他框架,但我完全不知道从哪里开始做这件事。有谁写过Pyramid的适配器,或者能告诉我需要做些什么吗?
2 个回答
3
你需要安装turbomail。
easy_install turbomail
在你的pyramid项目中创建一个文件(我把我的放在lib文件夹里),内容大概是这样的:
import turbomail
def send_mail(body, author,subject, to):
"""
parameters:
- body content 'body'
- author's email 'author'
- subject 'subject'
- recv email 'to'
"""
conf = {
'mail.on': True,
'mail.transport': 'smtp',
'mail.smtp.server': 'MAIL-SERVER:25',
}
turbomail.interface.start(conf)
message = turbomail.Message(
author = author,
to = to,
subject = subject,
plain = 'This is HTML email',
rich = body,
encoding = "utf-8"
)
message.send()
turbomail.interface.stop()
然后在你的控制器里,你只需要像这样调用这个函数:
#first import this function
from myproject.lib.mymail import send_mail
#some code...
body = "<html><head></head><body>Hello World</body></html>"
author = "mymail@example.com"
subject = "testing turbomail"
to = "mysecondmail@example.com"
send_mail(body, author, subject, to)
4
我不能回答你关于Turbomail的问题,只能说我听说它和Pyramid配合得很好。
关于pyramid_mailer,你可以用和Pyramid渲染所有模板一样的系统来制作你的邮件。
from pyramid.renderers import render
opts = {} # a dictionary of globals to send to your template
body = render('email.mako', opts, request)
另外,pyramid_mailer的Message对象是基于lamson的MailResponse对象,这个对象很稳定,经过了很多测试。
你可以创建一封邮件,里面既有纯文本内容,也有HTML内容,只需要在Message类中指定body
或html
这两个参数就可以了。
plain_body = render('plain_email.mako', opts, request)
html_body = render('html_email.mako', opts, request)
msg = Message(body=plain_body, html=html_body)