simplement/mailqueue

适用于 Nette 框架的简单邮件队列。

v0.2 2017-10-18 08:50 UTC

This package is not auto-updated.

Last update: 2024-09-28 18:26:33 UTC


README

Simplement\MailQueue 是一个为 Nette 框架设计的轻量级扩展,它将通过自己的 Mailer 类包装默认的 Nette SendmailMailerSmtpMailer。所有待发送的邮件随后被重定向到邮件队列中,默认情况下,该队列通过 Kdyby\Doctrine 实体实现。

如果您不想使用默认的邮件队列,您可以通过扩展 Simplement\MailQueue\IEntrySimplement\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);