【问题标题】:Django does not send emails via smtpDjango 不通过 smtp 发送电子邮件
【发布时间】:2020-03-05 05:12:26
【问题描述】:

我正在尝试使用 Django 通过 smtp 发送电子邮件。当我尝试发送电子邮件时,我没有收到任何错误,但我的应用程序没有响应并且一直在等待发送电子邮件,但显然它什么也没发送。

我尝试过使用 smtp gmail 和 smtp hotmail,但它不起作用。我已经检查了我的 Windows 防火墙,但它再次无法正常工作。我尝试使用 Python shell 发送电子邮件,但它什么也没发送。

我认为我已经尝试了我在 Stack Overflow 的其他帖子中看到的几乎所有内容。

settings.py:

      EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
      EMAIL_USE_TLS = True
      EMAIL_HOST = 'smtp.office365.com'
      EMAIL_PORT = 587
      EMAIL_HOST_USER = 'myemail@hotmail.com'
      EMAIL_HOST_PASSWORD = 'mypassword'
      SERVER_EMAIL = EMAIL_HOST_USER

mails.py:

    from django.conf import settings
    from django.template.loader import get_template
    from django.core.mail import EmailMultiAlternatives

    class Mail:
    @staticmethod
    def send_complete_order(orden, user):
        subject = 'order sent'
        template = get_template('orders/mails/complete.html')
        content = template.render({
            'user': user
    })

    message = EmailMultiAlternatives(subject, 'Testing', 
                                     settings.EMAIL_HOST_USER, [user.email])

    message.attach_alternative(content, 'text/html')
    message.send()

views.py:

     @login_required(login_url='login')
     def complete(request):
         cart = get_or_create_cart(request)
         order = get_or_create_order(cart, request)

     if request.user.id != order.user_id:
        return redirect('carts:cart')

     order.complete()
     Mail.send_complete_order(order, request.user)

     destroy_cart(request)
     destroy_order(request)

     messages.success(request, "order complete")
     return redirect('index')

【问题讨论】:

  • 添加您的电子邮件发送 django 代码
  • 嗨,我刚刚添加了代码。
  • 尝试发送自己的电子邮件通常是不可靠的。可以试试 MailChimp 或 MailGun 等吗?

标签: python django email smtp


【解决方案1】:

创建安全的 SSL 上下文

context = ssl.create_default_context()
try:
    with smtplib.SMTP_SSL(smtp_mail, port, context=context) as server2:
        server2.login(your_mail, passwort)
        server2.sendmail(mail_from, mail_to, message.as_string())
        print("Successfully sent email")

【讨论】:

  • 嗨,阿尔伯特。哦,感谢您与我分享您的代码,但对我来说它不起作用。它正在发生我上面评论的事情。
猜你喜欢
  • 1970-01-01
  • 2013-07-01
  • 2013-08-22
  • 2014-01-21
  • 2019-05-15
  • 1970-01-01
  • 1970-01-01
  • 2015-03-03
  • 2015-10-09
相关资源
最近更新 更多