2010-02-18 19 views

回答

2

首先我店,我需要在一個短暫的表(未臨時的信息,只是一個正常的桌子,我完成後放棄)。

然後我生成郵件,刪除已處理的記錄,並將生成的郵件放入「發件箱」表中。

最後,一個腳本每隔N分鐘發送一個郵件,然後從發件箱表中刪除該郵件。

爲什麼是瞬態表?因爲發生這一切的服務器的時間限制非常嚴格。使用上述方法允許我部分生成郵件;您可以安全地重新運行生成階段,而無需擔心生成的重複郵件。因此,儘管服務器將作業中止,但腳本仍在繼續。

發送腳本發送(60/N)* M郵件一小時,再次在服務器的限制內工作。

1

我用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('[email protected]', 'John Doe'); 
Zend_Mail::setDefaultReplyTo('[email protected]','Jane Doe'); 

// Loop through messages 
for ($i = 0; $i < 5; $i++) { 
    $mail = new Zend_Mail(); 
    $mail->addTo('[email protected]', '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

1

我認爲首先要考慮的是,可能需要一些時間來處理 - 所以不應該做一個同步Web請求 - 見

Best way to manage long-running php script?

然後有關於創建HTML電子郵件的各種問題。你可能想看看現成的軟件包之一,例如phpmailer來生成電子郵件本身。或者,如果內容非常複雜,可以考慮將其設置爲網頁,或許使用模板系統 - 但請記住限制對其的任何外部訪問。例如

.... 
$content=file('http://localhost/generate_email.php?email=' 
    . urlencode($db_row['recipient'])); 
mail($db_row['recipient'], $subject, $content); 

HTH

C.:

<?php 
if ($_SERVER["REMOTE_ADDR"]!='127.0.0.1') { 
    die ('NO ACCESS!'); 
} 
$send_to=$_GET['email']; 
$dbh=mysql_connect(...); 
.... 
在腳本

然後

0

我喜歡卡里姆的想法,但我會把try/catch圍繞$mail->send($transport)這種方式,你可以跟蹤什麼有和什麼沒有發送,並相應地記錄或標記在相關的數據庫中。