【问题标题】:Error in Django to show the sender's emailDjango中显示发件人电子邮件的错误
【发布时间】:2019-04-24 17:15:08
【问题描述】:

我正在尝试查看发送给电子邮件主机的发件人电子邮件。我可以使用环境变量向 email_host_user 发送电子邮件,并允许访问 Yahoo 帐户中安全性较低的应用程序。但是,当我执行“from_email”时,我收到一个错误: SMTPSenderRefused--(550, b'Request failed; Mailbox available', 'bill@yahoo.com')--'bill@yahoo.com is just a random sender's电子邮件虽然我无法发送到 email_host。我认为我的views.py肯定有一些问题?感谢您的反馈!

settings.py

EMAIL_HOST='smtp.mail.yahoo.com'
EMAIL_HOST_USER=os.environ.get('EMAIL_HOST_USER')
EMAIL_HOST_PASSWORD=os.environ.get('EMAIL_HOST_PASSWORD')
EMAIL_PORT=587
EMAIL_USE_TLS=True

EMAIL_BACKEND='django.core.mail.backends.smtp.EmailBackend'

print(os.environ.get('EMAIL_HOST_USER'))
print(os.environ.get('EMAIL_HOST_PASSWORD'))
print(os.environ.get('SECRET_KEY'))

views.py

def contact(request):
    if request.method=='POST':
        message=request.POST.get('message', '')
        from_email=request.POST.get('from_email', '')

        send_mail('Contact Form', 
        message,
        from_email,
        [settings.EMAIL_HOST_USER],
        fail_silently=False
        )

    return render(request, 'first_app/contact.html')

contact.html

<form action="/contact" method="POST">
            {% csrf_token %}
            <input type="email" name="from_email" placeholder="Your email">
            <textarea name="message" placeholder="Message...">

            </textarea>
            <input type="submit">
        </form>

【问题讨论】:

    标签: django email sendmail


    【解决方案1】:

    雅虎不允许您通过未经授权的电子邮件发送电子邮件。您只能使用您的EMAIL_HOST_USER 电子邮件地址发送电子邮件。

    您可以将EMAIL_HOST_USER 设置为发件人,并使用通过表单提供的电子邮件地址添加Reply-To 标头。

    您应该为此使用EmailMessage

    from django.core.mail import EmailMessage
    def contact(request):
        if request.method=='POST':
            message=request.POST.get('message', '')
            from_email=request.POST.get('from_email', '')
    
            email = EmailMessage(
                subject='Contact Form',
                message=message,
                from_email=settings.EMAIL_HOST_USER,
                recipient_list=[settings.EMAIL_HOST_USER'],
                reply_to=[from_email]
            )
            email.send(fail_silently=False)
    
    
        return render(request, 'first_app/contact.html')
    
    

    docs

    【讨论】:

    • 感谢 Aman 的全面反馈。我编辑了:``` email = EmailMessage(subject='Contact Form', body=message, from_email=settings.EMAIL_HOST_USER, to=[settings.EMAIL_HOST_USER], reply_to=['from_email'] ) email.send(fail_silently=False )``` 可以发送电子邮件——尽管当我点击“回复”时它显示“收件人:from_email”并且雅虎声明要更正电子邮件地址
    • 实际上,nvm - [from_email] 必须是变量,而不是您建议的字符串。有用!您是否认为这可能是一个问题,因为我的电子邮件主机、密码和密钥位于要在 AWS 中部署的环境变量中?或者我是否需要在部署期间对设置进行任何其他编辑?
    • from_email 是变量..仔细看。
    • 您可以将设置保存为环境变量,也可以将它们保存在一个单独的文件中,任何人都无法访问。
    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 2019-06-07
    • 2021-05-10
    • 1970-01-01
    • 2015-07-31
    相关资源
    最近更新 更多