【问题标题】:When to use API vs SMTP in Django何时在 Django 中使用 API 与 SMTP
【发布时间】:2022-01-15 16:18:12
【问题描述】:

可以使用 API 代替 SMTP 在 Django 中发送邮件,尤其是重置密码和邮件确认等。

如果我能在 django 中获得关于某个主题的澄清,我会非常喜欢。我是 django 的新手,在发送邮件时,我注册了 Mailgun 并使用了 API,因为我之前使用过请求,但是选择 django 来使用我正在尝试使用 DJ-Rest-auth 和 django_allauth 进行用户注册和有关于使用 SMTP 配置电子邮件后端的事情。

我的问题是

  • 如果是,我可以不使用 SMTP 进行 django_allauth 工作流如何连接我的密码重置以使用 api 发送邮件。
  • 当用户注册时,我可以很容易地传入邮件功能,作为视图中的警报

我知道我可以使用 django 发送邮件,但是诸如重置密码之类的东西,它附加了一个 uuid,我该如何使用 API 来处理它

def send_simple_message(name, email, phone, course, mode):
    """ send mail after successful registration. """

    
    return requests.post(
        MAILGUN_BASE_URL,
        auth=("api", MAILGUN_KEY),
        data={"from": "mail <noreply@mail.com>",
            "to": ["mail@cerebrocc.com"],
            "subject": "????????New Student Alert????????",
            "text": f"name: {name}\nemail: {email}\nphone: {phone} Just registered for {course.title()} class and wants the class {mode}!"})
    



class RegistrationAPIView(generics.CreateAPIView):
    """ The Registration API endpoint for cerebro code camp """
    queryset = Registration.objects.all()
    serializer_class = RegistrationSerializer

    def post(self, request, *args, **kwargs):
        serializer = self.serializer_class(data=request.data)
        if serializer.is_valid():
            name = serializer.data['name']
            email = serializer.data['email']
            phone = serializer.data['phone']
            course = serializer.data['course']
            mode = serializer.data['mode']
            send_simple_message(name, email, phone, course, mode)

            return Response(status=status.HTTP_201_CREATED)
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    

【问题讨论】:

  • 既然您提到了 mailgun,我建议您使用 API 而不是他们的 SMTP,因为在 API 中它会自行处理 SSL 连接和其他格式化内容
  • 您可以使用邮件 API 从 Django 发送电子邮件,只要您编写和配置适当的插件来处理它。由于 mailgun 和 Django 都非常流行,因此很可能已经存在这样的插件,您只需将其添加到您的项目中即可。尝试一些简单的谷歌搜索。
  • 为了清楚起见,我对问题进行了一些编辑

标签: python-3.x django email django-rest-framework django-allauth


【解决方案1】:

您不应该编写自己的普通邮件发送函数,您应该始终使用 Django 的内置 send_mail (or related) function(s)并在您的设置中配置自定义电子邮件后端。

如果您需要更改电子邮件的发送方式,您可以编写自己的电子邮件后端。设置文件中的 EMAIL_BACKEND 设置就是后端类的 Python 导入路径。

https://docs.djangoproject.com/en/3.2/topics/email/#defining-a-custom-email-backend

Django 可以在各种情况下自动发送各种电子邮件,因此集中该配置以便 所有 电子邮件发送使用您配置的邮件发送设置非常重要,除非您有特定的理由反对。

鉴于这是一种可插拔的架构,并且 Django 和 Mailgun 都很流行,因此现有的模块允许您通过 Mailgun 发送电子邮件,只需进行如此简单的配置更改:https://djangopackages.org/grids/g/email/

【讨论】:

  • 非常感谢,现在我明白了
猜你喜欢
  • 1970-01-01
  • 2013-01-04
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
  • 2013-10-18
  • 1970-01-01
  • 2017-04-01
  • 1970-01-01
相关资源
最近更新 更多