2012-05-01 2 views
31

Uso il phpmailer sul mio sito Web e per aiutare con i problemi di spam Ho creato una casella di posta per inviare queste e-mail da (tramite SMTP).phpmailer: Rispondi usando solo l'indirizzo "Rispondi a"

Ho impostato l'email a venire dal l'indirizzo di posta elettronica e poi ho aggiunto un risposta a indirizzo di dove voglio le risposte per andare a:

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

Le e-mail inviate con successo e sembra di passare attraverso i filtri spam ok, ma quando premo rispondi include sia l'account della casella di posta che la risposta all'account.

È questo che si intende per accadere? Voglio solo che la risposta all'indirizzo venga visualizzata quando si preme risposta. È possibile?

Mille grazie in anticipo per qualsiasi aiuto offerto!


Edit:

Guardando le intestazioni dei messaggi sembra che l'indirizzo del mittente è sempre incluso nella risposta al campo. Non ho idea del perché!

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

non quello che mi aspetterei che accada, suona come un problema con il client di posta, provare un altro uno per vedere se questo è il caso –

+0

Puoi esaminare le intestazioni prime di una delle e-mail dello script sta generando? Ciò aiuterebbe a spiegare le cose. – Stuart

+1

Sembra che stia succedendo con tutti i client di posta, guardando le intestazioni che sta definendo il reply-to con entrambi gli indirizzi: 'Rispondi a: nome casella postale <[email protected]>, Rispondi per nominare ' Mi chiedo perché stia succedendo. – chapmanio

risposta

106

Ho trovato la risposta a questo, ed è fastidiosamente/frustrantemente semplice! Fondamentalmente la risposta agli indirizzi necessari da aggiungere prima l'indirizzo del mittente:

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

Guardando il codice phpmailer più in dettaglio questa è la linea incriminata:

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

In particolare questa linea:

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

Grazie per il vostro aiuto a tutti!

+2

Probabilmente usi una versione precedente. Questa non è la buona risposta più. Ho provato diversi modi, phpmailer sembra essere più robusto dei miei trucchi cunny ... Il tuo input sembra sbagliato "$ this-> AddReplyTo" dovrebbe essere "$ smth-> addReplyTo".Cioè, non usare parole comuni (come $ this), e controlla sempre l'ortografia, in questo caso è "addReplyTo" che inizia in minuscolo "aggiungi" – Otvazhnii

+0

In effetti, questo comportamento bacato è stato rimosso da PHPMailer anni fa, quindi questa risposta non si applica più . – Synchro

12

Almeno nelle versioni correnti di PHPMailers, c'è una funzione clearReplyTos() per svuotare l'array di risposta.

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