Вопрос по php – phpmailer: Ответить, используя только адрес «Ответить»

43

Я использую phpmailer на своем веб-сайте и для решения проблем со спамом создал почтовый ящик для отправки этих писем (с использованием SMTP).

Я установил электронные письма, чтобы прийтиfrom адрес почтового ящика, а затем я добавилreply to адрес, по которому я хочу получить ответы:

<code>$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);
</code>

Письма успешно отправляются и, похоже, проходят через фильтры спама,but when I press reply it includes both the mailbox account and the reply to account.

Это то, что должно произойти? Я хочу, чтобы ответ на адрес отображался только при нажатии ответа. Это вообще возможно?

Заранее большое спасибо за любую помощь!

Edit:

Глядя на заголовки писем, кажется, что адрес отправителя включается в поле ответа на поле. Я не имею понятия почему!

<code>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
</code>
Я пока не могу ответить на свой вопрос, но, глядя на код phpmailer, это происходит из-за появления кода AddReplyToпосл код SetFrom, и phpmailer добавляет адрес SetFrom в список replyto, если он еще не определен. chapmanio
Похоже, это происходит со всеми почтовыми клиентами, глядя на заголовки, которые он определяет для ответа с обоими адресами:Reply-to: Mailbox name <[email protected]>, Reply to name <[email protected]> Интересно, почему это происходит. chapmanio
Можете ли вы изучить необработанные заголовки одного из писем, которые генерирует скрипт? Это поможет объяснить вещи. Stuart
выследить функцию AddReplyTo () user557846
Не то, что я ожидал бы, звучит как проблема с вашим почтовым клиентом, попробуйте другой, чтобы увидеть, если это так user557846

Ваш Ответ

2   ответа
18

в текущих версиях PHPMailers есть функцияclearReplyTos () очистить массив ответа.

    $mail->ClearReplyTos();
    $mail->addReplyTo([email protected], 'EXAMPLE');
Это именно то, что я искал. Спасибо Vincent
121

и он досадно / досадно прост! В основном нужно добавить ответ на адресад адрес отправителя:

$mail->AddReplyTo('[email protected]', 'Reply to name');
$mail->SetFrom('[email protected]', '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);
}

Спасибо за вашу помощь всем

Вы, наверное, используете раннюю версию. Это уже не хороший ответ. Я пробовал по-разному, phpmailer кажется более надежным, чем мои хитрые уловки ... Ваш ввод кажется неправильным "$ this-> AddReplyTo" должно быть "$ smth-> addReplyTo". То есть, не используйте общие слова (например, $ this), и всегда проверяйте орфографию, в этом случае это «addReplyTo», начинающийся со строчной буквы «add» Otvazhnii
На самом деле, это ошибочное поведение было удалено из PHPMailer много лет назад, поэтому этот ответ больше не применяется. Synchro

Похожие вопросы