복붙노트

PHP 메일 함수가 전자 메일 보내기를 완료하지 않습니다.

PHP

PHP 메일 함수가 전자 메일 보내기를 완료하지 않습니다.

<?php
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $from = 'From: yoursite.com'; 
    $to = 'contact@yoursite.com'; 
    $subject = 'Customer Inquiry';
    $body = "From: $name\n E-Mail: $email\n Message:\n $message";

    if ($_POST['submit']) {
        if (mail ($to, $subject, $body, $from)) { 
            echo '<p>Your message has been sent!</p>';
        } else { 
            echo '<p>Something went wrong, go back and try again!</p>'; 
        }
    }
?>

나는 간단한 메일 양식을 만들려고 노력했다. 양식 자체는 index.html 페이지에 있지만 위의 PHP 코드가 삽입 된 "제출해 주셔서 감사합니다"페이지, thankyou.php에 제출하십시오. 코드는 완벽하게 제출하지만 결코 이메일을 보내지 않습니다. 도와주세요.

해결법

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

    1.

    이 답변의 일부는 themail () 함수 자체에만 적용되지만, 이러한 많은 문제 해결 단계는 모든 PHP 메일 링 시스템에 적용될 수 있습니다.

    스크립트가 전자 메일을 보내지 않는 데는 여러 가지 이유가 있습니다. 확실한 구문 오류가 없으면 이러한 사항을 진단하기가 어렵습니다. 하나도 없으면 발생할 수있는 잠재적 인 함정을 찾기 위해 아래 체크리스트를 실행해야합니다.

    오류보고는 PHP에서 발생하는 일반적인 오류 및 코드의 버그를 근본적으로 해결하는 데 필수적입니다. 이러한 오류를 수신하려면 오류보고를 활성화해야합니다. 다음 코드를 PHP 파일의 맨 위에 (또는 마스터 구성 파일에) 배치하면 오류보고가 가능합니다.

    error_reporting(-1);
    ini_set('display_errors', 'On');
    set_error_handler("var_dump");
    

    자세한 내용은 Stack Overflow 응답을 참조하십시오.

    그것은 어리석은 보일지도 모르지만 일반적인 오류는 실제로 코드에 mail () 함수를 두는 것을 잊는 것입니다. 그것이 거기에 있고 주석 처리되지 않았는지 확인하십시오.

    mail 함수는 세 개의 필수 매개 변수를 취하며 선택적으로 네 번째 및 다섯 번째 매개 변수를가집니다. mail ()에 대한 호출에 세 개 이상의 매개 변수가 없으면 실패합니다.

    mail () 호출에 올바른 매개 변수가 올바른 순서로 없으면 실패합니다.

    웹 서버는 이메일을 보내려는 모든 시도를 기록해야합니다. 이 로그의 위치는 다양합니다 (서버 관리자의 위치는 서버 관리자에게 문의해야 할 수도 있음). 일반적으로 로그의 사용자 루트 디렉토리에서 찾을 수 있습니다. 내부에는 이메일을 보내려는 시도와 관련하여 서버가보고 한 오류 메시지가 포함됩니다.

    포트 블록은 대부분의 개발자가 SMTP를 사용하여 전자 메일을 전달하기 위해 코드를 통합하면서 직면하는 매우 일반적인 문제입니다. 그리고 이것은 서버 maillogs에서 쉽게 추적 할 수 있습니다 (메일 로그의 서버 위치는 위에서 설명한대로 서버마다 다를 수 있음). 공유 호스팅 서버에있는 경우 포트 25 및 587은 기본적으로 차단 된 상태로 유지됩니다. 이 블록은 호스팅 제공 업체에서 의도적으로 수행 한 것입니다. 일부 전용 서버의 경우에도 마찬가지입니다. 이러한 포트가 차단 된 경우 포트 2525를 사용하여 연결을 시도하십시오. 해당 포트도 차단 된 경우 유일한 해결책은 호스팅 제공 업체에 연락하여 이러한 포트의 차단을 해제하는 것입니다.

    대부분의 호스팅 제공 업체는 이러한 전자 메일 포트를 차단하여 네트워크에서 스팸 전자 메일을 보내지 못하게합니다.

    일반 / TLS 연결에는 포트 25 또는 587을 사용하고 SSL 연결에는 포트 465를 사용하십시오. 대부분의 사용자는 일부 호스팅 제공 업체가 설정 한 속도 제한을 피하기 위해 포트 587을 사용하는 것이 좋습니다.

    오류 억제 연산자 @가 PHP의 표현식 앞에 추가되면 해당 표현식에 의해 생성 될 수있는 오류 메시지는 무시됩니다. 이 연산자를 사용해야하는 상황이 있지만 메일을 보내는 것이 그 중 하나가 아닙니다.

    코드에 @mail (...)이 있으면 디버깅하는 데 도움이되는 중요한 오류 메시지가 숨어있을 수 있습니다. @을 제거하고 오류가보고되는지 확인하십시오.

    error_get_last ()를 사용하여 구체적인 실패를 즉시 확인하는 것이 좋습니다.

    mail () 함수는 다음과 같습니다.

    다음과 같은 이유로주의해야합니다.

    그래서 FALSE는 올바른 방향으로 당신을 가리키는 데 도움이되지만 TRUE가 반드시 전자 메일이 성공적으로 전송되었다는 것을 의미하지는 않습니다. 주목할 점은 중요합니다!

    많은 공유 웹 호스트, 특히 무료 웹 호스팅 제공 업체는 해당 서버에서 전자 메일을 보내거나 지정된 기간 동안 보낼 수있는 금액을 제한하지 않습니다. 이는 스패머가 저렴한 서비스를 이용하는 것을 제한하려는 노력 때문입니다.

    주인이 이메일 전송 한도가 있거나 이메일 전송을 차단했다고 생각되면 FAQ를 확인하여 그러한 제한 사항이 있는지 확인하십시오. 그렇지 않으면 전자 메일 발송과 관련하여 제한 사항이 있는지 확인하기 위해 지원 부서에 연락해야 할 수 있습니다.

    종종 여러 가지 이유로 PHP (및 기타 서버 측 프로그래밍 언어)를 통해 보낸 전자 메일은받는 사람의 스팸 폴더에 저장됩니다. 코드 문제를 해결하기 전에 항상 확인하십시오.

    PHP를 통해 보낸 메일이받는 사람의 스팸 폴더로 보내지는 것을 피하기 위해 PHP 코드에서나 다른 방법으로도 이메일에서 스팸으로 표시 될 가능성을 최소화하기 위해 할 수있는 다양한 작업이 있습니다. Michiel de Mare의 유용한 팁은 다음과 같습니다.

    프로그래밍 방식으로 보내는 전자 메일이 스팸으로 자동 표시되지 않도록하려면 어떻게 확인합니까?를 참조하십시오. 이 주제에 대한 자세한 내용은

    일부 스팸 소프트웨어는 "From"및 "Reply-to"와 같은 일반적인 헤더가 누락 된 경우 메일을 거부합니다.

    $headers = array("From: from@example.com",
        "Reply-To: replyto@example.com",
        "X-Mailer: PHP/" . PHP_VERSION
    );
    $headers = implode("\r\n", $headers);
    mail($to, $subject, $message, $headers);
    

    유효하지 않은 헤더는 헤더가없는 것만 큼 나쁨입니다. 잘못된 문자 하나가 귀하의 전자 메일을 탈선시키는 데 모두 사용될 수 있습니다. PHP가 이러한 오류를 포착하지 않으므로 구문이 올바른지 다시 확인하십시오.

    $headers = array("From from@example.com", // missing colon
        "Reply To: replyto@example.com",      // missing hyphen
        "X-Mailer: "PHP"/" . PHP_VERSION      // bad quotes
    );
    

    때로는 문제는 이메일 수신자에게 잘못된 값을 갖는 것처럼 간단합니다. 잘못된 변수를 사용했기 때문일 수 있습니다.

    $to = 'user@example.com';
    // other variables ....
    mail($recipient, $subject, $message, $headers); // $recipient should be $to
    

    이것을 테스트하는 다른 방법은받는 사람 값을 mail () 함수 호출에 하드 코딩하는 것입니다.

    mail('user@example.com', $subject, $message, $headers); 
    

    이것은 모든 mail () 매개 변수에 적용 할 수 있습니다.

    이메일 계정 문제를 배제하려면 다른 이메일 제공 업체의 여러 이메일 계정으로 이메일을 보내십시오. 전자 메일이 사용자의 Gmail 계정에 도착하지 않으면 Yahoo 계정, Hotmail 계정 및 ISP 제공 전자 메일 계정과 같은 일반 POP3 계정으로 동일한 전자 메일을 보내십시오.

    전자 메일이 다른 전자 메일 계정의 일부 또는 전부에 도착하면 코드에서 전자 메일을 보내는 것으로 알고 있지만 전자 메일 계정 공급자가 어떤 이유로 이러한 전자 메일을 차단할 가능성이 있습니다. 전자 메일이 전자 메일 계정에 도착하지 않으면 코드와 관련된 문제가 발생할 가능성이 큽니다.

    양식 메소드를 POST로 설정 한 경우 $ _POST를 사용하여 양식 값을 찾으십시오. GET으로 설정했거나 설정하지 않은 경우 $ _GET을 사용하여 양식 값을 확인하십시오.

    폼 액션 속성이 PHP 메일 링 코드를 가리키는 값을 포함하고 있는지 확인하십시오.

    <form action="send_email.php" method="POST">
    

    일부 웹 호스팅 제공 업체는 서버를 통해 전자 메일을 보내거나 보내지 않도록 설정합니다. 이유는 다양 할 수 있지만 메일 발송을 중지 한 경우 제 3자가 해당 이메일을 보내는 대신 다른 방법을 사용해야합니다.

    기술 지원부에 전자 메일을 보내면 (온라인 지원이나 FAQ를 방문한 후) 서버에서 전자 메일 기능을 사용할 수 있는지 여부를 명확히해야합니다.

    WAMP, MAMP 또는 XAMPP를 사용하여 로컬 워크 스테이션에서 개발중인 경우 전자 메일 서버가 워크 스테이션에 설치되지 않은 것일 수 있습니다. 하나도 없으면 PHP는 기본적으로 메일을 보낼 수 없습니다.

    기본 메일 서버를 설치하여이를 극복 할 수 있습니다. Windows의 경우 무료 Mercury Mail을 사용할 수 있습니다.

    SMTP를 사용하여 전자 메일을 보낼 수도 있습니다. 이를 수행하는 방법을 배우려면 Vikas Dwivedi의 위대한 답변을 참조하십시오.

    MTA 및 PHP의 로그 파일 외에도 mail () 함수에 대한 로깅을 특별히 활성화 할 수 있습니다. 전체 SMTP 상호 작용은 기록하지 않지만 최소한 함수 호출 매개 변수와 호출 스크립트는 기록합니다.

    ini_set("mail.log", "/tmp/mail.log");
    ini_set("mail.add_x_header", TRUE);
    

    자세한 내용은 http://php.net/manual/en/mail.configuration.php를 참조하십시오. php.ini 또는 .user.ini 또는 .htaccess에서 이러한 옵션을 활성화하는 것이 가장 좋습니다.

    MTA / 웹 서버 설정을 테스트하는 데 사용할 수있는 다양한 배달 및 스팸 검사 서비스가 있습니다. 일반적으로 메일 프로브를 다음 주소로 보낸 다음 배달 보고서와 구체적인 실패 또는 분석을 나중에받습니다.

    PHP의 mail () 함수는 매우 유용하며 종종 일을 끝내지 만 단점이 있습니다. 다행스럽게도 위에 설명 된 많은 문제를 처리하는 등 더 많은 권한과 유연성을 제공하는 대안이 있습니다.

    이 모든 것은 전문적인 SMTP 서버 / 서비스 제공 업체와 결합 할 수 있습니다. (일반적인 08/15 공유 웹 호스팅 계획은 이메일 설정 / 구성 가능성과 관련하여 때리거나 맞지 않습니다.)

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

    2.

    메일 기능에 메일 헤더 추가

    $header = "From: noreply@example.com\r\n"; 
    $header.= "MIME-Version: 1.0\r\n"; 
    $header.= "Content-Type: text/html; charset=ISO-8859-1\r\n"; 
    $header.= "X-Priority: 1\r\n"; 
    
    $status = mail($to, $subject, $message, $header);
    
    if($status)
    { 
        echo '<p>Your mail has been sent!</p>';
    } else { 
        echo '<p>Something went wrong, Please try again!</p>'; 
    }
    
  3. ==============================

    3.

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

    4.

    이메일을 보내기 위해 SMTP 구성을 사용하고 있습니까? 대신 phpmailer를 사용해보십시오. https://github.com/PHPMailer/PHPMailer에서 라이브러리를 다운로드 할 수 있습니다. 나는이 방법으로 보내는 나의 전자 우편을 창조했다 :

    function send_mail($email, $recipient_name, $message='')
    {
        require("phpmailer/class.phpmailer.php");
    
        $mail = new PHPMailer();
    
        $mail->CharSet="utf-8";
        $mail->IsSMTP();                                      // set mailer to use SMTP
        $mail->Host = "mail.example.com";  // specify main and backup server
        $mail->SMTPAuth = true;     // turn on SMTP authentication
        $mail->Username = "myusername";  // SMTP username
        $mail->Password = "p@ssw0rd"; // SMTP password
    
        $mail->From = "me@walalang.com";
        $mail->FromName = "System-Ad";
        $mail->AddAddress($email, $recipient_name);
    
        $mail->WordWrap = 50;                                 // set word wrap to 50 characters
        $mail->IsHTML(true);                                  // set email format to HTML (true) or plain text (false)
    
        $mail->Subject = "This is a Sampleenter code here Email";
        $mail->Body    = $message;
        $mail->AltBody = "This is the body in plain text for non-HTML mail clients";    
        $mail->AddEmbeddedImage('images/logo.png', 'logo', 'logo.png');
        $mail->addAttachment('files/file.xlsx');
    
        if(!$mail->Send())
        {
           echo "Message could not be sent. <p>";
           echo "Mailer Error: " . $mail->ErrorInfo;
           exit;
        }
    
        echo "Message has been sent";
    }
    
  5. ==============================

    5.

    메일을 보내기 전에 몇 가지 헤더를 추가하십시오.

    <?php 
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $from = 'From: yoursite.com'; 
    $to = 'contact@yoursite.com'; 
    $subject = 'Customer Inquiry';
    $body = "From: $name\n E-Mail: $email\n Message:\n $message";
    
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/html\r\n";
    $headers .= 'From: from@example.com' . "\r\n" .
    'Reply-To: reply@example.com' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();
    
    mail($to, $subject, $message, $headers);
    

    그리고 하나 더. mail () 함수가 localhost에서 작동하지 않습니다. 코드를 서버에 업로드하고 시도하십시오.

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

    6.

    그것은 다음을 수행하여 000webhost에서 나를 위해 일했습니다 :

    $headers  = "MIME-Version: 1.0" . "\r\n";
    $headers .= "Content-type: text/html; charset=iso-8859-1" . "\r\n";
    $headers .= "From: ". $from. "\r\n";
    $headers .= "Reply-To: ". $from. "\r\n";
    $headers .= "X-Mailer: PHP/" . phpversion();
    $headers .= "X-Priority: 1" . "\r\n"; 
    

    이메일을 보낼 때 이메일 주소를 직접 입력하십시오.

    mail('email@gmail.com', $subject, $message, $headers)
    

    ''이 아닌 ''을 사용하십시오. "

    이 코드는 작동하지만 전자 메일은 30 분 지연되어 수신되었습니다.

  7. ==============================

    7.

    대부분 mail () 함수는 공유 호스팅에서 사용할 수 없습니다. 더 나은 옵션은 SMTP를 사용하는 것입니다. 가장 좋은 옵션은 Gmail 또는 SendGrid입니다.

    SMTPconfig.php

    <?php 
        $SmtpServer="smtp.*.*";
        $SmtpPort="2525"; //default
        $SmtpUser="***";
        $SmtpPass="***";
    ?>
    

    SMTPmail.php

    <?php
    class SMTPClient
    {
    
        function SMTPClient ($SmtpServer, $SmtpPort, $SmtpUser, $SmtpPass, $from, $to, $subject, $body)
        {
    
            $this->SmtpServer = $SmtpServer;
            $this->SmtpUser = base64_encode ($SmtpUser);
            $this->SmtpPass = base64_encode ($SmtpPass);
            $this->from = $from;
            $this->to = $to;
            $this->subject = $subject;
            $this->body = $body;
    
            if ($SmtpPort == "") 
            {
                $this->PortSMTP = 25;
            }
            else
            {
                $this->PortSMTP = $SmtpPort;
            }
        }
    
        function SendMail ()
        {
            $newLine = "\r\n";
            $headers = "MIME-Version: 1.0" . $newLine;  
            $headers .= "Content-type: text/html; charset=iso-8859-1" . $newLine;  
    
            if ($SMTPIN = fsockopen ($this->SmtpServer, $this->PortSMTP)) 
            {
                fputs ($SMTPIN, "EHLO ".$HTTP_HOST."\r\n"); 
                $talk["hello"] = fgets ( $SMTPIN, 1024 ); 
                fputs($SMTPIN, "auth login\r\n");
                $talk["res"]=fgets($SMTPIN,1024);
                fputs($SMTPIN, $this->SmtpUser."\r\n");
                $talk["user"]=fgets($SMTPIN,1024);
                fputs($SMTPIN, $this->SmtpPass."\r\n");
                $talk["pass"]=fgets($SMTPIN,256);
                fputs ($SMTPIN, "MAIL FROM: <".$this->from.">\r\n"); 
                $talk["From"] = fgets ( $SMTPIN, 1024 ); 
                fputs ($SMTPIN, "RCPT TO: <".$this->to.">\r\n"); 
                $talk["To"] = fgets ($SMTPIN, 1024); 
                fputs($SMTPIN, "DATA\r\n");
                $talk["data"]=fgets( $SMTPIN,1024 );
                fputs($SMTPIN, "To: <".$this->to.">\r\nFrom: <".$this->from.">\r\n".$headers."\n\nSubject:".$this->subject."\r\n\r\n\r\n".$this->body."\r\n.\r\n");
                $talk["send"]=fgets($SMTPIN,256);
                //CLOSE CONNECTION AND EXIT ... 
                fputs ($SMTPIN, "QUIT\r\n"); 
                fclose($SMTPIN); 
                // 
            } 
            return $talk;
        } 
    }
    ?>
    

    contact_email.php

    <?php 
    include('SMTPconfig.php');
    include('SMTPmail.php');
    if($_SERVER["REQUEST_METHOD"] == "POST")
    {
        $to = "";
        $from = $_POST['email'];
        $subject = "Enquiry";
        $body = $_POST['name'].'</br>'.$_POST['companyName'].'</br>'.$_POST['tel'].'</br>'.'<hr />'.$_POST['message'];
        $SMTPMail = new SMTPClient ($SmtpServer, $SmtpPort, $SmtpUser, $SmtpPass, $from, $to, $subject, $body);
        $SMTPChat = $SMTPMail->SendMail();
    }
    ?>
    
  8. ==============================

    8.

    mail () 함수 만 사용하는 경우 구성 파일을 완료해야합니다.

    메일 확장을 열고 SMTP smtp_port 등을 설정해야하며 가장 중요한 것은 사용자 이름과 암호입니다. 그것 없이는 메일을 보낼 수 없습니다. 또한 PHPMail 클래스를 사용하여 보낼 수 있습니다.

  9. ==============================

    9.

    이 두 가지를 개별적으로 또는 함께 시도해보십시오.

  10. ==============================

    10.

    당신은 codeigniter에 의해 설정 이메일을 사용할 수 있습니다. smtp를 사용하는 예제 (간단한 방법) :

    $config = Array(
            'protocol' => 'smtp',
            'smtp_host' => 'mail.domain.com', //your smtp host
            'smtp_port' => 26, //default port smtp
            'smtp_user' => 'name@domain.com',
            'smtp_pass' => 'password',
            'mailtype' => 'html',
            'charset' => 'iso-8859-1',
            'wordwrap' => TRUE
    );
    $message = 'Your msg';
    $this->load->library('email', $config);
    $this->email->from('name@domain.com', 'Title');
    $this->email->to('emaildestination@domain.com');
    $this->email->subject('Header');
    $this->email->message($message);
    
    if($this->email->send()) 
    {
       //conditional true
    }
    

    그것은 나를 위해 일합니다!

  11. ==============================

    11.

    앞으로이 사실을 알게 된 사람에게는 메일 사용을 권장하지 않습니다. 이에 대한 답변이 있지만 그 이유는 아닙니다.

    PHP의 메일 기능은 불투명 할뿐만 아니라 사용하는 MTA (즉, Sendmail)에 의존하여 작업을 수행합니다. 메일은 MTA가 메일을 수락하지 못했을 때만 알려줍니다 (즉, 보내려고하면 Sendmail이 다운되었습니다). 그것은 그것이 전달 되었기 때문에 메일이 성공했는지 알려주지 못합니다. (John Conde의 답변 내용과 같이) MTA의 로그를보고 피할 수 있을지에 대해 충분히 알려주 길 바랍니다. 공유 호스트를 사용 중이거나 MTA 로그에 액세스 할 수 없다면 운이 없어진 것입니다. 안타깝게도 리눅스 용 바닐라 설치의 기본값은 이런 식으로 처리합니다.

    메일 라이브러리 (PHPMailer, Zend Framework 2+ 등)는 메일과 매우 다른 것을합니다. 그들이하는 일은받는 메일 서버에 소켓을 직접 연 다음 해당 소켓을 통해 직접 SMTP 메일 명령을 보내는 것입니다. 즉, 클래스는 자체 MTA 역할을합니다 (메일을 사용하여 최종적으로 메일을 보내도록 라이브러리에 알릴 수는 있지만 그렇게하지 않는 것이 좋습니다).

    이것이 의미하는 바는 수신 서버의 응답을 직접 볼 수 있다는 것입니다 (예 : PHPMailer에서 디버깅 출력을 켤 수 있음). 메일 전송 실패 이유 또는 더 이상 추측 할 필요가 없습니다.

    또한 더 나은 인터페이스의 이점을 누릴 수 있습니다. 우편으로 모든 헤더, 첨부 파일 등을 설정해야합니다. 라이브러리를 사용하면 그렇게 할 수있는 전용 기능이 있습니다. 또한 함수가 모든 까다로운 부분 (예 : 머리글)을 수행하고 있음을 의미합니다.

  12. ==============================

    12.

    이 트릭을해야한다고 생각합니다. 방금 if (PHP에서 HTML을 분리하기 위해 본문의 변수에 연결을 추가하고 추가했습니다.

    <?php
        $name = $_POST['name'];
        $email = $_POST['email'];
        $message = $_POST['message'];
        $from = 'From: yoursite.com'; 
        $to = 'contact@yoursite.com'; 
        $subject = 'Customer Inquiry';
        $body = "From:" .$name."\r\n E-Mail:" .$email."\r\n Message:\r\n" .$message;
    
    if (isset($_POST['submit'])) 
    {
        if (mail ($to, $subject, $body, $from)) 
        { 
            echo '<p>Your message has been sent!</p>';
        } 
        else 
        { 
            echo '<p>Something went wrong, go back and try again!</p>'; 
        }
    }
    
    ?>
    
  13. ==============================

    13.

    $name = $_POST['name'];
    $email = $_POST['email'];
    $reciver = '/* Reciver Email address */';
    if (filter_var($reciver, FILTER_VALIDATE_EMAIL)) {
        $subject = $name;
        // To send HTML mail, the Content-type header must be set.
        $headers = 'MIME-Version: 1.0' . "\r\n";
        $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
        $headers .= 'From:' . $email. "\r\n"; // Sender's Email
        //$headers .= 'Cc:' . $email. "\r\n"; // Carbon copy to Sender
        $template = '<div style="padding:50px; color:white;">Hello ,<br/>'
            . '<br/><br/>'
            . 'Name:' .$name.'<br/>'
            . 'Email:' .$email.'<br/>'
            . '<br/>'
            . '</div>';
        $sendmessage = "<div style=\"background-color:#7E7E7E; color:white;\">" . $template . "</div>";
        // Message lines should not exceed 70 characters (PHP rule), so wrap it.
        $sendmessage = wordwrap($sendmessage, 70);
        // Send mail by PHP Mail Function.
        mail($reciver, $subject, $sendmessage, $headers);
        echo "Your Query has been received, We will contact you soon.";
    } else {
        echo "<span>* invalid email *</span>";
    }
    
  14. ==============================

    14.

    이 시도

    <?php
    $to = "somebody@example.com, somebodyelse@example.com";
    $subject = "HTML email";
    
    $message = "
        <html>
        <head>
           <title>HTML email</title>
        </head>
        <body>
          <p>This email contains HTML Tags!</p>
          <table>
            <tr>
             <th>Firstname</th>
             <th>Lastname</th>
            </tr>
            <tr>
              <td>John</td>
              <td>Doe</td>
            </tr>
          </table>
        </body>
        </html>";
    
    // Always set content-type when sending HTML email
    $headers = "MIME-Version: 1.0" . "\r\n";
    $headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
    
    // More headers
    $headers .= 'From: <webmaster@example.com>' . "\r\n";
    $headers .= 'Cc: myboss@example.com' . "\r\n";
    
    mail($to,$subject,$message,$headers);
    ?> 
    
  15. ==============================

    15.

    이 시도

    if ($_POST['submit']) {
        $success= mail($to, $subject, $body, $from);
        if($success)
        { 
            echo '
            <p>Your message has been sent!</p>
            ';
        } else { 
            echo '
            <p>Something went wrong, go back and try again!</p>
            '; 
        }
    }
    
  16. ==============================

    16.

    서버에 Sendmail이 설치되어 있는지 확인하십시오.

    코드를 검사하여 거기에 아무 것도 없다는 것을 확인한 경우 / var / mail으로 이동하여 해당 폴더가 비어 있는지 확인하십시오.

    비어있는 경우 다음을 수행해야합니다.

    sudo apt-get install sendmail
    

    당신이 우분투 서버에 있다면.

  17. ==============================

    17.

    PHP로 메일을 보내는 데 문제가 있으면 PHPMailer 나 SwiftMailer 같은 대안을 고려하십시오.

    PHP를 사용하여 메일을 보낼 때마다 SwiftMailer를 사용합니다.

    require 'mail/swift_required.php';
    
    $message = Swift_Message::newInstance()
        // The subject of your email
        ->setSubject('Jane Doe sends you a message')
        // The from address(es)
        ->setFrom(array('jane.doe@gmail.com' => 'Jane Doe'))
        // The to address(es)
        ->setTo(array('frank.stevens@gmail.com' => 'Frank Stevens'))
        // Here, you put the content of your email
        ->setBody('<h3>New message</h3><p>Here goes the rest of my message</p>', 'text/html');
    
    if (Swift_Mailer::newInstance(Swift_MailTransport::newInstance())->send($message)) {
        echo json_encode([
            "status" => "OK",
            "message" => 'Your message has been sent!'
        ], JSON_PRETTY_PRINT);
    } else {
        echo json_encode([
            "status" => "error",
            "message" => 'Oops! Something went wrong!'
        ], JSON_PRETTY_PRINT);
    }
    

    SwiftMailer 사용 방법에 대한 자세한 내용은 공식 문서를 참조하십시오.

  18. ==============================

    18.

    아마 문제는 메일 서버의 구성입니다. 이런 유형의 문제를 피하거나 메일 서버 문제에 대해 걱정할 필요가 없습니다. PHPMailer를 사용하는 것이 좋습니다. 메일을 보내는 데 필요한 모든 것을 가진 플러그인입니다. 당신이 고려해야 할 것은 SMTP 포트 (포트 : 25 및 465)를 사용하는 것입니다

    require_once 'PHPMailer/PHPMailer.php';
    require_once '/servicios/PHPMailer/SMTP.php';
    require_once '/servicios/PHPMailer/Exception.php';
    
    $mail = new \PHPMailer\PHPMailer\PHPMailer(true);
    try {
           //Server settings
           $mail->SMTPDebug = 0;                                 
           $mail->isSMTP();                                      
           $mail->Host = 'smtp.gmail.com';  
           $mail->SMTPAuth = true;                               
           $mail->Username = 'correo@gmail.com';                 
           $mail->Password = 'contrasenia';                           
           $mail->SMTPSecure = 'ssl';                          
           $mail->Port = 465;                                    
    
           //Recipients
           $mail->setFrom('correo@gmail.com', 'my name');    
           $mail->addAddress('destination@correo.com');               
    
           //Attachments
           $mail->addAttachment('optional file');         // Add files, is optional
    
           //Content
           $mail->isHTML(true);// Set email format to HTML
           $mail->Subject = utf8_decode("subject");
           $mail->Body    = utf8_decode("mail content");
           $mail->AltBody = '';
           $mail->send();
         }
         catch (Exception $e){
            $error = $mail->ErrorInfo;
         }
    
  19. ==============================

    19.

    외부 메일러를 사용하고 싶지 않고 전용 Linux 서버에서 mail ()을하고 싶을 때.

    방법, php 메일은 php.ini의 [mail function] 섹션에 설명되어 있습니다. 매개 변수 sendmail-path는 sendmail이 호출되는 방법을 설명합니다. 기본값은 sendmail -t -i입니다. 그래서 리눅스 콘솔에서 sendmail -t -i

    다른 MTA는 sendmail을 구현할 수 있으며, 그 이름으로 바이너리에 심볼릭 링크를 만들뿐입니다. 예를 들어, debian의 기본값은 후위입니다. sendmail -v -t -i

    From: myapp@example.com
    To: mymail@example.com
    Subject: Test mail via sendmail.
    
    Text body.
    

    나는 간단하고 열린 포트로 데몬을 돌리는 것을 요구하지 않기 때문에 ssmtp를 MTA로 사용하는 것을 선호한다. ssmtp는 로컬 호스트에서 메일을 보내는 경우에만 적합하며 공용 메일 서비스에서 계정을 통해 인증 된 전자 메일을 보낼 수도 있습니다. ssmtp를 설치하고 config /etc/ssmtp/ssmtp.conf를 편집하십시오. 로컬 시스템 메일을 unix 계정 (예 : cron 작업의 루트에 대한 경고)으로 보내려면 / etc / ssmtp / revaliases 파일을 구성하십시오.

    다음은 Yandex 메일에 대한 내 계정의 설정입니다.

    root=mymail@example.com
    mailhub=smtp.yandex.ru:465
    FromLineOverride=YES
    UseTLS=YES
    AuthUser=abcde@yandex.ru
    AuthPass=password
    
  20. ==============================

    20.

    가장 먼저,

    mail () 함수에 대한 많은 매개 변수가 필요할 수 있습니다 ... 최대 5 명까지 가질 수 있습니다. 메일 (받는 사람, 제목, 메시지, 헤더, 매개 변수); 변수에서 $까지 당신이 리눅스 cPanel을 사용하는 경우 귀하의 웹 호스트에서 자동으로 와야합니다. 자동으로 cPanel 사용자 이름과 IP 주소에서옵니다.

    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $from = 'From: yoursite.com'; 
    $to = 'contact@yoursite.com'; 
    $subject = 'Customer Inquiry';
    $body = "From: $name\n E-Mail: $email\n Message:\n $message";
    

    또한 mail () 함수에 올바른 변수 순서가 있는지 확인하십시오. 메일 ($ to, $ subject, $ message 등)을 순서대로 읽지 않으면 작동하지 않을 수 있습니다. 이게 도움이되는지 알려주세요.

  21. ==============================

    21.

    이것은 소수의 사용자에게만 영향을 미치지 만, 나는 그 작은 소수를 위해 문서화하고 싶습니다. 이 작은 소수의 구성원은이 문제로 인해 PHP 메일 메일 스크립트 작동 문제를 해결하는 데 6 시간을 소비했습니다.

    www.AceITLab.com에서 XAMPP를 운영하는 대학에 가면 우리 교수가 우리에게 말하지 않은 것을 알아야합니다. AceITLab 방화벽 (Windows 방화벽이 아님)은 XAMPP에서 MercuryMail을 차단합니다. 배가 우리를 위해 일하고있는 다른 메일 클라이언트를 사용해야 할 것입니다. 보안 설정이 낮은 Gmail 계정으로 보내야합니다.

    네, 알겠습니다. 이것은 실제 이메일에서는 전혀 쓸모가 없습니다. 그러나, 내가 본 것에서, 학업 환경과 현실 세계는 종종 귀한 부분이 거의 없습니다.

  22. ==============================

    22.

    empty () 및 isset () 함수를 사용할 수 있습니다. 다른 파일들과 함께 작동하게하고 싶다면 action = 'yourphp.php'를 html로 수정하고 yourphp.php 파일에 PHP 스크립트를 저장하십시오. 또한 PHP 기능을 활성화하려면 index.html을 index.php로 변경해야합니다.

    PHP

    <?php
    
        error_reporting(0);
        $name = $_POST['name'];
        $email = $_POST['email'];
        $message = $_POST['message'];
        $from = 'From: yoursite.com'; 
        $to = 'contact@yoursite.com'; 
        $subject = 'Customer Inquiry';
        $body = "From: $name\n E-Mail: $email\n Message:\n $message";
    
    
        if ($_POST['submit']){
                    if (!(empty($_POST['name']))) {
                            if (!(empty($_POST['email']))){
                                if (!(empty($_POST['message']))){
                                    mail ($to, $subject, $body, $from);
                                    echo '<p>Your message has been sent!</p>';
                                }else{
                                    echo '<p>Fill your message please.</p>';}
                            }else {
                                echo '<p>Fill your email please.</p>';}
                    }else{
                        echo '<p>Fill your name please.</p>';}              
        }else{
                echo '<p>Fill the form.</p>';}
    ?>
    

    HTML

    <html>
        <form method="post" action="?">
            <table>
                <tr><td>Name</td><td><input type='text' name='name' id='name'/></td></tr>
                <tr><td>Email</td><td><input type='text' name='email' id='email'/></td></tr>
                <tr><td>Message</td><td><input type='text' name='message' id='message'/></td></tr>
                <tr><td></td><td><input type='submit' name='submit' id='submit'/></td></tr>
            </table>
        </form>
    </html>
    

    친애하는!

  23. ==============================

    23.

    이 코드를 로컬 서버 (즉, 개발 목적으로 컴퓨터)에서 실행하는 경우 전자 메일을받는 사람에게 보내지 않습니다. 그러면 mailoutput 폴더에 .txt 파일이 생성됩니다.

    당신이 000webhost 또는 hostinger와 같은 무료 hosing 서비스를 사용하는 경우에, 그 서비스 제공자는 email () 함수를 전자 메일 스푸핑, 스패밍 등의 의도하지 않은 사용을 방지하기 위해 비활성화합니다.

    서비스 제공 업체가 mail () 함수를 지원한다고 확신하는 경우이 PHP 매뉴얼을 참조하여 추가 참조 할 수 있습니다. PHP 메일 ()

    mail () 함수를 지원하는 호스팅 서비스의 날씨를 확인하려면이 코드를 실행하십시오 (받는 사람 전자 메일 주소를 변경하는 것을 잊지 마십시오)

    <?php
        $to      = 'nobody@example.com';
        $subject = 'the subject';
        $message = 'hello';
        $headers = 'From: webmaster@example.com' . "\r\n" .
            'Reply-To: webmaster@example.com' . "\r\n" .
            'X-Mailer: PHP/' . phpversion();
    
        mail($to, $subject, $message, $headers);
    ?>
    

    희망이 도움이되었습니다.

  24. ==============================

    24.

    libmail을 사용할 수 있습니다 : http://lwest.free.fr/doc/php/lib/index.php3?page=mail&lang=en

    include "libmail.php";
    $m = new Mail(); // create the mail
    $m->From( $_POST['form'] );
    $m->To( $_POST['to'] );
    $m->Subject( $_POST['subject'] );
    $m->Body( $_POST['body'] );
    $m->Cc( $_POST['cc']);
    $m->Priority(4);
    //  attach a file of type image/gif to be displayed in the message if possible
    $m->Attach( "/home/leo/toto.gif", "image/gif", "inline" );
    $m->Send(); // send the mail
    echo "Mail was sent:"
    echo $m->Get(); // show the mail source
    
  25. from https://stackoverflow.com/questions/24644436/php-mail-function-doesnt-complete-sending-of-e-mail by cc-by-sa and MIT lisence