首页 文章

Django电子邮件:客户端无权作为此发件人发送

提问于
浏览
1

我可以使用此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'

Command line

$ 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(子命令).run_from_argv(self.argv)文件”C:\ Program Files \ Anaconda2 \ envs \ django_env \ lib \ site-packages \ django \ core \ “管理\ base.py”,第283行,在run_from_argv中自执行(* 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行,在句柄recipient_list = kwargs ['email'],文件”C:\ Progra m文件\ 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([self])文件”C:\ Program Files \ Anaconda2 \ envs \ django_env \ lib \ site-packages \ django \ core \ mail \ backends \ smtp.py“,第111行,在send_messages中发送= self._send(消息)文件”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(代码,resp)smtplib.SMTPDataError:(550,b'5.7.60 SMTP;客户端无权作为此发件人发送[CY1PR0501MB1116.namprd05.prod.outlook.com]')

我在django中错误配置了什么吗?

1 回答

  • 3

    解决方案是将 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的有用评论!

相关问题