Я использую 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('mailbox@email.com', 'Mailbox name'); $mail->AddReplyTo('replyto@email.com', 'Reply to name'); $mail->AddAddress('user@email.com', 'User name);
Письма успешно отправляются и, кажется, проходят через фильтры спама в порядке, но когда я нажимаю ответ, он включает как учетную запись почтового ящика, так и ответ на учетную запись .
Это то, что должно случиться? Я хочу, чтобы ответ на адрес появлялся, когда вы нажимаете ответ. Возможно ли это?
Большое спасибо за любую помощь!
Редактировать:
Глядя на заголовки электронной почты, кажется, что адрес отправляется в ответ на поле. Я не имею понятия почему!
Date: Tue, 1 May 2012 11:16:25 +0100 To: User name <user@email.com> From: Mailbox name <mailbox@email.com> Reply-to: Mailbox name <mailbox@email.com>, Reply to name <replyto@email.com Subject: Email subject Message-ID: <54c530c0d1f3ff33fc87c4c41c2c9ffd@localhost> 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
Я нашел ответ на это, и это досадно / разочаровывающе просто! В основном ответ на адреса необходимо было добавить до адреса:
$mail->AddReplyTo('replyto@email.com', 'Reply to name'); $mail->SetFrom('mailbox@email.com', '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); }
Спасибо за вашу помощь всем!
По крайней мере, в текущих версиях PHPMailers существует функция clearReplyTos (), чтобы очистить массив ответов.
$mail->ClearReplyTos(); $mail->addReplyTo(example@example.com, 'EXAMPLE');