防止在 Flask 应用程序中发送 SMTP 电子邮件时出现“不允许发件人域”错误

问题描述 投票:0回答:1

我正在尝试构建一个可以发送 SMTP 电子邮件的 Flask 应用程序。我弄清楚了如何使用 SMTPlib 库发送电子邮件:

from smtplib import SMTP_SSL, SMTP

sender = "[email protected]"
receivers = ["[email protected]"]

message = """From: Ray Drost <[email protected]>
To: Raymon Drost <[email protected]>
Subject: SMTP e-mail test

This is a test e-mail message.
"""

smtpObj = SMTP_SSL(host="smtp.dreamhost.com", port=465)
smtpObj.login("[email protected]", "password censored ;)")
smtpObj.sendmail(sender, receivers, message)
print("Successfully sent email")

但是,当我将相同的代码插入到一个简单的 Flask 应用程序中时,在使用 Postman 向应用程序发送 POST 请求时出现以下错误:

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/flask/app.py", line 2190, in wsgi_app
    response = self.full_dispatch_request()
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/flask/app.py", line 1486, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/flask/app.py", line 1484, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/flask/app.py", line 1469, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/Users/raymondrost/VSCode-Projects/coop-hour-tracker/Backend/API/api.py", line 31, in hourlogging
    smtpObj.sendmail(sender, receivers, message)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/smtplib.py", line 908, in sendmail
    raise SMTPDataError(code, resp)
smtplib.SMTPDataError: (550, b'5.7.1 Sender domain not allowed. Please read: http://dhurl.org/20b D07')
127.0.0.1 - - [30/Aug/2023 13:25:56] "POST /hourlogging HTTP/1.1" 500 -

据我所知,此错误应该是为了防止人们在电子邮件中欺骗域名,但这不是我在这里所做的。

这是 Flask 应用程序的上下文:

from flask import Flask, request, jsonify
from smtplib import SMTP_SSL, SMTP

# Flask API
api = Flask(__name__)

# Hour Logging Endpoint
@api.route('/hourlogging', methods=['POST'])
def hourlogging():
    # Process incoming data
    data = request.json
    try:
        testString = data["test"]
    except:
        print("Error getting data from json")

    sender = "[email protected]"
    receivers = ["[email protected]"]

    message = f"""From: Ray Drost <[email protected]>
    To: Raymon Drost <[email protected]>
    Subject: SMTP e-mail test

    This is a test e-mail message.
    """

    smtpObj = SMTP_SSL(host="smtp.dreamhost.com", port=465)
    smtpObj.login("[email protected]", "password censored ;)")
    smtpObj.sendmail(sender, receivers, message)
    print("Successfully sent email")

    # Return a response
    responseData = {"response": "Email Sent!"}
    return jsonify(responseData)

if __name__ == '__main__':
    api.run()

我尝试联系 Dreamhost(我的电子邮件提供商)支持人员,但他们被难住了。我还尝试过使用 Brevo(以前称为 Sendinblue)的免费 SMTP 计划。它似乎工作正常,只是来自 Flask 应用程序的电子邮件根本无法到达。我认为 Brevo 拒绝发送电子邮件的原因与 Dreamhost 相同,我只是不知道原因是什么。

email flask smtp smtplib dreamhost
1个回答
0
投票

标题中的电子邮件地址似乎不正确。

To: Raymon Drost <[email protected]>
是不是写错了?应该是
[email protected]
吗?

© www.soinside.com 2019 - 2024. All rights reserved.