Интеграция турбомайла с пирамидой


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

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

2 5

2 ответа:

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

Что касается 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 основан на объекте 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)

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