跳转到主要内容

一个可重用的Django应用程序,用于排队发送电子邮件

项目描述

Django Mailer

https://github.com/pinax/django-mailer/actions/workflows/build.yml/badge.svg https://img.shields.io/coveralls/pinax/django-mailer.svg https://img.shields.io/pypi/dm/django-mailer.svg https://img.shields.io/pypi/v/django-mailer.svg https://img.shields.io/badge/license-MIT-blue.svg

django-mailer

django-mailer是一个可重用的Django应用程序,用于排队发送电子邮件。它通过在数据库中存储电子邮件以供稍后发送来实现。这有几个优点

  • 鲁棒性 - 如果您的电子邮件提供商出现故障或暂时出现错误,电子邮件不会丢失。此外,由于 send_mail() 调用始终成功(除非您的数据库无法工作),因此触发电子邮件发送的 HTTP 请求不会崩溃,并且任何正在进行的交易都不会回滚。

  • 正确性 - 当一个出站电子邮件作为事务的一部分创建时,由于它存储在数据库中,它将参与事务。这意味着它将在事务提交后发送,如果事务回滚则根本不会发送。

此外,如果您想确保邮件能够非常快速地发送,并且没有沉重的轮询,django-mailer 提供了一个特定的 PostgreSQL runmailer_pg 命令。它使用 PostgreSQL 的 NOTIFY/LISTEN 功能,以便在邮件被添加到队列后立即发送电子邮件。

限制

文件附件也会暂时存储在数据库中,这意味着如果您发送的文件大小超过几百 KB,您可能会遇到数据库对查询大小的限制。如果发生这种情况,您可能需要回退到使用 Django 的默认邮件后端,或者增加数据库限制(该过程取决于您使用的数据库)。

使用 django-mailer,您无法在 Django 视图函数中知道电子邮件是否实际已发送 - send_mail 函数只是将邮件存储在队列中以供稍后发送。

django-mailer 是作为 Pinax生态系统 的一部分开发的,但它只是一个 Django 应用程序,可以独立于其他 Pinax 应用程序使用。

需求

  • Django >= 2.2

  • 数据库:django-mailer 支持Django支持的所有数据库,以下是一些注意事项

    • SQLite:如果在其他任何东西尝试将项目放入队列时运行 send_mail 命令,您可能会遇到“数据库被锁定”错误。因此,不建议使用 SQLite 与 django-mailer 一起使用。

    • MySQL:开发者没有针对 MySQL 进行测试。

用法

请参阅文档中的 usage.rst

支持

Pinax 文档可在 http://pinaxproject.com/pinax/ 找到。

这是一个由志愿者维护的开源项目,维护者在除本文档以外的其他地方不提供其他支持。对于您发现的错误,您可以提交 GitHub 问题。在提出任何问题的情况下,我们建议您加入 Pinax Slack team 并在那里 ping Pinax 团队,而不是在 GitHub 上创建问题。您也可能在其他编程网站上获得帮助,例如 Stack Overflow

贡献

有关向 django-mailer 贡献补丁的信息,请参阅 CONTRIBUTING.rst

请参阅此 博客文章包括视频 或我们的 如何贡献 部分,了解如何向 Pinax 贡献的概述。对于具体贡献想法,请参阅我们的 贡献方式/我们需要帮助的地方 部分。

我们还强烈推荐您阅读我们的 开源与自我关怀博客文章

行为准则

为了营造一个友好、包容且无骚扰的社区,Pinax项目有一份行为准则。我们要求您将每个人都视为一个与您共享Python、Django和Pinax兴趣的聪明程序员。

Pinax项目博客和Twitter

有关Pinax项目的最新更新和新闻,请关注我们的Twitter账号@pinaxproject,并查看我们的博客

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面