Turbomail与Pyramid集成

5 投票
2 回答
1002 浏览
提问于 2025-04-16 19:04

我需要一个方法来从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类中指定bodyhtml这两个参数就可以了。

plain_body = render('plain_email.mako', opts, request)
html_body = render('html_email.mako', opts, request)
msg = Message(body=plain_body, html=html_body)

撰写回答