【发布时间】:2012-04-11 17:21:33
【问题描述】:
当使用 PEAR 的 Mail 包通过 SMTP 服务器发送时事通讯时,有没有办法指定某种“连接重用”,这样 PHP 脚本就不必为每个单独的邮件创建一个到 SMTP 服务器的新套接字?
这当然是没有将每个收件人的地址只放在一封电子邮件中,这样各个收件人就不会看到彼此的地址。
或者 SMTP 不允许这样做?
【问题讨论】:
当使用 PEAR 的 Mail 包通过 SMTP 服务器发送时事通讯时,有没有办法指定某种“连接重用”,这样 PHP 脚本就不必为每个单独的邮件创建一个到 SMTP 服务器的新套接字?
这当然是没有将每个收件人的地址只放在一封电子邮件中,这样各个收件人就不会看到彼此的地址。
或者 SMTP 不允许这样做?
【问题讨论】:
嗯,我认为最好的解决方案是将每个命运都放入黑碳中。这保证了接收邮件的人不会看到其他邮件地址,并且是比为每个目标发送邮件更好的解决方案
这在php pear Mail包中是可行的。
【讨论】:
PEAR Mail 似乎是一个绝望的案例,但 Zend 的框架已经解决了这个问题,并在脚本运行(并且对象存在)时保持 SMTP 套接字打开:http://framework.zend.com/manual/en/zend.mail.multiple-emails.html
【讨论】:
你应该做的是设置'persist'参数。然后只使用一次工厂方法 - 然后确保它是使用的同一个套接字。
类似这样的:
static $mail;
if (!is_object($mail)) {
$mail = Mail::factory($options['mail_method'], $params);
}
$res = $mail->send($to, $mime_headers, $body);
如果你每次都调用mail::factory,那么就会创建一个新的socket。在上述方式中,您只创建一个套接字。
【讨论】: