[英]Sending (relatively) large volumes of html e-mail with php
發送大量html電子郵件的最佳方法/類是什么?
(每封郵件都必須包含(從mysql數據庫中獲取)鏈接到其發送地址的信息)
首先,我將所需的信息存儲在臨時表中(不是臨時表,而是完成后刪除的普通表)。
然后,我生成郵件,並隨即刪除已處理的記錄,並將生成的郵件放入“發件箱”表中。
最后,腳本每N分鍾觸發一次,以將M條記錄從“發件箱”表中刪除:它發送一封郵件,然后從發件箱表中刪除該郵件。
為什么使用瞬態表? 因為發生這一切的服務器具有非常嚴格的時間限制。 使用上述方法可以使我部分生成郵件; 您可以安全地重新運行生成階段,而不必擔心會生成重復的郵件。 因此,盡管服務器取消了該工作,但腳本仍在進步。
發送腳本每小時發送(60 / N)* M封郵件,再次在服務器的限制內工作。
我建議使用Pear軟件包Mail( http://pear.php.net/package/Mail )和Mail_Mime( http://pear.php.net/package/Mail_Mime )。
如果需要排隊系統,可以嘗試gearman( http://gearman.org/ )
我使用Zend_Mail 。 以下示例(來自docs )顯示了如何通過單個SMTP連接發送多個郵件:
// Create transport
$config = array('name' => 'sender.example.com');
$transport = new Zend_Mail_Transport_Smtp('mail.example.com', $config);
// Set From & Reply-To address and name for all emails to send.
Zend_Mail::setDefaultFrom('sender@example.com', 'John Doe');
Zend_Mail::setDefaultReplyTo('replyto@example.com','Jane Doe');
// Loop through messages
for ($i = 0; $i < 5; $i++) {
$mail = new Zend_Mail();
$mail->addTo('studio@example.com', 'Test');
$mail->setSubject(
'Demonstration - Sending Multiple Mails per SMTP Connection'
);
$mail->setBodyText('...Your message here...');
$mail->send($transport);
}
// Reset defaults
Zend_Mail::clearDefaultFrom();
Zend_Mail::clearDefaultReplyTo();
您只需要修改循環,即可從數據庫中獲取要發送的每條消息的特定數據。 此外,您將不需要整個框架來使用Zend_Mail
。
看一下: http : //framework.zend.com/manual/en/zend.mail.multiple-emails.html
我認為第一個考慮因素是可能需要花費一些時間來處理-因此不應該作為同步Web請求進行處理-請參閱
這樣就產生了有關創建HTML電子郵件的各種問題。 您可能想看看其中一種用於生成電子郵件本身的現成軟件包,例如phpmailer。 另外,如果內容非常復雜,則可以考慮使用模板系統將其設置為網頁-但切記限制對它的任何外部訪問。 例如
<?php
if ($_SERVER["REMOTE_ADDR"]!='127.0.0.1') {
die ('NO ACCESS!');
}
$send_to=$_GET['email'];
$dbh=mysql_connect(...);
....
然后在您的腳本中:
....
$content=file('http://localhost/generate_email.php?email='
. urlencode($db_row['recipient']));
mail($db_row['recipient'], $subject, $content);
HTH
C。
我喜歡Karim的想法,盡管我會try/catch
通過$mail->send($transport)
進行try/catch
,這樣您可以跟蹤已發送的內容和未發送的內容,並進行相應記錄或在相關內容中進行標記數據庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.