2012-11-28 88 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,它會產生這樣的循環。 –