복붙노트

동일한 스크립트로 제출시 html 양식에서 PHP로 이메일 전송

PHP

동일한 스크립트로 제출시 html 양식에서 PHP로 이메일 전송

사용자가 HTML 양식을 채운 다음 양식에서 정보를 전자 메일로 보내면 PHP로 전자 메일을 보내려고합니다. 양식이있는 웹 페이지를 표시하는 동일한 스크립트에서이 작업을 수행하려고합니다.

이 코드를 발견했지만 메일이 보내지지 않습니다.

<?php 

if (isset($_POST['submit'])) {
    $to = $_POST['email']; 
    $subject = $_POST['name'];
    $message = getRequestURI();
    $from = "zenphoto@example.com";
    $headers = "From:" . $from;

    if (mail($to, $subject, $message, $headers)) {
        echo "Mail Sent.";
    }
    else {
        echo "failed";
    }
}

?>

PHP로 이메일을 보내는 코드는 무엇입니까?

해결법

  1. ==============================

    1.내가 올바르게 이해하면, 한 페이지에 모든 것을 가지고 동일한 페이지에서 실행하기를 원합니다.

    내가 올바르게 이해하면, 한 페이지에 모든 것을 가지고 동일한 페이지에서 실행하기를 원합니다.

    다음 코드를 사용하여 단일 페이지에서 메일을 보낼 수 있습니다 (예 : index.php 또는 contact.php).

    이 질문과 본래의 대답 사이의 유일한 차이점은 작업이 비어있는

    입니다.

    header ( 'Location : thank_you.php');를 사용하는 것이 더 좋습니다. PHP 핸들러에서 echo 대신에 사용자를 나중에 다른 페이지로 리디렉션합니다.

    <?php 
    if(isset($_POST['submit'])){
        $to = "email@example.com"; // this is your Email address
        $from = $_POST['email']; // this is the sender's Email address
        $first_name = $_POST['first_name'];
        $last_name = $_POST['last_name'];
        $subject = "Form submission";
        $subject2 = "Copy of your form submission";
        $message = $first_name . " " . $last_name . " wrote the following:" . "\n\n" . $_POST['message'];
        $message2 = "Here is a copy of your message " . $first_name . "\n\n" . $_POST['message'];
    
        $headers = "From:" . $from;
        $headers2 = "From:" . $to;
        mail($to,$subject,$message,$headers);
        mail($from,$subject2,$message2,$headers2); // sends a copy of the message to the sender
        echo "Mail Sent. Thank you " . $first_name . ", we will contact you shortly.";
        // You can also use header('Location: thank_you.php'); to redirect to another page.
        }
    ?>
    
    <!DOCTYPE html>
    <head>
    <title>Form submission</title>
    </head>
    <body>
    
    <form action="" method="post">
    First Name: <input type="text" name="first_name"><br>
    Last Name: <input type="text" name="last_name"><br>
    Email: <input type="text" name="email"><br>
    Message:<br><textarea rows="5" name="message" cols="30"></textarea><br>
    <input type="submit" name="submit" value="Submit">
    </form>
    
    </body>
    </html> 
    

    나는 그 질문이 무엇인지 확신 할 수 없었지만, 그 메시지의 사본이 그 형태로 채워진 사람에게 보내 져야한다는 인상하에있다.

    다음은 HTML 폼과 PHP 핸들러의 테스트를 거친 / 작동중인 복사본입니다. 이것은 PHP mail () 함수를 사용합니다.

    PHP 처리기는 양식을 작성한 사람에게도 메시지 사본을 보냅니다.

    사용하지 않으려는 경우 코드 줄 앞에 슬래시 // 두 개를 사용할 수 있습니다.

    예 : // $ subject2 = "양식 제출 사본"; 실행되지 않습니다.

    <!DOCTYPE html>
    <head>
    <title>Form submission</title>
    </head>
    <body>
    
    <form action="mail_handler.php" method="post">
    First Name: <input type="text" name="first_name"><br>
    Last Name: <input type="text" name="last_name"><br>
    Email: <input type="text" name="email"><br>
    Message:<br><textarea rows="5" name="message" cols="30"></textarea><br>
    <input type="submit" name="submit" value="Submit">
    </form>
    
    </body>
    </html>
    

    (HTML 양식의 정보를 사용하고 이메일을 보냅니다)

    <?php 
    if(isset($_POST['submit'])){
        $to = "email@example.com"; // this is your Email address
        $from = $_POST['email']; // this is the sender's Email address
        $first_name = $_POST['first_name'];
        $last_name = $_POST['last_name'];
        $subject = "Form submission";
        $subject2 = "Copy of your form submission";
        $message = $first_name . " " . $last_name . " wrote the following:" . "\n\n" . $_POST['message'];
        $message2 = "Here is a copy of your message " . $first_name . "\n\n" . $_POST['message'];
    
        $headers = "From:" . $from;
        $headers2 = "From:" . $to;
        mail($to,$subject,$message,$headers);
        mail($from,$subject2,$message2,$headers2); // sends a copy of the message to the sender
        echo "Mail Sent. Thank you " . $first_name . ", we will contact you shortly.";
        // You can also use header('Location: thank_you.php'); to redirect to another page.
        // You cannot use header and echo together. It's one or the other.
        }
    ?>
    

    HTML로 보내려면 다음과 같이하십시오.

    메일을 HTML 및 두 인스턴스 모두로 보내려는 경우, 변수 이름이 다른 두 개의 HTML 헤더 집합을 만들어야합니다.

    전자 메일을 HTML로 보내는 방법을 배우려면 mail ()의 설명서를 읽으십시오.

    각주 :

    action 속성을 사용하여 제출 된 데이터를 처리 할 서비스의 URL을 지정해야합니다.

    4.10.1.3 서버와 통신 할 양식 구성의 https://www.w3.org/TR/html5/forms.html에 설명 된대로. 자세한 내용은 해당 페이지를 참조하십시오.

    따라서 action = ""은 HTML5에서 작동하지 않습니다.

    올바른 구문은 다음과 같습니다.

    xxx는 프로세스를 처리하는 데 사용 된 파일 유형의 확장자입니다. .php, .cgi, .pl, .jsp 파일 확장자 등이 될 수 있습니다.

    메일을 보내지 못하는 경우 스택에 대한 다음 Q & A를 참조하십시오.

  2. ==============================

    2.Windows에서 PHP를 통해 이메일을 보내면 잡초와 머리가 긁힌 지뢰밭이됩니다. IIS (Internet Information Services) 인터넷 정보 서비스 웹 서버에서 Windows 7 및 PHP 5.2.3에서 작동하도록 한 인스턴스를 안내하려고합니다.

    Windows에서 PHP를 통해 이메일을 보내면 잡초와 머리가 긁힌 지뢰밭이됩니다. IIS (Internet Information Services) 인터넷 정보 서비스 웹 서버에서 Windows 7 및 PHP 5.2.3에서 작동하도록 한 인스턴스를 안내하려고합니다.

    CodeIgniter 또는 Symfony와 같이 전자 메일 전송 기능이 포함 된 사전 구축 된 프레임 워크를 사용하고 싶지 않다고 가정합니다. 독립 실행 형 PHP 파일에서 전자 메일을 보내 드리겠습니다. 나는 codeigniter hood (system / libraries 아래)에서이 코드를 가져 와서이 Email.php 파일에 넣을 수 있도록 수정했다.

    이것은 최신 버전의 PHP에서 작동합니다. 그러나 당신은 결코 알지 못합니다.

    1 단계 : SMTP 서버에 사용자 이름 / 비밀번호가 필요합니다.

    이미 smtp.ihostexchange.net에서 smtp 서버를 사용하고 있습니다.이 서버는 이미 만들어져 있고 저를 위해 설치되었습니다. 이걸 가지고 있지 않으면 계속할 수 없습니다. Thunderbird, 진화, Microsoft Outlook과 같은 전자 메일 클라이언트를 사용하여 smtp 서버를 지정하고 전자 메일을 보낼 수 있어야합니다.

    2 단계, Hello World 이메일 파일 만들기 :

    나는 당신이 IIS를 사용하고 있다고 가정합니다. 그래서 C : \ inetpub \ wwwroot 아래에 index.php 파일을 만들고이 코드를 거기에 넣으십시오 :

    <?php
    
      include("Email.php");
    
      $c = new CI_Email();
    
      $c->from("FromUserName@foobar.com");
      $c->to("user_to_receive_email@gmail.com");
      $c->subject("Celestial Temple");
      $c->message("Dominion reinforcements on the way.");
      $c->send();
      echo "done";
    ?>
    

    브라우저에서 localhost / index.php로 이동하여 index.php를 방문 할 수 있어야합니다. Email.php가 없기 때문에 오류가 발생합니다. 그러나 적어도 브라우저에서 실행할 수 있는지 확인하십시오.

    3 단계, Email.php라는 파일을 만듭니다.

    C : \ inetpub \ wwwroot 아래에 Email.php라는 새 파일을 만듭니다.

    이 PHP 코드를 Email.php에 복사 / 붙여 넣기하십시오 :

    https://github.com/sentientmachine/standalone_php_script_send_email/blob/master/Email.php

    smtp 서버는 여러 종류가 있으므로 Email.php 상단의 설정을 수동으로 조작해야합니다. 나는 그것이 자동으로 smtp.ihostexchange.net과 함께 작동하도록 설정했지만 smtp 서버는 다를 수 있습니다.

    예 :

    링크 된 코드는 너무 길어서 stackoverflow 답변으로 붙여 넣을 수 없습니다. 편집하려면 여기 또는 github을 통해 주석을 남겨 두십시오. 그러면 변경할 것입니다.

    4 단계, php.ini의 ssl 확장 기능이 활성화되어 있는지 확인하십시오 :

    PHP.ini 파일을 찾아서 주석 처리를 제거하십시오.

    ;extension=php_openssl.dll
    

    그래서 그것은 다음과 같습니다.

    extension=php_openssl.dll
    

    5 단계, 방금 브라우저에서 만든 index.php 파일을 실행하십시오.

    다음과 같은 결과가 나옵니다.

    220 smtp.ihostexchange.net Microsoft ESMTP MAIL Service ready at 
    Wed, 16 Apr 2014 15:43:58 -0400 250 2.6.0 
    <534edd7c92761@summitbroadband.com> Queued mail for delivery 
    lang:email_sent
    
    done
    

    6 단계, 이메일 및 스팸 폴더를 확인하십시오.

    user_to_receive_email@gmail.com에 대한 이메일 계정을 방문하면 이메일을 받았을 것입니다. 5 ~ 10 초 내에 도착해야합니다. 그렇지 않으면 페이지에 표시된 오류를 검사하십시오. 그래도 작동하지 않는다면 외치면서 키보드의 키보드에서 얼굴을 으깨세요. "식료품 가게에서 일하는 것이 그렇게 나쁘지 않습니다."

  3. ==============================

    3.아직 php.ini 파일을보고 [mail function] 설정 아래의 매개 변수가 올바르게 설정되어 있는지 확인하십시오. PHPMailer 라이브러리를 사용하고 지침을 따르십시오.

    아직 php.ini 파일을보고 [mail function] 설정 아래의 매개 변수가 올바르게 설정되어 있는지 확인하십시오. PHPMailer 라이브러리를 사용하고 지침을 따르십시오.

  4. ==============================

    4.당신은 또한 PHP로 메일을 보내려면 만돌린 응용 프로그램을 사용할 수 있습니다. 보내 주신 이메일 및 기타 세부 정보에 대한 자세한 정보는 https://mandrillapp.com/api/docs/index.php.html에서 얻을 수 있습니다.

    당신은 또한 PHP로 메일을 보내려면 만돌린 응용 프로그램을 사용할 수 있습니다. 보내 주신 이메일 및 기타 세부 정보에 대한 자세한 정보는 https://mandrillapp.com/api/docs/index.php.html에서 얻을 수 있습니다.

  5. ==============================

    5.다음과 같이 액션을 폼에 추가해야합니다.

    다음과 같이 액션을 폼에 추가해야합니다.

        <form name='form1' method='post' action='<?php echo($_SERVER['PHP_SELF']);'>
              <!-- All your input for the form here -->
        </form>
    

    그런 다음 스 니펫을 문서 맨 위에 놓고 메일을 보냅니다. 무슨 echo ($ _ SERVER [ 'PHP_SELF']); 당신의 정보를 당신의 스크립트의 맨 위로 보내어 당신이 그것을 사용할 수 있도록하는 것입니다.

  6. ==============================

    6.다음은 내가 사용하는 PHP 메일 설정입니다.

    다음은 내가 사용하는 PHP 메일 설정입니다.

    //Mail sending function
    $subject = $_POST['name'];
    $to = $_POST['email'];
    $from = "zenphoto@example.com";
    
    //data
    $msg = "Your MSG <br>\n";       
    
    //Headers
    $headers  = "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/html; charset=UTF-8\r\n";
    $headers .= "From: <".$from. ">" ;
    
    mail($to,$subject,$msg,$headers);
    echo "Mail Sent.";
    
  7. ==============================

    7.다음을 위해 SMTP 서버가 필요합니다.

    다음을 위해 SMTP 서버가 필요합니다.

    ... mail($to,$subject,$message,$headers);
    

    일하다.

    당신은 xmailer와 같은 경량 SMTP 서버를 시도 할 수 있습니다.

  8. ==============================

    8.원본 코드에서 한 가지 오류가있을 수 있다고 생각합니다.

    원본 코드에서 한 가지 오류가있을 수 있다고 생각합니다.

    $message = echo getRequestURI();
    

    대신에:

    $message = getRequestURI();
    

    (코드는 이후 편집되었습니다.)

  9. from https://stackoverflow.com/questions/18379238/send-email-with-php-from-html-form-on-submit-with-the-same-script by cc-by-sa and MIT license