【发布时间】: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