2014-01-24 34 views
1

我正在嘗試爲客戶設置PHPMailer。他有自己的郵件服務器位於某個IP地址。當記者問到給我通過系統發送電子郵件的信息,他給了以下內容:PHPMailer通過本地域發送電子郵件,但是來自普通電子郵件

Host: xx.xxx.x.x 
Port: 25 
Domain: mydomain.local 
Username: [email protected] 
Password: <myemailpassword> 
From: [email protected] 

(他證實被用於外部電子郵件發送)

我試圖建立的PHPMailer通過設置參數到上面的確切命名。

$mail->IsSMTP();      
$mail->SMTPDebug = 1;     
$mail->SMTPAuth = true;    
$mail->SMTPSecure = "ssl";   
$mail->Host  = "xx.xxx.x.x"; 
$mail->Port  = 25;    
$mail->Username = "[email protected]"; 
$mail->Password = <myemailpassword>;   

$mail->SetFrom('[email protected]', 'Webname'); 
$mail->[...] 

我得到了以下錯誤:

Failed to connect to server (0) 

所以我試圖通過telnet發送一封電子郵件,以檢查它是否是客戶的電子郵件服務器或PHPMailer的設置:

telnet xx.xxx.x.x 25 

它通過,我連接到服務器。

helo mydomain.local 

我收到'你好'作爲回覆。這導致我相信這可能是PHPMailer設置在這裏是錯誤的。

我也儘量不使用SMTP:

$mail->Host  = "ssl://xx.xxx.x.x"; 
$mail->Port  = 25;    
$mail->Username = "[email protected]"; 
$mail->Password = "password";   

$mail->SetFrom('[email protected]', 'Webname'); 
$mail->[...] 

再沒有去。我是否在談論這個錯誤?我只是很熟悉設置PHPMailer使用Gmail,所以我不知道可能是什麼問題,因爲我使用的是「個人」電子郵件服務器。

回答

2

感謝Loadparts的幫助。

我仍然不確定問題是什麼,但它似乎已經解決了問題。它可能來自電子郵件服務器端,因爲編碼明智,我沒有改變任何東西。這是我使用的最終代碼。

$mail = new PHPMailer(true); 

    $mail->IsSMTP(); 
    $mail->SMTPAuth = true; 
    $mail->Port  = 25; 
    $mail->Host  = "xx.xxx.x.x"; // SMTP server 
    $mail->Username = "[email protected]"; 
    $mail->Password = <myemailpassword>; 

    $mail->From  = "[email protected]"; 
    $mail->FromName = <Web_Name>; 
    $mail->AddAddress("[email protected]"); 

    $mail->Subject = <Subject>; 
    $mail->AltBody = <Alt_Body> 
    $mail->WordWrap = 80; 

    $body    = "test message"; 
    $mail->MsgHTML($body); 
    $mail->IsHTML(true); 

    $mail->Send(); 
1

我使用測試函數,我知道使用PHPMailer時100%可以測試電子郵件服務器。我不知道爲什麼你有你的問題,但嘗試使用我有的功能(我知道這是凌亂的,但它的伎倆)。只需將所有XXXX替換爲您的信息,並確保您在同一個文件夾中同時擁有class.phpmailer.php和class.smtp.php。

<?php 
error_reporting(E_ALL); 

$toemail = 'XXXX'; 
$toname = 'XXXX'; 
$subject = 'Testing Email Sending...'; 
$bodyhtml = '<H1>yeah</h1>'; 
$bodytext = 'heres Hoping it works'; 
$fromemail = 'XXXX'; 
$fromname = 'XXXX'; 

var_dump(sendemail($toemail,$toname,$subject,$bodyhtml,$bodytext,$fromemail,$fromname)); 


function sendemail($toemail,$toname,$subject,$bodyhtml,$bodytext,$fromemail,$fromname) 
{ 
    require_once("class.phpmailer.php"); 

    $mail = new phpmailer(); 
    $mail->IsSMTP(); 
    $mail->From  = $fromemail; 
    $mail->FromName = $fromname; 

    $mail->Host  = "XXXX"; 
    $mail->SMTPAuth = true;  // turn on SMTP authentication 
    $mail->Username = "XXXX"; // SMTP username 
    $mail->Password = "XXXX"; // SMTP password 
    $mail->Port="25"; 


    $mail->SMTPDebug=true; 


    if(strlen($bodyhtml)>0) { 
     $mail->Body = $bodyhtml; 
     $mail->IsHTML(true); 
     } 
    else if(strlen($bodytext)>0){ 
      $mail->Body = $bodytext; 
    } 

    if(strlen($bodytext)>0 && strlen($bodyhtml)>0){ 
     $mail->AltBody = $bodytext; 
    } 

    $mail->AddReplyto($fromemail,$fromname); 
    $mail->Subject = $subject; 

    // Check if multiple recipients 
    if(preg_match("/;/",$toemail)) 
    { 
     $tmp_email=preg_split("/;/",$toemail); 
     $tmp_contact=preg_split("/;/",$toname); 
     $mail->AddAddress($tmp_email[0], $tmp_contact[0]); 
//  echo "<!-- multi email:".$tmp_email[0]." contact:".$tmp_contact[0]." -->\n"; 
     for($j=1;$j<count($tmp_email);$j++) 
     { 
      if(preg_match("/\@/",$tmp_email[$j])) 
      { $mail->AddCC($tmp_email[$j], $tmp_contact[$j]); 
//    echo "<!-- multi email cc:".$tmp_email[$j]." contact:".$tmp_contact[$j]." -->\n"; 
      } 
     } 
    } 
    else{ 
     $mail->AddAddress($toemail, $toname); 
    } 

    $error= false; 
    if($mail->Send()){  
     $error =true; 
    } 

    // Clear all addresses and attachments for next loop 
    $mail->ClearAddresses(); 
    return $error; 

} 

如果這不起作用,我第一次嘗試將使用80端口 - 通常是不會被阻止,那麼你就可以在獲取SSL上班工作。 PS:因爲它是本地域,所以您可能要考慮將域添加到您的/ etc/hosts中以確保。

祝你好運!

+0

感謝您的回覆。這是我得到的:'SMTP - >錯誤:無法連接到服務器:(0)SMTP錯誤:無法連接到SMTP主機。布爾(假)'。我嘗試使用端口80,並將其添加到主機,它仍然給出了該錯誤。 – RMK

+0

您是否嘗試過使用另一臺SMTP服務器來排除任何防火牆或連接問題? soneone其他人有這個問題,並在這裏解決它自己:http:// stackoverflow。com/questions/17672960/phpmailer-error-smtp-error-failed-to-connect-to-server – Drace

+0

是的,我在同一臺機器上設置了smtp.gmail.com並且PHPMailer工作正常。我也有防火牆關閉只是爲了測試,它仍然給出了同樣的錯誤。 當我做'telnet xx.xxx.x.x 25'連接意味着我不應該通過PHPMailer訪問它嗎? 另外我有ssl啓用。 – RMK