我正在使用PHPMailer,如此示例https://github.com/PHPMailer/PHPMailer/blob/master/examples/gmail.phps所示
我想知道是否有办法使电子邮件传递异步.我对此进行了研究,发现sendmail可以选择将DeliveryMode设置为“后台模式” – 来源http://php.net/manual/en/function.mail.php
mail($to,$subject,$message,$headers,'O DeliveryMode=b');
我想知道在PHPMailer中是否可以做类似的事情?有人有这个成功吗?
编辑: – (附加信息)似乎PHPMailer可以配置为使用sendmail – https://github.com/PHPMailer/PHPMailer/blob/master/class.phpmailer.php
因此,我想知道是否可以某种方式利用它来启用后台交付.
/** * Which method to use to send mail. * Options: "mail","sendmail",or "smtp". * @type string */ public $Mailer = 'mail'; /** * The path to the sendmail program. * @type string */ public $Sendmail = '/usr/sbin/sendmail'; /** * Whether mail() uses a fully sendmail-compatible MTA. * One which supports sendmail's "-oi -f" options. * @type boolean */ public $UseSendmailOptions = true; /** * Send messages using $Sendmail. * @return void */ public function isSendmail() { $ini_sendmail_path = ini_get('sendmail_path'); if (!stristr($ini_sendmail_path,'sendmail')) { $this->Sendmail = '/usr/sbin/sendmail'; } else { $this->Sendmail = $ini_sendmail_path; } $this->Mailer = 'sendmail'; }
另外 – 显然有办法通过PHP.ini设置sendmail选项
http://blog.oneiroi.co.uk/linux/php/php-mail-making-it-not-suck-using-sendmail/
PHPMailer不是一个邮件服务器,这就是你所要求的. SMTP是一种冗长,繁琐的协议,容易出现延迟和吞吐量缓慢,并且绝对不适合在典型的网页提交过程中以交互方式发送(这是BlackHatSamurai可能正在做的问题).许多人正是这样做的,但不要误以为这是一个很好的解决方案,绝对不要试图自己实现MTA.
您链接到的gmail示例使用SMTP到远程服务器,这将始终比在本地提交慢.如果您通过sendmail(或mail() – 它基本上是相同的事情)向本地服务器提交并且它花费的时间超过0.1秒,那么您正在做一些非常错误的事情.即使SMTP到localhost也不会花费太长时间,发送到附近的智能主机也不会太慢.
尝试使用线程来处理背景是一种巨大的蠕虫病毒,而这种方式并不是解决这个问题的方法 – 无论你以何种方式实现,与适当的邮件服务器相比都会很糟糕.只是不要这样做.
正确的方法是安装本地邮件服务器,并使用PHPMailer将消息提交给它.这种方式非常快(每秒数百条消息),并且你必须做任何事情才能使它工作,因为这是PHPMailer默认工作的方式.