2013-01-07 97 views
1

我無法設置與使用PHPMailer類發送的郵件一起發送的名稱。PHPMailer更改發件人名稱

我寫了下面的函數,以便它可以以類似的方式在mail()函數中使用php的bulit。

function pmail($to, $subject, $message, $headers = "", $attachments = "") 
{ 
    date_default_timezone_set('Europe/London'); 

    require_once($_SERVER['DOCUMENT_ROOT']."/lib/inc/class.phpmailer.php"); 
    //include($_SERVER['DOCUMENT_ROOT']."/lib/inc/class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded 

    $defaultEmail = "[email protected]"; 
    $defaultEmailName = "Web Mailer"; 

    $mail = new PHPMailer(); 

    $mail->IsSMTP();        // telling the class to use SMTP 
    $mail->Host  = "mail.example.com";   // SMTP server 
    $mail->SMTPDebug = false;      // enables SMTP debug information (for testing, 1 = errors and messages, 2 = messages only, false = off) 
    $mail->SMTPAuth = true;      // enable SMTP authentication 
    //$mail->SMTPSecure = "tls";     // sets the prefix to the servier 
    $mail->Host  = "mail.example.com";   // sets the SMTP server 
    $mail->Port  = 25;       // set the SMTP port for the GMAIL server 
    $mail->Username = "###";      // SMTP account username 
    $mail->Password = "###";      // SMTP account password 
    $mail->SetFrom(($headers['fromEmail'] != "" ? $headers['fromEmail'] : $defaultEmail), ($headers['fromName'] != "" ? $headers['fromName'] : $defaultEmailName)); 
    $mail->AddReplyTo(($headers['replyToEmail'] != "" ? $headers['replyToEmail'] : $defaultEmail), ($headers['replyToName'] != "" ? $headers['replyToName'] : $defaultEmailName)); 
    $mail->AddAddress($to); 
    $mail->Subject = $subject; 
    $mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test 
    $mail->MsgHTML($message); 

    foreach($attachments as $attachment) { 
     //$mail->AddAttachment("images/phpmailer.gif");  // attachment example 
     $mail->AddAttachment($attachment); 
    } 

    if(!$mail->Send()) { 
     //echo "Mailer Error: ".$mail->ErrorInfo; 
     return false; 
    } else { 
     //echo "Message sent!"; 
     return true; 
    } 
} 

當用這樣的東西測試時;

pmail("[email protected]", "test email", "test message here");

一切工作正常時,從地址顯示爲在預期的頭[email protected],但是我在收件人的收件箱中看到名字不是Web Mailer其與用戶衛生組織關聯的默認帳戶憑證用於發送電子郵件。 在標題中,從名稱確實顯示爲網絡郵件程序,但它的收件箱中我想要看到它

我們無法在我們的系統上設置更多用戶帳戶,以允許我們只用一個新帳戶所需的姓名和電子郵件,因此我們必須通過現有的用戶帳戶發送。 在這種情況下,我的電子郵件和我的名字一起發送,但我們希望名稱顯示爲Web Mailer。

這甚至可能嗎?

回答

2

原來我的函數做工作按預期。 因爲我從這個系統收到內部地址的電子郵件,他們都會自動將我帶到他們的地址簿中,因此用於發送電子郵件的地址與我的個人地址相關聯,他們看到我的名字而不是「Web Mailer」 。

使用外部電子郵件帳戶進行測試時,發件人名稱已正確列出。

+0

哈哈我沒有這個,同樣發生在我身上。當使用外部電子郵件地址時,它正確地來了。 –

+1

@MaulikVora煩人的呃?我浪費了這麼多時間。 – Novocaine

+0

是啊@Novocaine,但你救了我在這裏的時間。 ;-) –

1

我曾經用這個PHP代碼,效果不錯:(它顯示的內容的下面,而不是我的Gmail憑證)

$headers = "From: Cartrader UK <[email protected]"; 

。 。 。

if (mail($to, $subject, $msg, $headers)) { 
echo "Mail sent successfully"; 
} else { 
echo "There was some problem sending the E-Mail"; 
} 

也許它可以幫助你。

編輯: 我會嘗試通過setFrom更改行:

$mail->SetFrom($defaultEmail,$defaultEmailName); 
+0

這將具有內置的郵件()函數在PHP工作,使用的PHPMailer類發送但是即時通訊電子郵件和不幸的是這並不完全相同。 – Novocaine

+0

好的,我明白了。還有一件事,你真的需要那個三元運算符嗎?如果你想讓名字顯示爲「Web Mailer」,你可以直接指定它嗎? – johnyTee

+0

不,我現在不需要三元操作符,但是在將來的開發中可能會有一些用途(需要不同的電子郵件地址的多個不同的域網站),這就是爲什麼我這樣實現它。 – Novocaine

2

如果你使用GitHub上的PHP梅勒API,你可以用它來設置發件人名稱:

$mail->SetFrom("$youremail ", "Your Name"); 
+0

我不確定這是OP在尋找什麼,但這是我尋找的東西,所以謝謝! :) –