【问题标题】:SMTP issue in Django web applicationDjango Web 应用程序中的 SMTP 问题
【发布时间】:2018-09-20 16:48:53
【问题描述】:

我被要求为使用 Django/Python 框架实现的现有程序添加一项功能。此功能将允许用户单击一个按钮,该按钮将显示一个小对话框/表单以输入值。

我确实编写了一些代码,显示电子邮件已发送但实际上并没有发送!

我的代码:

from django.shortcuts import render
from django.core.mail import send_mail


# Create your views here.
def index(request):

    send_mail('Request for a Clause',
    'This is an automated email. Jeff, please submit the case for 1234567',
    'akohan@mycompay.com',
    ['jjohnson@mycompany.com'],
    fail_silently=False)

    return render(request, 'send/index.html')

在项目根目录下,在setting.py我已经添加了SMTP配置:

EMAIL_HOST = 'mail.mycompany.com'
EMIAL_PORT = 587

#EMAIL_HOST_USER = 'akohan@mycompany.com'  ;no need it is on the white list
#EMAIL_HOST_PASSWORD = '' ;no need it is on the white list

EMAIL_USE_TLS = True
EMAIL_USE_SSL = False

我通过输入来运行它:

python manage.py  SendEmailApp

我在这里错过了什么?

【问题讨论】:

  • 为了排除显而易见的问题,您是否仔细检查了电子邮件凭据、SMTP 配置和垃圾邮件文件夹?
  • 另外,你输入“python manage.py SendEmailApp”是什么意思?这不是您使用 django 测试网站的方式。
  • 问候,@ubadub 是的,垃圾邮件文件夹中没有任何内容,就 SMTP 配置而言,我使用 IT 部门运行它。我不确定 TLS 和 SSL 值。当然,两者都不能设置为 True,因为它们是互斥的。所以我设置 SSL=True 和 TLS=False 然后它抛出以下错误: self._sslobj.do_handshake() ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] 错误的版本号 (_ssl.c:1045) [20/Sep/2018 10 :32:22] "GET / HTTP/1.1" 500 119908 现在,唯一可能的设置应该是 SSL=False 和 TLS=True,这次我得到:[20/Sep/2018] "GET / HTTP/1.1" 200 269
  • 再次,我是 Python 新手,但从我在命令行中编写/更新代码后看到的内容,我键入:python manage.py ProjectName
  • settings.pyEMAIL_BACKEND 的值是多少?对于 DEBUG 模式,它通常设置为 'django.core.mail.backends.console.EmailBackend',以便发送的电子邮件显示在控制台中,并且在测试时不会向人们发送垃圾邮件。在生产中,您需要将其更改为 'django.core.mail.backends.smtp.EmailBackend'

标签: python django python-3.x smtplib


【解决方案1】:

就个人而言,我以前在 Django 项目中以这种方式发送过电子邮件,效果很好。您必须允许 SMTP 访问您的电子邮件。

import smtplib

def sendEmail():

    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.starttls()
    server.login('yourEmailAddress@gmail.com', 'yourEmailPassword')

    try:
        server.sendmail('yourEmailAddress@gmail.com', 'emailAddressBeingSentTo', 'messageBeingSent')
    except:
        print('An error occurred when trying to send an email')

    server.quit()

旁注。安全对我来说不是问题,所以我没有检查它。

希望这会有所帮助:)

【讨论】:

  • 我之前尝试过这种方法,它会发送电子邮件,但问题是它不会发送正文。我的意思是收件人会收到电子邮件,但里面没有消息。知道为什么吗?如果这解决了问题,那么我将采用您的解决方案。
  • 这解决了我的问题,但收到的电子邮件是空白的。
  • 如果有消息,它不应该是空的。试着调查一下这个阿米特。 pythonforbeginners.com/code-snippets-source-code/…
  • 上述问题已解决,但现在我需要通过单击 JQuery 对话框/表单上的按钮来调用此例程?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-17
  • 2011-07-06
  • 2011-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多