2012-11-28 61 views
0

我有一个已经开始发送邮件的工作邮件程序脚本。我们需要发送一封电子邮件给大约5,000个电子邮件地址。但我有一些问题。批量邮件问题phpmailer

1.)发送速度非常慢。我猜这是嵌入?图像大小为300 + kb,是否应该像这样减慢发送速度?邮件每分钟发送3封电子邮件。如果我们想要发送电子邮件给5000个收件人,这将花费很多时间。代码是这样的:

$mail->AddEmbeddedImage("rocks.png", "my-attach", "rocks.png"); 
$mail->Body = 'Embedded Image: <img src="cid:my-attach"> 

2.)我们已经注册了一个smtp,它不会限制我们每天发送100封电子邮件。这就像你付费,跟踪发送的消息。当我检查日志时,有重复的消息。有一些收件人被发送两次,奇怪的是它只是试图发送邮件两次,然后移动到下一个电子邮件地址。问题在于它消耗了我们对smtp服务的限制,并在邮件中添加了太多的队列,这使得发送时间更长。我发送的代码是一样的东西:

if(isset($fromaddress)){ 
do{ 
$mail->AddAddress($row['email']); 
$mail->Send(); 
$mail->ClearAddresses(); 
} 
while ($row = mysql_fetch_array ($result)); 
} 

我的查询是这样的:

SELECT * from email where id > 200 

你可能想知道我的查询。由于连接问题,我需要将邮件从停止发送的地方发送出去,所以我创建了一个id列,并将该号码指定为邮件发送到的最后一个电子邮件地址的标识。我不知道这是否明智,但那是我目前所拥有的。有什么建议么?

+0

你使用SMTP服务器吗?这是什么?例如gmail服务器不允许超过100封电子邮件或者每天更多邮件。 –

+0

我们使用我们自己的域名smtp。它不在gmail上,但它也有一个限制,这就是为什么我们在服务时购买了薪水。 –

回答

1
  1. 根据PHPMailer的构建方式,是的,它可能会非常好地减慢它的速度。原因很简单:如果您以附件形式发送邮件,则邮件调用必须知道邮件的确切字节大小。它通过准备它来完成这项工作,其中包括完整阅读图像。这是一个电子邮件的一个非常小的延迟,但如果它必须做5000次......考虑排队和工作人员的方法。

  2. 在您的数据库中添加一个字段,将其称为mailSent,类型为BIT。每次发送一个时,将其设置为1以适合相应的行。要选择电子邮件,请拨打SELECT * FROM mails WHERE mailSent='0' LIMIT 100

+0

它不是一个附件,而是一个嵌入,但我不确定这种情况是否有区别。 –

+1

就邮件格式而言,它们是一样的。如果你是盗链的,你会阅读5000次300kb的阅读。 –

+0

我想你是对的。我确实建议,但我正在为这家公司工作的公司并不想这样做.- 不管怎样,关于第2号,我的查询是不是可以一起使用?它现在已经发送了2000封电子邮件,我不知道如何标记所有一一发送的邮件:/但如果您有任何建议,我愿意接受。 –

0

我不确定它是否是问题第2部分的答案,但是您是否有充分的理由使用do-while循环而不是一段时间?

从我所看到的代码中,第一次迭代将尝试在设置$ row之前添加从$row['email']开始的电子邮件地址?

喜欢的东西:

while ($row = mysql_fetch_array($result)) { 
    $mail->AddAddress($row['email']); 
    //etc 
} 

应该更好地为您。

不知道这应该是一个评论,而不是一个答案,但我不能以任何方式评论。

+0

我想我有点习惯做,因为我使用的Dreamweaver,它会产生这样的循环。 –