programing

PHP를 사용하여 이메일 주소가 실제인지 또는 유효한지 확인하는 방법

goodsources 2023. 7. 25. 20:55
반응형

PHP를 사용하여 이메일 주소가 실제인지 또는 유효한지 확인하는 방법

저는 이메일 주소가 유효한지 확인한다고 주장하는 몇몇 웹사이트를 찾았습니다.PHP만으로 이메일 주소가 유효한지 확인할 수 있습니까?

<?php
    if($_POST['email'] != ''){
        // The email to validate
        $email = $_POST['email'];

        // An optional sender
        function domain_exists($email, $record = 'MX'){
            list($user, $domain) = explode('@', $email);
            return checkdnsrr($domain, $record);
        }
        if(domain_exists($email)) {
            echo('This MX records exists; I will accept this email as valid.');
        }
        else {
            echo('No MX record exists;  Invalid email.');
        }
    }
?>
<form method="POST">
    <input type="text" name="email">
    <input type="submit" value="submit">
</form>

이것이 지금 제가 가지고 있는 것입니다.도메인이 있는지 확인하지만 사용자의 전자 메일이 해당 도메인에 있는지 확인할 수 없습니다.PHP를 사용하여 그것을 하는 것이 가능합니까?

단 하나의 PHP 방법으로는 이메일이 실제로 존재하는지 확인할 수 없습니다.해당 계정으로 전자 메일을 보낼 수 있지만 이 계정만 있어도 계정이 존재하는지 확인할 수 없습니다(아래 참조).적어도 하나 이상의 형식으로 구성되어 있는지 확인할 수 있습니다.

if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
    //Email is valid
}

원하는 경우 다른 검사를 추가할 수 있습니다.도메인을 구문 분석한 다음 checkdnsrr을 실행합니다.

if(checkdnsrr($domain)) {
     // Domain at least has an MX record, necessary to receive email
}

많은 사람들이 이 지경에 이르렀지만 여전히 어떤 숨겨진 방법이 없다는 것을 확신하지 못하고 있습니다.다음은 전자 메일의 유효성을 확인해야 하는 경우 고려해야 할 몇 가지 참고 사항입니다.

  1. 스팸 발송자는 또한 "연결 트릭"(전자 메일을 보내기 시작하고 해당 시점에서 서버에 의존함)을 알고 있습니다.다른 답변 중 하나는 이 경고가 있는 이 라이브러리에 연결됩니다.

    일부 메일 서버는 스팸 발송자가 사용자의 전자 메일을 확인하지 못하도록 하고 유효한 전자 메일을 필터링하기 위해 테스트 메시지를 자동으로 거부하므로 이 기능이 모든 메일 서버에서 제대로 작동하지 않을 수 있습니다.

    즉, 잘못된 주소가 있으면 잘못된 주소 응답을 받지 못할 수 있습니다.실제로 거의 모든 메일 서버에는 수신 메일을 모두 수락하는 옵션이 제공됩니다(Postfix로 수행하는 방법은 다음과 같습니다).유효성 검사 라이브러리에 연결된 답변은 해당 주의 사항을 언급하는 것을 무시합니다.

  2. 스팸 블랙리스트.이들은 IP 주소별로 블랙리스트를 작성하며, 서버가 지속적으로 확인 연결을 수행하는 경우 스팸하우스 또는 다른 차단 목록에 추가될 위험이 있습니다.블랙리스트에 오른다면 이메일 주소를 확인하는 것이 무슨 소용이 있습니까?

  3. 전자 메일 주소를 확인하는 것이 정말 중요한 경우 사용자가 전자 메일에 응답하도록 강제하는 것이 허용됩니다.확인하려면 클릭해야 하는 링크가 포함된 전체 전자 메일을 보냅니다.스팸이 아니며, 응답에 유효한 주소가 있음을 보장합니다.

2023년 업데이트:오늘 이것이 효과가 있다면, 당신은 차단될 것입니다.댓글 보기.

SMTP에서 확인해야 합니다.

즉, 해당 이메일의 SMTP 서버에 연결해야 합니다.

SMTP 서버에 연결한 후 다음 명령을 전송해야 합니다.

HELO somehostname.example
MAIL FROM: <no-reply@gmail.com>
RCPT TO: <emailtovalidate@domain.example>

"<email to validate@domain.example> 릴레이 액세스 거부" 메시지가 표시되면 이 전자 메일이 유효하지 않음을 의미합니다.

간단한 PHP 수업이 있습니다.사용할 수 있습니다.

http://www.phpclasses.org/package/6650-PHP-Check-if-an-e-mail-is-valid-using-SMTP.html

오전 내내 이와 같은 답변을 검색했는데 확인해야 할 모든 이메일 주소가 실제로 존재하는지 확인하는 것이 거의 불가능하다는 것을 알게 되었습니다.그래서 주변의 작업으로, 저는 간단한 것을 만들었습니다.PHP스크립트를 사용하여 전자 메일 주소의 형식이 올바른지 확인하고 사용된 도메인 이름도 올바른지 확인합니다.

GitHub여기 https://github.com/DukeOfMarshall/PHP---JSON-Email-Verification/tree/master

<?php

# What to do if the class is being called directly and not being included in a script     via PHP
# This allows the class/script to be called via other methods like JavaScript

if(basename(__FILE__) == basename($_SERVER["SCRIPT_FILENAME"])){
$return_array = array();

if($_GET['address_to_verify'] == '' || !isset($_GET['address_to_verify'])){
    $return_array['error']              = 1;
    $return_array['message']            = 'No email address was submitted for verification';
    $return_array['domain_verified']    = 0;
    $return_array['format_verified']    = 0;
}else{
    $verify = new EmailVerify();

    if($verify->verify_formatting($_GET['address_to_verify'])){
        $return_array['format_verified']    = 1;

        if($verify->verify_domain($_GET['address_to_verify'])){
            $return_array['error']              = 0;
            $return_array['domain_verified']    = 1;
            $return_array['message']            = 'Formatting and domain have been verified';
        }else{
            $return_array['error']              = 1;
            $return_array['domain_verified']    = 0;
            $return_array['message']            = 'Formatting was verified, but verification of the domain has failed';
        }
    }else{
        $return_array['error']              = 1;
        $return_array['domain_verified']    = 0;
        $return_array['format_verified']    = 0;
        $return_array['message']            = 'Email was not formatted correctly';
    }
}

echo json_encode($return_array);

exit();
}

class EmailVerify {
public function __construct(){

}

public function verify_domain($address_to_verify){
    // an optional sender  
    $record = 'MX';
    list($user, $domain) = explode('@', $address_to_verify);
    return checkdnsrr($domain, $record);
}

public function verify_formatting($address_to_verify){
    if(strstr($address_to_verify, "@") == FALSE){
        return false;
    }else{
        list($user, $domain) = explode('@', $address_to_verify);

        if(strstr($domain, '.') == FALSE){
            return false;
        }else{
            return true;
        }
    }
    }
}
?>

2023년 현재, 메일 주소의 존재를 확인할 수 있는 신뢰할 수 있는 기술적 방법이 없어야 합니다.만약 있다면, 스팸 발송자들은 유효한 전자 메일을 쉽게 검색할 수 있기 때문에 스팸 발송자들이 훨씬 더 많이 스팸을 보낼 수 있는 좋은 방법이 될 것입니다.

유일한 방법은 옵트인 메일을 보내는 것입니다.이렇게 하면 주소가 있는지 확인할 뿐만 아니라 해당 주소가 이 사용자에게 올바른 주소인지도 확인할 수 있습니다.주소가 존재하지만 다른 사람의 것인 경우에는 도움이 되지 않습니다.유럽과 같은 일부 국가에서는 이것이 법적으로 요구되기도 합니다.

언급URL : https://stackoverflow.com/questions/19261987/how-to-check-if-an-email-address-is-real-or-valid-using-php

반응형