Phpmailer: Ответить, используя только адрес "Ответить"
Я использую phpmailer на своем веб-сайте и помогаю с проблемами спама. Я создал почтовый ящик для отправки этих писем (используя SMTP).
Я установил адреса электронной почты из адреса почтового ящика, а затем добавил ответ на адрес, где я хочу, чтобы ответы переходили к:
$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);
Письма успешно отправляются и, кажется, проходят через фильтры спама в порядке, , но когда я нажимаю ответ, он включает как учетную запись почтового ящика, так и ответ на счет.
Это то, что должно произойти? Я хочу, чтобы ответ на адрес появлялся, когда вы нажимаете ответ. Возможно ли это?
Большое спасибо за любую помощь!
Edit:
Глядя на заголовки электронной почты, кажется, что адрес отправляется в ответ на поле. Я не знаю, почему!
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
Ответы
Ответ 1
Я нашел ответ на это, и это досадно/разочаровывающе просто! В основном ответ на адреса должен быть добавлен до из адреса:
$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);
}
Спасибо за вашу помощь всем!
Ответ 2
По крайней мере, в текущих версиях PHPMailers существует функция clearReplyTos(), чтобы освободить массив ответов.
$mail->ClearReplyTos();
$mail->addReplyTo([email protected], 'EXAMPLE');