glo*_*mph 5 python email django
我有一个应用程序可以导入多个用户电子邮件地址并为它们创建帐户。为了让他们设置自己的密码,我尝试使用 django 的 PasswordResetForm(在 django.contrib.auth.forms 中)。创建用户帐户后立即调用密码重置:
def reset_password(person):
form = PasswordResetForm({'email': person.email})
if form.is_valid():
form.save(from_email='myname@myserver.com')
Run Code Online (Sandbox Code Playgroud)
除了包含执行此操作的单元测试之外,我还没有进一步进行测试:
import password_reset_module
class TestPasswordReset(TestCase):
def setUp(self):
p = Person(email='test@test.com')
def test_send(self):
password_reset_module.reset_password(p)
Run Code Online (Sandbox Code Playgroud)
没有断言,现在我只想通过监视我运行的控制台来查看是否有邮件发送:
python -m smtpd -n -c DebuggingServer localhost:1025
Run Code Online (Sandbox Code Playgroud)
保存表单调用 django 的 send_mail。运行测试用例时,send_mail 方法返回 1。但是,控制台中没有显示任何邮件。奇怪的是从django的交互式shell调用send_mail:
python manage.py shell
Run Code Online (Sandbox Code Playgroud)
工作正常。邮件显示在控制台中。在浏览器中单击忘记密码链接也会导致发送邮件。
我也试过基于文件的电子邮件后端无济于事。当前 settings.py 电子邮件设置:
EMAIL_USE_TLS = False
EMAIL_HOST = 'localhost'
DEFAULT_FROM_EMAIL = 'myname@myserver.com'
EMAIL_HOST_USER = ''
EMAIL_HOST_PASSWORD = ''
EMAIL_PORT = 1025
Run Code Online (Sandbox Code Playgroud)
现在想知道我在调用密码重置时是否遗漏了什么,或者手头是否存在邮件服务器配置问题?
Lut*_*elt 10
在“电子邮件服务”部分, Django 测试文档说:
Django 的测试运行器自动将所有 Django 发送的电子邮件重定向到一个虚拟发件箱。[...] 在测试运行期间,每封外发电子邮件都保存在
django.core.mail.outbox. 这是EmailMessage已发送的所有实例的简单列表。
嗯?
Django 测试运行器实际上会为您配置一个不同的电子邮件后端(称为locmem)。如果您只想进行单元测试(不与实际的电子邮件服务器集成),这是非常方便的,但如果您不知道,则非常令人惊讶。
(我没有使用 Django 测试运行器manage.py test,但它无论如何都会发生,大概是因为我已经
pytest-django安装了它神奇地修改了我的py.test.)
如果您想覆盖覆盖并使用settings模块中给出的电子邮件配置,您需要重新设置的是电子邮件后端的设置,例如:
@django.test.utils.override_settings(
EMAIL_BACKEND='django.core.mail.backends.smtp.EmailBackend')
def test_send_email_with_real_SMTP(self):
...
Run Code Online (Sandbox Code Playgroud)
尝试将其转变为适当的单元测试可能是值得的,当然您可以将其作为自动化测试套件的一部分运行。对于单元测试,检查邮件是否已发送(并在需要时验证邮件内容)的最简单方法可能是使用 Django 的内置内存电子邮件后端 - 您可以简单地使用此上的发件箱属性来获取已发送邮件列表:
https://docs.djangoproject.com/en/dev/topics/email/#in-memory-backend
这样做的优点是不需要任何基础设施设置来支持测试电子邮件发送,使得断言电子邮件内容变得非常简单,并且这也应该使测试速度更快(与实际将电子邮件发送到 SMTP 服务器相比)。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
2460 次 |
| 最近记录: |