【问题标题】:Django email: Client does not have permission to send as this senderDjango 电子邮件:客户端无权作为此发件人发送
【发布时间】:2018-01-13 12:14:11
【问题描述】:

我可以使用此 SO 答案中提供的功能通过 smtplib 发送电子邮件:https://stackoverflow.com/a/12424439/614770

from __future__ import print_function

def send_email(user, pwd, recipient, subject, body):
    import smtplib

    FROM = user
    TO = recipient if type(recipient) is list else [recipient]
    SUBJECT = subject
    TEXT = body

    # Prepare actual message
    message = """From: %s\nTo: %s\nSubject: %s\n\n%s
    """ % (FROM, ', '.join(TO), SUBJECT, TEXT)
    try:
        server = smtplib.SMTP('smtp.office365.com', 587)
        server.ehlo()
        server.starttls()
        server.login(user, pwd)
        server.sendmail(FROM, TO, message)
        server.close()
        print('Successfully sent the mail')
    except:
        print('Failed to send mail')


if __name__ == '__main__':
    send_email(
        'my@email.com', 'password', 'my@email.com', 
        'Test Email', 'Can you see this?')

但是,当我尝试通过 django 发送电子邮件时收到以下错误:

settings.py

# Email
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.office365.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'my@email.com'
EMAIL_HOST_PASSWORD = 'password'

命令行

$ python manage.py sendtestemail -v 3 my@email.com

Traceback(最近一次调用最后一次):

文件“manage.py”,第 22 行,在 execute_from_command_line(sys.argv) 中

文件“C:\Program Files\Anaconda2\envs\django_env\lib\site-packages\django\core\management__init__.py”,第 363 行,在 execute_from_command_line utility.execute() 中

文件“C:\Program Files\Anaconda2\envs\django_env\lib\site-packages\django\core\management__init__.py”,第 355 行,执行 self.fetch_command(subcommand).run_from_argv(self.argv)

文件“C:\Program Files\Anaconda2\envs\django_env\lib\site-packages\django\core\management\base.py”,第 283 行,在 run_from_argv self.execute(*args, **cmd_options)

文件“C:\Program Files\Anaconda2\envs\django_env\lib\site-packages\django\core\management\base.py”,第 330 行,执行输出 = self.handle(*args, **选项)

文件“C:\Program Files\Anaconda2\envs\django_env\lib\site-packages\django\core\management\commands\sendtestemail.py”,第 33 行,在句柄接收者列表=kwargs['email'],

文件“C:\Program Files\Anaconda2\envs\django_env\lib\site-packages\django\core\mail__init__.py”,第 62 行,在 send_mail 返回 mail.send()

文件“C:\Program Files\Anaconda2\envs\django_env\lib\site-packages\django\core\mail\message.py”,第 348 行,发送返回 self.get_connection(fail_silently).send_messages([自我])

文件“C:\Program Files\Anaconda2\envs\django_env\lib\site-packages\django\core\mail\backends\smtp.py”,第 111 行,在 send_messages sent = self._send(message)

文件“C:\Program Files\Anaconda2\envs\django_env\lib\site-packages\django\core\mail\backends\smtp.py”,第 127 行,在 _send self.connection.sendmail(from_email, recipients , message.as_bytes(linesep='\r\n'))

文件“C:\Program Files\Anaconda2\envs\django_env\lib\smtplib.py”,第 887 行,在 sendmail 中引发 SMTPDataError(code, resp)

smtplib.SMTPDataError: (550, b'5.7.60 SMTP;客户端无权以此发件人身份发送 [CY1PR0501MB1116.namprd05.prod.outlook.com]')

我是否在 django 中配置错误?

【问题讨论】:

  • 错误信息是明确的。尝试使用真实的发件人/收件人地址。
  • 我刚刚将我的实际电子邮件地址替换为这篇帖子的虚拟地址。
  • 提示:(1) 使用“-v”选项(冗长)将添加有价值的信息。尝试:python manage.py sendtestemail -v 3 my@email.com (2) 尝试控制台后端并查看构建的邮件正文 + 标头:docs.djangoproject.com/en/1.11/topics/email/#console-backend (3) 尝试使用提供的调试服务器通过 Python docs.djangoproject.com/en/1.11/topics/email/… 或(我最喜欢的)Mailcatcher mailcatcher.me
  • 我用详细的错误消息更新了原始帖子。我还尝试在 settings.py 中设置 EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' 并且成功了。
  • 好的,我想我明白了。使用控制台后端时显示的邮件中的“发件人”标头是什么?这个邮件地址是从小时EMAIL_HOST smtp server 知道的吗?

标签: python django office365 smtplib


【解决方案1】:

解决方案是将 DEFAULT_FROM_EMAILSERVER_EMAIL 添加到 settings.py:

# Email
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.office365.com'
EMAIL_HOST_USER = '****@*******.com'
EMAIL_HOST_PASSWORD = '**********'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = '****@*******.com'
SERVER_EMAIL = '****@*******.com'

非常感谢 glenfant 提供帮助的 cmets!

【讨论】:

  • 这就是我想带你去的结论;)
猜你喜欢
  • 2013-02-22
  • 1970-01-01
  • 2011-11-08
  • 2017-10-30
  • 2015-06-23
  • 2015-02-05
  • 1970-01-01
  • 2015-08-16
  • 1970-01-01
相关资源
最近更新 更多