asa*_*ams 66 email django mail-server
我有一个发送电子邮件的Django应用程序.生产服务器有一个电子邮件服务器,但我的本地框没有.我希望能够在本地测试发送电子邮件.有什么方法可以让django不通过电子邮件服务器发送它只打印到文件或控制台?
Dan*_*per 126
您可以将应用程序配置为使用控制台后端发送电子邮件.它将电子邮件写入标准输出而不是发送它们.
更改您的settings.py以包含此行:
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
Run Code Online (Sandbox Code Playgroud)
不要忘记将其移除以进行生产.
Ben*_*end 75
Python有一点点SMTP服务器内置.您可以使用此命令在第二个控制台中启动它:
python -m smtpd -n -c DebuggingServer localhost:1025
Run Code Online (Sandbox Code Playgroud)
这将只打印发送到localhost:1025控制台的所有邮件.
您必须将Django配置为在以下位置使用此服务器settings.py:
EMAIL_HOST = 'localhost'
EMAIL_PORT = 1025
Run Code Online (Sandbox Code Playgroud)
Mat*_*kel 39
您可以将应用程序配置为将电子邮件写入临时文件而不是发送它们(类似于Daniel Hepper的答案).
EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend'
EMAIL_FILE_PATH = 'tmp/email-messages/'
Run Code Online (Sandbox Code Playgroud)
这会将每条新邮件另存为单独的文件.如果您要发送大量电子邮件,并且不想使用回滚,则非常有用.
Jul*_*ier 32
如果您的测试从django.test.testcases.TestCase扩展,则无需执行任何操作.Django将把EmailBackend替换为"特殊"的.然后你可以测试这样发送的内容:
def testMethodThatSendAEmail(self):
...
from django.core import mail
object.method_that_send_email(to='me@example.com')
self.assertEqual(len(mail.outbox), 1)
self.assertEqual(mail.outbox[0].to, ['me@example.com'])
...#etc
Run Code Online (Sandbox Code Playgroud)
outbox对象是一个特殊的对象,在运行python manage.py测试时会被注入到邮件中.
Njo*_*bau 11
caktus有一个很酷的应用程序https://github.com/caktus/django-email-bandit 只需将其添加到您的settings.py文件中:
EMAIL_BACKEND = 'bandit.backends.smtp.HijackSMTPBackend'
BANDIT_EMAIL = 'your_email@example.com'
Run Code Online (Sandbox Code Playgroud)
在您的电子邮件设置之上......所有电子邮件都将转移到'your_email@example.com'
快乐的编码......
rad*_*tek 10
这详细阐述了本杰明的答案.如果我没有像postfix,sendmail或exim这样的本地电子邮件服务器,我测试电子邮件的一种方法是运行python电子邮件服务器.您可以使用sudo在端口25上运行它,或者只使用端口> 1024(保留端口):
python -m smtpd -n -c DebuggingServer localhost:1025
#sudo python -m smtpd -n -c DebuggingServer localhost:25
Run Code Online (Sandbox Code Playgroud)
要使用您当前的django应用程序代码进行测试,您可以暂时更改settings.py以将其包含在botom中:
EMAIL_HOST, EMAIL_PORT, EMAIL_HOST_USER, EMAIL_HOST_PASSWORD = 'localhost', 1025, None, None
Run Code Online (Sandbox Code Playgroud)
现在测试你的电子邮件,或者你可以在另一个终端窗口中的./manage.py shell中执行此操作,如下所示:
python manage.py shell
Run Code Online (Sandbox Code Playgroud)
并粘贴此代码以发送电子邮件:
from django.core.mail import send_mail?
send_mail('Subject here', 'Here is the message.', 'messanger@localhost.com',['any@email.com'], fail_silently=False)
Run Code Online (Sandbox Code Playgroud)
无需使用任何真实的电子邮件,因为您将看到终端中的所有内容.您可以将其转储到适当的容器(如.html)以进行进一步测试.
| 归档时间: |
|
| 查看次数: |
44909 次 |
| 最近记录: |