PHP 5.x mail ()은 "회신"필드에서 도메인의 유효성을 확인합니까?

랜디

나는 최근에 좀 더 모바일 친화적 인 이메일 양식을 "고맙게 생각"했고, PHP mail () 함수가 이제 무작위로 실패 (그리고 FALSE를 반환)하는 것을보고 정신이 나갔다고 생각했습니다. 음 그것은 무작위가 아니 었습니다. 머리카락을 거의 모두 뽑은 후 마침내 "답장"주소가되는 양식 필드에 잘못된 도메인을 입력 할 때마다 mail ()이 실패하고 FALSE를 반환한다는 것을 마침내 깨달았습니다! 이것은 "잘못된 형식의"이메일 주소 (내가 이미 확인)가 아니라 유효하지 않은 이메일 주소 (예 : "[email protected]")입니다.

중요하다고 생각하는 경우 아래에 테스트 양식 코드를 포함 시켰지만 이것이 PHP의 새로운 "기능"이라고 생각하십니까? 아니면 제 호스팅 회사의 서버에서만 수행하는 작업이라고 생각하십니까? PHP 인 경우 양식에 추가 할 수있는 새로운 "testDomain ()"함수가 있습니까? 합법적 인 실수를 한 사용자에게 알리는 것이 좋지만 내가 확실히 말할 수있는 것은 메일 시도가 실패했다는 것입니다. 결국, mail ()은 무슨 일이 일어 났는지 나타내는 친숙한 작은 오류 코드를 반환하지 않고 참 또는 거짓을 반환합니다. 실제로 false를 반환하면 로그 파일에 오류를보고하지도 않습니다.

사실, 이것은 내가 내 양식에서 실패한 mail ()을 얻은 유일한 시간입니다. 그러나 실패가 항상 도메인이 나쁘다는 것을 의미한다고 가정하면 현명하지 않을 것입니다.

<!DOCTYPE HTML>
<html>
<head> <title> Simple Test Email Form;</title>  </head>

<!--
<?php
// define variables and set to empty values
$name = $email =  $comments = ""; // $address = $citystate = $zip = $phone  not used
$nameErr = $emailErr = $commentsErr = "";
$headers = $email_message = $sendersIP = "";
$email_to = "[email protected]";  // this is bogus!!! 
$email_subject = "Private Mailform";
$status = "Form Not Yet Processed";

// some basic security functions

function clean_string($string) {
       $bad = array("content-type","bcc:","to:","cc:","href");
       return str_replace($bad,"",$string);
     }

function test_input($data) {
   $data = trim($data);
   $data = stripslashes($data);
   $data = htmlspecialchars($data);
   return $data;
}

// mail processing

if ($_SERVER["REQUEST_METHOD"] == "POST") 
{   
    if (empty($_POST["name"]))   {  $nameErr = " Name is required"; }
    else {  $name = test_input($_POST["name"]); }
    if (empty($_POST["email"])) { $emailErr = "Email is required"; }
    else {  $email = test_input($_POST["email"]); }
    // at least email should be validated
    if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) { $emailErr = "Invalid email format"; }

    // keep senders IP, so we can watch for idiots.
    $sendersIP = $_SERVER['REMOTE_ADDR'];

    $comments = $_POST["comments"];  

    // So is all well?
    if (empty($nameErr) && empty($emailErr) && empty($commentsErr)  )
        {
        $email_message = $headers = "";

        $email_message .= "Name:  ".clean_string($name)."\n";
        $email_message .= "Email: ".clean_string($email)."\n";
        $email_message .= "IP:    ".$sendersIP."\n";
        $email_message .= "Comments: "."\n\n".clean_string($comments)."\n";

        // create regular email headers
        $headers .= 'From: '.$email."\r\n".
'Reply-To: '.$email."\r\n" .
'X-Mailer: PHP/' . phpversion();

        $mail_sent = mail($email_to, $email_subject, $email_message, $headers); 

        // modify status string to show result      
         $status = ($mail_sent==TRUE) ? "mail() function returned TRUE" :" mail() function returned FALSE";
        }
}
?>

-->
<body >
<table><tr><td style ="text-align:right;" width=100%> 

<b><?php echo $status; ?></b><br>

<p><span >* = required fields.<br>Please double check your email address.</span></p>

<form name="contactform" method="post" enctype="multipart/form-data" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
Name: <span class="error">*<?php echo $nameErr;?></span>&nbsp;
   <input type="text" name="name" value="<?php echo $name;?>"><br>
Email: <span class="error">*<?php echo $emailErr;?></span>&nbsp;
    <input type="text" name="email" value="<?php echo $email;?>"><br>
<br>
<div align="center"> ---- <span class="error">*</span> Message ---- <span class="error"><?php echo $commentsErr;?></span><br>
<textarea name="comments" wrap="physical" cols="40" rows="10"  ><?php echo $comments;?></textarea>

<br><br>

</div>

<input name="submit" id="submit" type="submit" value="Submit"  >

</form> 
</td></tr></table>

</body>
</html>
Machavity

mail유효성에 대한 기본 검사가 없습니다. 바닐라 센드 메일도 마찬가지입니다. 따라서 호스트가 MTA 클라이언트가이 작업을 수행 할 수 있습니다. 별도의 메일 클라이언트를 사용하여이를 테스트 할 수 있습니다. 예를 들어 ZF2, PHPMailer 및 기타 많은 최신 PHP 메일 링 시스템은이 mail기능을 전혀 사용하지 않습니다 . 실제로 소켓을 열고 메일 명령을 직접 보냅니다. 쉽지는 않지만 실제 명령과 응답을 다시 보내고 SMTP 트랜잭션이 실패한 위치를 확인하기 위해이 방법을 사용할 수 있습니다.

우연히 그렇게 멀리 가기 전에 자체 유효성 검사를 추가 할 수 있습니다.

// this will fail to send if the DNS for the domain has no MX records
if(!checkdnsrr($domain, 'MX')) { 
     // don't send
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

OS X Mail v9.3에서 회신하지 않은 이메일 알림

분류에서Dev

이메일을 보내기 전에 수신자가 자동 회신을 구성했는지 확인하는 방법은 무엇입니까?

분류에서Dev

Evolution은 회신 및 전달시 이전 메시지의 각 줄 뒤에 새 줄을 추가합니다.

분류에서Dev

수신 메일을 그룹으로 보낼 때 회신하지 않도록 Outlook에서 부재 중을 설정하는 방법은 무엇입니까?

분류에서Dev

Play (Scala) Framework 2.4.x-필드 수준에서 동일한 양식의 두 필드가 같은지 확인하기위한 양식 유효성 검사

분류에서Dev

Mutt에서 회신 할 때 특정 회신 이메일에 스레딩이 누락 된 이유는 무엇입니까?

분류에서Dev

PHP 양식에서 이메일의 도메인 별 유효성 검사

분류에서Dev

MSGraph PHP SDK를 통해 회신 이메일을 생성

분류에서Dev

필드 셋 유효성은 무엇을 의미합니까?

분류에서Dev

공용 메서드에서 열거 형 매개 변수의 유효성을 어떻게 확인합니까?

분류에서Dev

직접 회신 알림은 활동을 시작합니다.

분류에서Dev

angularjs에서 유효성을 검사 할 때 확인 표시와 x를 추가하는 방법은 무엇입니까?

분류에서Dev

Microsoft Outlook에서 특정 날짜에 대한 자동 회신을 설정하는 방법은 무엇입니까?

분류에서Dev

PHP에서 http 또는 https없이 도메인 이름을 확인하는 방법은 무엇입니까?

분류에서Dev

PHP 하위 도메인에서 등록 된 계정을 확인하는 방법은 무엇입니까?

분류에서Dev

Parsley JS 2.x-숨겨진 필드의 유효성을 검사하는 방법은 무엇입니까?

분류에서Dev

필드 값을 확인하는 방법은 laravel 5.4 유효성 검사기에서 채울 때 문자열이어야합니다.

분류에서Dev

Apache James 서버 :받은 편지함 테이블의 이메일이 이전에 보낸 이메일의 회신인지 사용자가 보낸 새 메시지인지 인식하는 방법은 무엇입니까?

분류에서Dev

findAll은 입력 필드의 유효성을 검사합니다.

분류에서Dev

Kmail의받은 편지함에 회신 포함

분류에서Dev

PHP (메일) 문의 양식- "발신자의 이메일에 회신"문제

분류에서Dev

Tensorflow 2.x에서 정확도 및 기타 메트릭을 인쇄하는 방법은 무엇입니까?

분류에서Dev

Outlook의 대화에 대한 회신 처리를 변경하는 방법은 무엇입니까?

분류에서Dev

Outlook의 대화에 대한 회신 처리를 변경하는 방법은 무엇입니까?

분류에서Dev

이메일 주소에 자동 회신 (OOF)이 켜져 있는지 확인

분류에서Dev

보안 관리자에서 많은 도메인을 확인한 후 프로그램의 메모리가 부족합니까?

분류에서Dev

vue.js에서 동적 입력 필드의 유효성을 검사하는 방법은 무엇입니까?

분류에서Dev

Blazor EditForm에서 단일 필드의 유효성을 검사하는 방법은 무엇입니까?

분류에서Dev

Laravel에서 exclude_if로 데이터 필드의 유효성을 검사하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    OS X Mail v9.3에서 회신하지 않은 이메일 알림

  2. 2

    이메일을 보내기 전에 수신자가 자동 회신을 구성했는지 확인하는 방법은 무엇입니까?

  3. 3

    Evolution은 회신 및 전달시 이전 메시지의 각 줄 뒤에 새 줄을 추가합니다.

  4. 4

    수신 메일을 그룹으로 보낼 때 회신하지 않도록 Outlook에서 부재 중을 설정하는 방법은 무엇입니까?

  5. 5

    Play (Scala) Framework 2.4.x-필드 수준에서 동일한 양식의 두 필드가 같은지 확인하기위한 양식 유효성 검사

  6. 6

    Mutt에서 회신 할 때 특정 회신 이메일에 스레딩이 누락 된 이유는 무엇입니까?

  7. 7

    PHP 양식에서 이메일의 도메인 별 유효성 검사

  8. 8

    MSGraph PHP SDK를 통해 회신 이메일을 생성

  9. 9

    필드 셋 유효성은 무엇을 의미합니까?

  10. 10

    공용 메서드에서 열거 형 매개 변수의 유효성을 어떻게 확인합니까?

  11. 11

    직접 회신 알림은 활동을 시작합니다.

  12. 12

    angularjs에서 유효성을 검사 할 때 확인 표시와 x를 추가하는 방법은 무엇입니까?

  13. 13

    Microsoft Outlook에서 특정 날짜에 대한 자동 회신을 설정하는 방법은 무엇입니까?

  14. 14

    PHP에서 http 또는 https없이 도메인 이름을 확인하는 방법은 무엇입니까?

  15. 15

    PHP 하위 도메인에서 등록 된 계정을 확인하는 방법은 무엇입니까?

  16. 16

    Parsley JS 2.x-숨겨진 필드의 유효성을 검사하는 방법은 무엇입니까?

  17. 17

    필드 값을 확인하는 방법은 laravel 5.4 유효성 검사기에서 채울 때 문자열이어야합니다.

  18. 18

    Apache James 서버 :받은 편지함 테이블의 이메일이 이전에 보낸 이메일의 회신인지 사용자가 보낸 새 메시지인지 인식하는 방법은 무엇입니까?

  19. 19

    findAll은 입력 필드의 유효성을 검사합니다.

  20. 20

    Kmail의받은 편지함에 회신 포함

  21. 21

    PHP (메일) 문의 양식- "발신자의 이메일에 회신"문제

  22. 22

    Tensorflow 2.x에서 정확도 및 기타 메트릭을 인쇄하는 방법은 무엇입니까?

  23. 23

    Outlook의 대화에 대한 회신 처리를 변경하는 방법은 무엇입니까?

  24. 24

    Outlook의 대화에 대한 회신 처리를 변경하는 방법은 무엇입니까?

  25. 25

    이메일 주소에 자동 회신 (OOF)이 켜져 있는지 확인

  26. 26

    보안 관리자에서 많은 도메인을 확인한 후 프로그램의 메모리가 부족합니까?

  27. 27

    vue.js에서 동적 입력 필드의 유효성을 검사하는 방법은 무엇입니까?

  28. 28

    Blazor EditForm에서 단일 필드의 유효성을 검사하는 방법은 무엇입니까?

  29. 29

    Laravel에서 exclude_if로 데이터 필드의 유효성을 검사하는 방법은 무엇입니까?

뜨겁다태그

보관