web-dev-qa-db-ja.com

phpmailer:「返信先」アドレスのみを使用して返信する

私は自分のウェブサイトでphpmailerを使用していますが、スパムの問題を解決するために、SMTPを使用してこれらのメールを送信するメールボックスを作成しました。

メールが来るように設定しましたfromメールボックスのアドレスを追加し、返信を送信したい場所のreply toアドレスを追加しました:

$mail = new PHPMailer();

$mail->IsSMTP();
$mail->SMTPAuth   = true;
$mail->SMTPSecure = 'tsl';
$mail->SMTPDebug  = 1;
$mail->Host       = EMAIL_Host;
$mail->Port       = EMAIL_PORT;
$mail->Username   = EMAIL_USER;
$mail->Password   = EMAIL_PASS;

$mail->SetFrom('[email protected]', 'Mailbox name');
$mail->AddReplyTo('[email protected]', 'Reply to name');
$mail->AddAddress('[email protected]', 'User name);

電子メールは正常に送信され、スパムフィルターを通過したようです[OK]、ただし、返信を押すと、メールボックスアカウントとアカウントへの返信の両方が含まれます

これは何を意味するのでしょうか?返信を押したときにアドレスへの返信のみが表示されるようにします。これも可能ですか?

提供されたヘルプに事前に感謝します!


編集:

メールのヘッダーを見ると、差出人アドレスが返信先フィールドに含まれているようです。理由がわかりません!

Date: Tue, 1 May 2012 11:16:25 +0100
To: User name <[email protected]>
From: Mailbox name <[email protected]>
Reply-to: Mailbox name <[email protected]>, Reply to name <[email protected]
Subject: Email subject
Message-ID: <[email protected]>
X-Priority: 3
X-Mailer: PHPMailer 5.1 (phpmailer.sourceforge.net)
MIME-Version: 1.0
Content-Type: multipart/alternative;
     boundary="b1_54c530c0d1f3ff33fc87c4c41c2c9ffd"

--b1_54c530c0d1f3ff33fc87c4c41c2c9ffd
Content-Type: text/plain; charset = "iso-8859-1"
Content-Transfer-Encoding: 8bit
49
chapmanio

私はこれに対する答えを見つけました、そして、それはうっとうしい/イライラするほど簡単です!基本的にアドレスへの返信を追加する必要がありましたbefore fromアドレス:

$mail->AddReplyTo('[email protected]', 'Reply to name');
$mail->SetFrom('[email protected]m', 'Mailbox name');

Phpmailerコードを詳細に見ると、これが問題のある行です。

public function SetFrom($address, $name = '',$auto=1) {
   $address = trim($address);
   $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim
   if (!self::ValidateAddress($address)) {
     $this->SetError($this->Lang('invalid_address').': '. $address);
     if ($this->exceptions) {
       throw new phpmailerException($this->Lang('invalid_address').': '.$address);
     }
     echo $this->Lang('invalid_address').': '.$address;
     return false;
   }
   $this->From = $address;
   $this->FromName = $name;
   if ($auto) {
      if (empty($this->ReplyTo)) {
         $this->AddAnAddress('ReplyTo', $address, $name);
      }
      if (empty($this->Sender)) {
         $this->Sender = $address;
      }
   }
   return true;
}

具体的には次の行:

if (empty($this->ReplyTo)) {
   $this->AddAnAddress('ReplyTo', $address, $name);
}

皆様のご協力に感謝します!

131
chapmanio

少なくとも現在のバージョンのPHPMailersには、返信先の配列を空にするための関数clearReplyTos()があります。

    $mail->ClearReplyTos();
    $mail->addReplyTo([email protected], 'EXAMPLE');
20
Fabian Peter