Интеграция Turbomail с Пирамидой - PullRequest
5 голосов
/ 07 июня 2011

Мне нужен метод для отправки электронного письма из приложения Pyramid. Я знаю о pyramid_mailer , но, похоже, у него довольно ограниченный класс сообщений. Я не понимаю, возможно ли написать сообщения из pyramid_mailer, используя шаблоны для генерации тела письма. Кроме того, я не видел ничего относительно того, поддерживается ли форматированный текст или это просто простой текст.

Ранее я использовал Turbomail с каркасом Pylons. К сожалению, для TurboMail для Pyramid нет доступных адаптеров. Я знаю, что TurboMail может быть расширен для дополнительных фреймворков, но не знаю, с чего бы мне начать такую ​​задачу. Кто-нибудь написал адаптер для Pyramid или может указать мне правильное направление, что потребуется для этого?

Ответы [ 2 ]

4 голосов
/ 07 июня 2011

Я не могу ответить на ваши вопросы о Turbomail, кроме как сказать, что я слышал, что он отлично работает с Pyramid.

Что касается pyramid_mailer, то вполне возможно отображать ваши электронные письма, используя ту же подсистему, которая позволяет отображать пирамидувсе ваши шаблоны.

from pyramid.renderers import render

opts = {} # a dictionary of globals to send to your template
body = render('email.mako', opts, request)

Кроме того, объект сообщения pyramid_mailer основан на объекте lamson MailResponse, который стабилен и хорошо протестирован.

Вы можете создать письмо, состоящее изкак текстовое тело, так и HTML, указав параметры конструктора body или html для класса Message.

plain_body = render('plain_email.mako', opts, request)
html_body = render('html_email.mako', opts, request)
msg = Message(body=plain_body, html=html_body)
3 голосов
/ 14 июня 2011

Вы устанавливаете 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)
...