2012-05-01 51 views
31

Tôi đang sử dụng phpmailer trên trang web của mình và để trợ giúp về các sự cố spam Tôi đã tạo hộp thư để gửi các email này (sử dụng SMTP).phpmailer: Trả lời chỉ sử dụng địa chỉ "Trả lời Tới"

tôi đã thiết lập các email đến từ địa chỉ hộp thư và sau đó tôi đã thêm một trả lời địa chỉ cho nơi tôi muốn trả lời đến:

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

Các email gửi thành công và dường như nhận được thông qua các bộ lọc thư rác ok, nhưng khi tôi nhấn trả lời nó bao gồm cả tài khoản hộp thư và trả lời cho tài khoản.

Đây có phải là điều gì sẽ xảy ra không? Tôi chỉ muốn trả lời địa chỉ xuất hiện khi bạn nhấn trả lời. Điều này thậm chí có thể?

Rất cám ơn trước vì đã trợ giúp!


Edit:

Nhìn vào tiêu đề email nó có vẻ như từ địa chỉ là nhận được trong email trả lời tới hiện trường. Tôi không biết tại sao!

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 
+0

not what i mong chờ xảy ra, có vẻ như một vấn đề với mail client của bạn, hãy thử một khác để xem nếu điều này là trường hợp –

+0

Bạn có thể kiểm tra các tiêu đề liệu của một trong những email kịch bản được tạo ra? Điều đó sẽ giúp giải thích mọi thứ. – Stuart

+1

Dường như đang xảy ra với tất cả ứng dụng thư khách, xem các tiêu đề, nó xác định thư trả lời với cả hai địa chỉ: 'Trả lời: Tên hộp thư <[email protected]>, Trả lời tên ' Tôi tự hỏi tại sao điều đó lại xảy ra. – chapmanio

Trả lời

106

Tôi đã tìm thấy câu trả lời cho điều này và thật khó chịu/bực bội! Về cơ bản trả lời đến các địa chỉ cần thiết để được thêm trước từ địa chỉ:

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

Nhìn vào mã PHPMailer chi tiết hơn đây là dòng vi phạm:

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; 
} 

Cụ thể dòng này:

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

Cảm ơn sự giúp đỡ của bạn!

+2

Bạn có thể sử dụng phiên bản đầu tiên. Đây không phải là câu trả lời hay nữa. Tôi đã thử những cách khác nhau, phpmailer có vẻ mạnh mẽ hơn so với thủ thuật cunny của tôi ... đầu vào của bạn có vẻ sai "$ this-> AddReplyTo" nên được "$ smth-> addReplyTo".Tức là, không sử dụng các từ thông dụng (như $ this), và luôn kiểm tra chính tả, trong trường hợp này là "addReplyTo" bắt đầu chữ thường "thêm" – Otvazhnii

+0

Thật vậy, hành vi lỗi này đã bị loại bỏ khỏi PHPMailer năm trước, vì vậy câu trả lời này không còn áp dụng nữa . – Synchro

12

Ít nhất trong các phiên bản hiện tại của PHPMailers, có một hàm clearReplyTos() để làm trống mảng trả lời.

$mail->ClearReplyTos(); 
    $mail->addReplyTo([email protected], 'EXAMPLE'); 
Các vấn đề liên quan