simplement / mailqueue
适用于 Nette 框架的简单邮件队列。
v0.2
2017-10-18 08:50 UTC
Requires
- kdyby/console: ~2.3
- nette/di: ~2.3
- nette/mail: ~2.3
- tracy/tracy: ~2.3
Requires (Dev)
- kdyby/doctrine: ~3.0
- nette/application: ~2.3
- nette/bootstrap: ~2.3
- nette/neon: ~2.3
- nette/robot-loader: ~2.3
- nette/tester: ~1.5
Suggests
- kdyby/doctrine: With doctrine you can use default mail queue & don't have to implement your own.
This package is not auto-updated.
Last update: 2024-09-28 18:26:33 UTC
README
Simplement\MailQueue 是一个为 Nette 框架设计的轻量级扩展,它将通过自己的 Mailer 类包装默认的 Nette SendmailMailer 或 SmtpMailer。所有待发送的邮件随后被重定向到邮件队列中,默认情况下,该队列通过 Kdyby\Doctrine 实体实现。
如果您不想使用默认的邮件队列,您可以通过扩展 Simplement\MailQueue\IEntry 和 Simplement\MailQueue\IQueue 接口并创建例如文件系统邮件队列来简单地实现自己的邮件队列,而不是数据库系统队列。
然后您可以设置 cron 作业,该作业将在给定的时间间隔内发送前端的邮件,例如使用以下命令:
php www/index.php mailqueue:sendfronted
要求
Nette 框架 和 Kdyby\Console,推荐使用 Kdyby\Doctrine。
好处
- 所有待发送的邮件不会立即发送,而是移动到队列,这样对客户端的响应就会更快。
- 您不需要更新您的当前应用程序代码。所有邮件在设置此扩展后都会自动重定向到邮件队列。
- 如果应用程序无法发送邮件(由于网络连接丢失等原因),应用程序不会崩溃,而是重新安排邮件并在设定的时间间隔内再次尝试发送。
- 您可以设置每封邮件的优先级。
- 您可以设置默认的
from电子邮件地址,如果邮件没有设置它,则将使用此地址。
配置
extensions: # Add MailQueue Extension mailqueue: Simplement\Bridges\MailDI\MailQueueExtension mailqueue: timeLimit: 30 # Max executin time of cron script mailLimit: 50 # Max number of mails sent peer one cron call attemptLimit: 5 # Max number of attempts to send mail rescheduleTime: +30 minutes # If unnable to send mail, try nex attempt after ... defaultSender: 'MyAwesomeApp <myawesomeapp@mail.com>' # Optional # If you want to use default Doctrine Mail Queue services: mailQueue: Simplement\Bridges\DoctrineORM\MailQueue doctrine: metadata: Simplement: %appDir%/../vendor/simplement/mailqueue/src/Bridges/DoctrineORM/Entity
用法
$message = new Nette\Mail\Message; : /** @var Nette\DI\Container $container */ $container = ...; $mailer = $container->getByType('Nette\Mail\IMailer'); or $mailer = $container->getService('mail.mailer'); or $mailer = $container->getService('nette.mailer'); /** @var Simplement\MailQueue\Mailer $mailer */ $mailer->send($message, $priority = 1, $useQueue = TRUE);