0

特定のシナリオに対する答えが見つかりませんでした。

データベースからメーリングリストに出版物を送信するシステムを開発しています。通常の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();

次に、上記で追加したすべての受信者に 1 回の呼び出しで電子メールを送信します。

エラー処理を行って、アドレスが正しくなかったために誰かが受け取っていないかどうかを調べることは可能ですか??

4

1 に答える 1

5

メール操作の成功を追跡する一般的な方法は、電子メールの「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, ...

ここで、「From」ヘッダーは、読者に見せたい実名と電子メール アドレスの選択です。「Return-Path」の主な目的は、不達またはその他のメール システム障害を示すメッセージの宛先アドレスを指定することです。送信されます ([詳細については RFC 2821 を参照してください][1])。

したがって、基本的にこのヘッダーは、配信不能レポートの取得を開始する適切な位置です。

これを行う方法:

  1. すべての配信不能レポートを取得するための一意のサブドメインを作成します (例: return.xyz.com)
  2. 上記のサブドメインに送信されたすべての電子メールを受信するように受信トレイを設定します (電子メール アドレスのローカル部分に関係なく、*@return.xyz.com など)。
  3. メールを一意にする => 1 人の受信者に 1 つの一意のメール (BCC を使用しない)
  4. 受信者 ID (例: 受信者データベースの数値 ID) とメールまたはキャンペーン ID を使用して、将来のローカル部分を生成します (例: {campaign_id}-{recipient_id})
  5. 新しい Return-Path を使用: Return-Path: {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 を使用してみてください。

于 2012-05-02T11:25:44.373 に答える