2014-01-24 6 views
1

고객을 위해 PHPMailer를 설정하려고합니다. 그는 특정 IP 주소에 자신의 메일 서버를 가지고 있습니다. 나에게 시스템을 통해 이메일을 보낼 수있는 정보를 제공하는 물었을 때, 그는 다음 준 :PHPMailer 로컬 도메인을 통해 이메일을 보내지 만 일반 이메일을 보내십시오.

나는를 설정하여 설정 PHPMailer를 시도

(그가 보내는 외부 전자 메일에 사용되는 확인)

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

매개 변수를 위의 정확한 이름으로 변경하십시오.

Failed to connect to server (0) 

그래서 나는 그것이 고객의 이메일 서버 또는 PHPMailer 설정인지 확인 telnet을 통해 이메일을 보내려고 :

$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->[...] 

나는 다음과 같은 오류 가지고

telnet xx.xxx.x.x 25 

를이 간다, 나는 서버에 연결되어있다.

helo mydomain.local 

응답으로 'Hello'가 표시됩니다. 이것은 내가 여기에 잘못된 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->[...] 

을 다시 한번 더 이동합니다. 이 잘못 될 건가요? 필자는 Gmail을 사용하기 위해 PHPMailer를 설정하는 것에 만 익숙하기 때문에 '개인용'전자 메일 서버를 사용하고 있기 때문에 무엇이 문제가 될지 상실했습니다.

답변

2

도움을 주셔서 감사합니다.

여전히 문제가 무엇인지 확실하지 않지만 해결 된 것으로 보입니다. 그것은 현명한 코딩 때문에 이메일 서버 측에서 왔을 수도 있습니다. 나는 아무것도 변경하지 않았습니다. 이것은 내가 사용한 마지막 코드입니다.

$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을 작동하도록 할 수 있습니다.

추신 : 로컬 도메인이기 때문에 확실하게/etc/hosts에 도메인을 추가하는 것이 좋습니다.

행운을 빈다.

+0

답장을 보내 주셔서 감사합니다. 이것이 내가 가진 것입니다 :'SMTP -> ERROR : 서버에 연결하지 못했습니다 : (0) SMTP 오류 : SMTP 호스트에 연결할 수 없습니다. bool (거짓)'. 포트 80을 사용하여 호스트에 추가하려고 시도했지만 여전히 오류가 발생했습니다. – RMK

+0

방금 ​​방화벽이나 연결 문제를 배제하기 위해 다른 SMTP 서버를 사용해 보셨습니까? 다른 사람이이 문제를 가지고 있으며 여기에서 스스로 해결했습니다. http : // stackoverflow.com/questions/17672960/phpmailer-error-smtp-error-to-server-to-connect-to-server – Drace

+0

예 동일한 컴퓨터에서 smtp.gmail.com으로 PHPMailer를 설정 했으므로 정상적으로 작동합니다. 또한 테스트를 위해 방화벽이 꺼져 있으며 여전히 동일한 오류가 발생합니다. ''telnet xx.xxx.x.x 25 '를 연결하면 PHPMailer를 통해 액세스해야 함을 의미하지 않습니까? 또한 ssl을 활성화했습니다. – RMK

관련 문제