2014-04-08 5 views
1

Amazon Web Services에서 호스팅되는 웹 사이트에 표준 문의 양식을 작성하고 있습니다. 다음과 같이 내가 나에게 문제를주고있다 믿는 부분은 다음과 같습니다 위의 코드에서 PHP 메일을받지 못했습니다. AWS에서 호스팅되었습니다.

 $to = "[email protected]"; 

     $name = trim($_POST['name']); 
     $email = trim($_POST['email']); 
     $message = trim($_POST['message']); 

     $subject = "The best email subject of all time."; 

     $message = "Name: $name \r\n Email: $email \r\n Message: $message"; 
     $headers = "From:" . "[email protected]"; 
     $mailsent = mail($to, $subject, $message, $headers); 

     if($mailsent) { 
      if ($js === 'no-js') { 
       header('Location: thankyoupage.php'); 
      } 
      else { 
       $response = array('status' => 'success'); 

       echo json_encode($response); 
      } 
     } 

는 메일이 성공적으로 전송 한 것으로 나타납니다. $mailsent1이고 코드는 { status: 'success' }을 반환합니다. $mailsent의 결과가 true 일 때 메일을받지 못하는 이유를 알아 내는데 어려움이 있습니다.

도움이 필요합니다.^_^

편집 : 이것이 내 질문을 표현하는 나쁜 방법 인 경우 알려주세요. 나는 왜 $mailsent 변수가 'truthy'를 반환하고 메일을받지 못하는지를 알아 내려고 노력하고 있습니다.

+0

@ShankarDamodaran 나는 else 부분이 문자열''no-js ''와 같지 않은'$ js' 변수를 평가한다고 생각합니다. –

+0

당신은 맞습니다. 죄송합니다. 스팸 폴더를 확인 했습니까? –

+0

스팸을 확인했습니다. 거기에는 아무것도 없습니다. 나는 다음의 이메일 제공자를 시도했다 : gmail, yahoo, hotmail –

답변

3

Amazon Web Services에서 호스팅 할 때 표준 PHP 메일 방법이 제대로 작동하지 않습니다. 상당수의 사람들이 이것에 빠져 들었습니다. Amazon SES 서비스를 설정하고 올바르게 작동하게하는 몇 가지 단계가 있습니다.

  1. 아마존 SES에서 검증 된 이메일 주소로 이메일에서 추가. Amazon Web Services 계정에 로그인하십시오. App Services 헤더 아래 SES. 왼쪽 탐색 메뉴에서 확인 된 발신자 - 이메일 주소으로 이동합니다. '새 전자 메일 주소 확인'버튼을 클릭하고 전자 메일 확인 프로세스를 수행하십시오 (간단합니다).

  2. SMTP 자격 증명을 가져옵니다. 귀하의 이메일을 확인한 후 우리가 이전에 탐색 한 Amazon Web Services> SES 관리 페이지 내의 SMTP 서비스으로 이동하십시오. 'Create my SMTP Credentials'버튼을 클릭하십시오. 그것은 한 번만 당신의 자격 증명을 줄 것입니다! 그러므로 나중에 사용할 수 있도록이 어딘가에 저장하십시오.

  3. 양식 처리기를 만듭니다. 양식 제출을 처리 할 PHP 파일을 만듭니다. 나는 단순화하기 위해 PHPMailer 라이브러리를 사용하기로 결정했습니다. 여기에 나를 위해 작동이 일을 가지고 코드는 다음과 같습니다 당신이 시간에 작업을해야

    // get your submitted fields 
        $name = $_POST['name']; 
        $email = $_POST['email']; 
        $message = $_POST['message']; 
    
        // include phpmailer 
        require_once('class.phpmailer.php'); 
    
        try { 
         // smtp settings 
         // set this to true to throw exceptions 
         // if you're running into issues 
         $mail = new PHPMailer(); 
    
         $mail - > IsSMTP(); 
         $mail - > SMTPAuth = true; 
         $mail - > SMTPSecure = "tls"; 
         $mail - > Host = "email-smtp.us-east-1.amazonaws.com"; // be sure this matches your server! can be found in the smtp settings from step 2 
         $mail - > Username = "XXXXXXXXXXXXXXXXXXXXXX"; // your SMTP username from step 2! 
         $mail - > Password = "XXXXXXXXXXXXXXXXXXXXXX"; // your SMTP password from step 2! 
    
         $mail - > SetFrom('[email protected]', 'FromName'); // from email - verified email address in step 1! 
         $mail - > Subject = "Your Email Subject!"; //subject 
         $body = "<strong>The body of your message!</strong>"; // Body of your message 
         $mail - > MsgHTML($body); 
    
         // recipient 
         $mail - > AddAddress("[email protected]", "RecepientName"); // this is where the email will be sent 
    
         // success 
         if ($mail - > Send()) { 
           // woohoo! the mail sent! do your success things here. 
          } 
         } 
    
        // errors :(
        } catch (phpmailerException $e) { 
         echo $e - > errorMessage(); 
        } catch (Exception $e) { 
         echo $e - > getMessage(); 
        } 
    

다음 단계를 수행 한 후. 재미있게 보내십시오.

+0

kyle 나는 당신의 지시를 따르지만, 사람들이 나에게 오류를 준다 :'이메일 주소가 확인되지 않았다. 다음 ID는 EU-WEST-1 지역의 수표에 실패했습니다. send.to.email @ gmail.com' –

+0

안녕하세요 @JorgeB., 1 단계, "확인 이메일을 Amazon SES의 확인 된 이메일 주소에 추가하십시오" ? Amazon SES로 확인하지 않은 이메일 주소 또는 도메인에서 이메일을 보내려고합니다. 계정이 아직 샌드 박스에있는 경우 Amazon SES 사서함 시뮬레이터에서 제공하는 수신자를 제외한 모든 수신자 이메일 주소도 확인해야합니다. Amazon SES는 여러 AWS 지역에 엔드 포인트를 가지고 있으며 이메일 주소 확인 상태는 각 AWS 지역마다 다릅니다. 사용할 AWS 영역의 각 발신자에 대한 확인 프로세스를 완료해야합니다. –

0
$headers = 'MIME-Version: 1.0' . "\r\n"; 
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
$headers .= "From: Coolest guy" . "\r\n"; 

ini_set("sendmail_from","[email protected]".$_SERVER["SERVER_NAME"]); 
mail($to,$subject,$message,$headers); 
+0

위의 코드를 추가하고 싶다. – praba

+0

총에 맞고 댓글을 달아줍니다. –

+0

주사위가 없습니다! 나는 이것을 추가하려고 시도했고 그것은 나에게 같은 행동을주고있다. 어쨌든 도움에 감사드립니다. –

관련 문제