2

这里是 Pyramid 的新手,并尝试设置 pyramid_mailer 向自己发送电子邮件:

我在 development.ini 中有:

mail.host = smtp.gmail.com
mail.username = EMAIL@gmail.com
mail.password = PASSWORD
mail.port = 587
mail.ssl = True
[handlers]
keys = console

在我的项目/__init__.py 中:

config.include('pyramid_mailer')

在我的项目/views.py

from pyramid_mailer.mailer import Mailer
from pyramid_mailer import get_mailer
from pyramid_mailer.message import Message
@view_config(renderer="templates/site_view.pt")
def site_view(self):

...

    config.registry['mailer'] = Mailer.from_settings(settings)
    mailer = request.registry['mailer']
    message = Message(subject="It works!",
                      sender="EMAIL@gmail.cm",
                      recipients=["EMAIL@gmail.com"],
                      body="Hey there!")

    mailer.send(message)

我在这里错过了一些非常基本的东西吗?

4

2 回答 2

5

事实上,你错过了一些基本的东西!:-)

.send()是一个延迟发送,它将消息添加到事务管理器。如果您不使用pyramid_tm,则在请求结束时不会发送邮件。事务性电子邮件很好,因为如果在调用之后在您的代码中引发异常send(),则不会发送邮件。

无论如何,让您的代码发送的方法是通过.send_immediately().

于 2012-06-20T20:34:15.933 回答
2

您可能需要检查并使用:

mail.tls = True

无法使用 pyramid_mailer 和 gmail 发送电子邮件

你也可以使用.send_immediately(message, fail_silently=False)

你会有这样的事情:

mail.host = smtp.gmail.com
mail.username = EMAIL@gmail.com
mail.password = PASSWORD
mail.port = 587
mail.tls = True

在您的设置中:

config.include('pyramid_mailer')

进而

mailer = get_mailer(request)
message = Message(subject="It works!",
                  sender="EMAIL@gmail.cm",
                  recipients=["EMAIL@gmail.com"],
                  body="Hey there!")

mailer.send_immediately(message, fail_silently=False)

如果仍然没有工作,您可以使用启用调试

mail.debug = 真

它应该在标准输出中转储 smtp 会话。如果某事没有奏效。你会确切地知道为什么。如果一切都好。

于 2012-06-23T13:17:14.530 回答