5

我需要一种从 Pyramid 应用程序发送电子邮件的方法。我知道pyramid_mailer,但它似乎有一个相当有限的消息类。我不明白是否可以使用模板编写来自 pyramid_mailer 的消息来生成电子邮件的正文。此外,我还没有看到任何关于是否支持富文本,或者它是否只是简单的纯文本。

以前,我使用带有 Pylons 框架的Turbomail 。不幸的是,TurboMail for Pyramid 似乎没有任何适配器可用。我知道 TurboMail 可以扩展到其他框架,但不知道我什至会从哪里开始这样的任务。有没有人为 Pyramid 编写过适配器,或者可以指出我需要这样做的正确方向?

4

2 回答 2

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 对象,该对象是稳定且经过良好测试的。

body您可以通过为 Message 类指定or 或html构造函数参数来创建包含纯文本正文和 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)
于 2011-06-07T06:25:06.273 回答
3

你安装 turbomail

easy_install turbomail

在你的金字塔项目中创建一个文件(我把我的放在 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)
于 2011-06-14T07:08:54.743 回答