簡體   English   中英

PHPMailer:使用BCC處理錯誤

[英]PHPMailer: Error handing with BCC

我找不到針對我的特定情況的答案。

我正在開發一個系統,用於將出版物從數據庫發送到郵件列表。 我設法使用普通的loop代碼來做到這一點。

但是,我只想使用循環來添加使用BCC收件人,並且如果有人錯過了它,還可以維護error handling ,例如:

foreach($array as $user){
    $mail->AddBCC( $user['email'], $user['customerName']);
}

try{
    $mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // optional, comment
    $mail->AddReplyTo("noreply@company.com","Company Name");
    $mail->SetFrom('noreply@company.com', 'Company Name');
    $mail->Subject    = "Company| E-Zine";
    $mail->MsgHTML($ezineContent);              

if(!$mail->Send()) {

    //show error msg

} else {

   //show successful msg
}


}catch (phpmailerException $e) {

     //show error msg

}catch (Exception $e) {

     //show error msg
}

$mail->ClearAddresses();

然后,我想使用一個呼叫將電子郵件發送給以上添加的所有收件人。

是否可以進行錯誤處理並查找是否有人因為地址不正確而未收到它?

跟蹤郵件操作成功的一種常見做法是使用電子郵件的“ Return-Path”標頭。

電子郵件及其標題示例:

Return-Path: server@return.xyz.com
Received: from localhost (mx-1-1 [127.0.0.1])
    by mx-1.xyz.com (Postfix) with ESMTP id 3F81556754
    for <jbradler@xyz.com>; Wed,  2 May 2012 12:27:18 +0200 (CEST)
To: jbradler@xyz.com
Subject: test mailing
From: Jens <jbradler@xyz.com>
Message-Id: <20120502102717.763ADA88004@xyz.com>
Date: Wed,  2 May 2012 12:27:17 +0200 (CEST)

Hi Folks, ...

因此,“發件人”標頭是您希望讀者看到的真實姓名和電子郵件地址的選擇,“返回路徑”的主要目的是指定指示未送達或其他郵件系統故障的郵件的地址將被發送([有關更多詳細信息,請參閱RFC 2821] [1])。

因此,基本上,此標頭是開始獲取未送達報告的正確位置。

我將如何做:

  1. 創建一個唯一的子域來獲取所有未送達報告(例如return.xyz.com)
  2. 設置收件箱以捕獲所有發送到上述子域的電子郵件(無論電子郵件地址的本地部分如何,例如*@return.xyz.com)
  3. 使電子郵件變得唯一=>一位收件人一封唯一的電子郵件(不使用密件抄送)
  4. 使用收件人ID(例如您的收件人數據庫的數字ID)以及電子郵件或廣告系列ID來生成將來的本地部分(例如{campaign_id}-{recipient_id})
  5. 使用新的返回路徑: 返回路徑:{campaign_id}-{recipient_id}@return.xyz.com
  6. 創建一些工具來提取傳入的郵件,並從垃圾郵件和臨時通知中過濾掉實際的未送達報告(例如外出郵件)

以下是具有唯一的Return-Path的示例:

Return-Path: 123-456@return.xyz.com
Received: from localhost (mx-1-1 [127.0.0.1])
    by mx-1.xyz.com (Postfix) with ESMTP id 3F81556754
    for <jbradler@xyz.com>; Wed,  2 May 2012 12:27:18 +0200 (CEST)
To: jbradler@xyz.com
Subject: test mailing
From: Jens <jbradler@xyz.com>
Message-Id: <20120502102717.763ADA88004@xyz.com>
Date: Wed,  2 May 2012 12:27:17 +0200 (CEST)

Hi Folks, ...

而已。

編輯-如何通過phpMailer實現:

/* define domain name for non-delivery reports */
define('RETURN_PATH_DOMAIN', 'return.xyz.com');

/* get current campaign id */
$campaignId = 123;

/* loop recipient list and send email */
foreach ($array as $userId => $user) {
  try{
    $mail = new PHPMailer();
    $mail->HeaderLine('Return-Path', $userId . '-' $campaignId . '@' . RETURN_PATH_DOMAIN);
    $mail->To($user['email'], $user['customerName']);
    $mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; 
    $mail->AddReplyTo("noreply@company.com","Company Name");
    $mail->SetFrom('noreply@company.com', 'Company Name');
    $mail->Subject = "Company| E-Zine";
    $mail->MsgHTML($ezineContent);         
    if(!$mail->Send()) {
      // show log
    } else {
      //show successful msg
    }
  } catch (Exception $e) {
    // show error
  }
}

據我所知,使用本地sendmail遇到了問題。 標頭Return-Path被本地MTA的某些配置代替。 如果是這種情況,請嘗試將SMTP用於可用的中繼主機。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM