【问题标题】:Weird Django TypeError: send_mail() takes at least 4 arguments (4 given)奇怪的 Django TypeError:send_mail() 至少需要 4 个参数(给定 4 个)
【发布时间】:2014-10-07 14:43:05
【问题描述】:

我正在尝试使用 mailtrap.io 实际测试发送电子邮件,并且我按照指示设置了电子邮件服务器,但是,当我尝试执行以下操作时:

form = InterestedForm(request.POST)
if form.is_valid():
    name = form.cleaned_data['name']
    email = form.cleaned_data['email']
    subject = "Index form: Interested in Ucodon"
    message = 'Name: ' + name + '\n' + 'Email: ' + email
    recipients=['test@gmail.com']
    send_mail(subject, message, recipients, fail_silently=False)
    thanks = True

我收到以下错误:

TypeError: send_mail() takes at least 4 arguments (4 given)

我什至尝试过以下方法:

send_mail(subject=subject, message=message, recipients=recipients, fail_silently=False)

另外,我已经定义了 EMAIL_HOST_USER。我目前正在使用 EMAIL_HOST='mailtrap.io'。

【问题讨论】:

    标签: django mail-server


    【解决方案1】:

    根据documentation

    send_mail(subject, message, from_email, recipient_list, fail_silently=False, auth_user=None, auth_password=None, connection=None, html_message=None)¶
    

    您缺少from_email 参数。

    要么设置它,要么传递None - 在这种情况下,Django 将使用DEFAULT_FROM_EMAIL 设置值:

    send_mail(subject, message, None, recipients, fail_silently=False)
    

    【讨论】:

    • 我认为如果您在您的设置中定义了 EMAIL_HOST_USER,它将默认为 from_email?
    • @ngoctranfire nope,from_email 应该被传入。EMAIL_HOST_USER 将用作 auth_user 参数值,除非提供。
    • @ngoctranfire 另见this example
    • 哇,谢谢!它起作用了,但是,我似乎收到了另一个错误,内容如下:SMTPAuthenticationError:(534,'5.7.14 ... etc....'),其中包含指向我的gmail的链接,但这非常很奇怪,因为我在任何地方(from_email,甚至收件人列表)拥有的所有电子邮件都没有与之关联的任何 gmail 信息。
    • @ngoctranfire 顺便说一句,您还可以设置DEFAULT_FROM_EMAIL 设置,以防您在from_email 中传递None。我已经更新了答案并将其包括在内。
    【解决方案2】:

    主题、消息、发件人电子邮件和收件人是必需的。我没有看到您提供了 from_email。您可以参考https://docs.djangoproject.com/en/dev/topics/email/#send-mail了解更多信息。

    【讨论】:

      猜你喜欢
      • 2017-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多