2012-07-30 3 views
2

사용자가 메시지를 입력하는 곳이 있으며, 상대방이받는 사람에게 메시지가 전송됩니다. 나는이 스크립트를 여러 번 시도하고 자습서를 훑어 보았지만 잘못된 것을 발견하지 못했습니다. 어떤 아이디어?PHP를 통해 메일을 보낼 수 없습니다.

HTML 형태 :

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" > 
     <?php 
     if(isset($sent)) 
       echo 'Your message has been sent. '; ?> 
     <label for="Name">Name</label><br />     
     <input type="text" class="textbox" size="35" id="Name" name="Name" <?php if(isset($name)) echo "value=\"$name\"";?> /><br /> 
     <label for="Service">Service</label><br /> 
     <input type="text" size="35" class="textbox" id="Service" name="Service" <?php if(isset($subject)) echo"value=\"$subject\"";?> /><br /> 
     <label for="Email">Email</label><br /> 
     <input type="text" size="35" class="textbox" id="Email" name="Email" <?php if(isset($from)) echo"value=\"$from\""; ?> /><br />  
     <label for="message">Message</label><br /> 
     <textarea rows="95" cols="100" id="message" name="message"><?php if(isset($message)) echo"$message"; ?></textarea><br /> 
     <button type="submit">Send Message</button>    
</form> 

PHP :

if(isset($_POST['Name']) && isset($_POST['Email']) && isset($_POST['Service']) && isset($_POST['message'])) { 
    $name = $_POST['Name']; 
    $from = $_POST['Email']; 
    $subject = $_POST['Service']; 
    $to = "[email protected]"; 
    $message = $_POST['message']; 
    mysql_query("INSERT INTO `Contact`(`Name`, `Email`, `Message`, `Service`) VALUES('$name', '$from', '$message', '$subject')"); 
    $headers = "From:".$from; 
    if(mail($to,$subject,$message,$headers)) 
     $msgsent = true; 
} 

감사합니다!

+0

디버깅을 시도 했습니까? mail()이 작동하는지 확인 했습니까? Var_dump ($ msgsent)가 작동하는지 여부를 확인하십시오. –

+0

메일 서버를 설치 했습니까? – asprin

+0

@ Dr.Dan, 예. 디버깅을 시도했는데 양식으로 바로 보내진 모든 정보를 얻을 수 있기 때문에 스크립트가 전송되지 않는다는 것을 확인했습니다. – Andrew

답변

3

(사과를해야 할 수도 있습니다,하지만거야 텍스트 상자에 쉽게 레이아웃 될 수 있음)

먼저 다음 코드로 디버그하십시오.

<?php 

error_reporting(E_ALL); 
ini_set('display_errors', 'on'); 

if (mail('[email protected]', 'test', 'test')) { 
    echo 'Mail Sent'; 
} else { 
    echo 'Mail Failed'; 
} 

?> 

이 스크립트는 디버그하는 데 도움이되는 전자 메일을 보낼 때 오류 메시지를 표시합니다.


하지만,이 댓글의 중요한 부분은, 전자 메일 스크립트가 위의 (SQL 주입뿐만 아니라) 스팸으로 열려 있다는 것입니다. 에 메일 스크립트의 보안 구멍을 잘라내는 데 도움이되는 기능/클래스 중 하나를 사용하는 것이 좋습니다.

롤업하기로 결정 하셨다면 위의 스크립트를 서버에두기 전에 전자 메일 스팸 헤더 주입에 대해 읽어보십시오. 스팸 발송자는 이와 같이 공개 된 스크립트를 발견하면 수천 통의 전자 메일을 매우 빨리 보낼 수 있습니다.

(그리고 PHP 데이터베이스 오브젝트에 대해 읽어 - PDO를 -. MySQL의 주입을 저장하는 동시에)

+0

나는 도전으로 내 자신을 만드는 것으로 갈 것 같아. 그 두 가지를 살펴 보겠습니다.: D 그래서 디버깅을 시도했지만 "mail sent"라는 메시지가 표시되지만 메시지가 수신되지 않습니다. – Andrew

+0

이 경우 서버의 메일 프로그램 (일반적으로 Linux 용 sendmail)이 전자 메일을 수락했습니다. 왜 메일을 보내지 않는지 디버깅해야합니다. 가장 낮은 레벨 ("mail")로 이동하여 거기에서 메시지를 보냅니다. 로깅을 켜서 전자 메일을 보내고 있는지 확인하십시오. 받는 서버를 확인하십시오 (만약 당신이 통제 할 수 있다면) 거절 당할 수있는 이유를 확인하십시오. PHP 비트는 괜찮아 보입니다. 그래서 다음 번에 당신을 도울 수있는 서버 포럼이 필요합니다. – Robbie

0
  1. 서비스 제공 업체가 귀하의 메일을 차단할 수 있습니다. 당신이 전용 서버에있는 경우

  2. 이 주석으로 가야 당신은

    Sreeraj에게 메일 서버를

감사

을 구성 할 수

0

사용이 방법 이 어떤 smpt 연결이 필요하지 복용량 php 이메일 스크립트입니다

<?php 
$to = "[email protected]"; 
$subject = "Test mail"; 
$message = "Hello! This is a simple email message."; 
$from = "[email protected]"; 
$headers = "From:" . $from; 
mail($to,$subject,$message,$headers); 
echo "Mail Sent."; 
?> 
관련 문제