2012-08-12 50 views
0

我一直在使用以下代碼多年來從我的網站發送電子郵件,但問題在於它有時會多次發送郵件。循環電子郵件代碼

示例:如果我向用戶發送消息,有些人可能會得到5次等等,即使我僅發送給一個人,他可能會得到它3次。

require_once "Mail.php"; 

$from = "xxx Support <[email protected]>"; 
$to = "$name <$email>"; 
$subject = "xxxxx"; 
$body = "xxx"; 

$host = "mail.xxx.com"; 
$username = "noreply+xxx.com"; 
$password = "xzcsd=sfd?hdssc"; 

$headers = array ('From' => $from, 
    'To' => $to, 
    'Subject' => $subject); 
$smtp = Mail::factory('smtp', 
    array ('host' => $host, 
    'auth' => true, 
    'username' => $username, 
    'password' => $password)); 

$mail = $smtp->send($to, $headers, $body); 

if (PEAR::isError($mail)) { 
    echo("<p>" . $mail->getMessage() . "</p>"); 
     }` 
+0

此代碼看起來沒問題。您的問題可能是您對郵件進行循環的方式,或者您從數據庫中獲取電子郵件的方式。你確定你收到_unique_電子郵件地址嗎? – Grampa 2012-08-12 10:25:47

+0

循環在哪裏? – irrelephant 2012-08-12 10:25:57

+0

這段代碼中的錯誤並不明顯。也許它在代碼庫上的某個地方,在實際使用此代碼的部分。 – favoretti 2012-08-12 10:26:00

回答

0

我認爲您可能需要將您的解決方案複雜一點以添加跟蹤。例如,在您的數據庫中添加一個新表格,其中包含發送的每封電子郵件的記錄。

表結構可能類似於

EMAIL_ID(PK) email_source(FK表包括電子郵件) USER_ID(FK到用戶表)

然後你就可以發送電子郵件給這些用戶誰沒有收到這個版本的電子郵件。

這可以幫助您卸載SMTP,或以當天發佈的散裝郵件發送電子郵件。此外,這可以幫助您跟蹤打開電子郵件的用戶或與電子郵件交互的用戶。

希望有所幫助。