이메일을 보내지 않고 이메일 주소가 있는지 확인하는 방법은 무엇입니까?
카테고리 없음이메일을 보내지 않고 이메일 주소가 있는지 확인하는 방법은 무엇입니까?
전자 메일을 보내지 않고 SMTP를 사용하여 전자 메일 주소를 확인하는 PHP 코드를 발견했습니다.
누구나 비슷한 것을 시도 했나요? 아니면 당신에게 효과가 있습니까? 이메일 고객 / 사용자가 올 바르고 존재하는지 알 수 있습니까?
해결법
-
==============================
1.
수신자가 실제로 존재하는지 확인하기 위해 때때로 사용할 수있는 두 가지 방법이 있습니다.
사용자가 없으면 5.1.1 DSN이 표시됩니다. 그러나 이메일이 거부되지 않았다고해서 사용자가 존재 함을 의미하지는 않습니다. 일부 서버는 자동으로 사용자의 열거를 방지하기 위해 이와 같은 요청을 무시합니다. 다른 서버는 사용자를 확인할 수 없으므로 관계없이 메시지를 수락해야합니다.
greylisting이라는 스팸 방지 기술도 있습니다. 그러면 서버가 초기에 주소를 거부하게되며, 실제 SMTP 서버가 나중에 다시 배달을 시도 할 것으로 예상합니다. 이렇게하면 주소를 확인하려는 시도가 엉망이됩니다.
솔직히 주소를 확인하려는 경우 가장 좋은 방법은 간단한 정규식을 사용하여 잘못된 주소를 분명히 차단 한 다음 전자 메일이 수신되었는지 확인하는 링크가 포함 된 실제 전자 메일을 시스템에 다시 보내는 것입니다. 이것은 또한 사용자가 실제 전자 메일을 입력했음을 보장합니다. 누군가 다른 사람에게 속한 약간의 오타가 아닙니다.
-
==============================
2.
여기에있는 다른 해답은이를 시도하는 데있어 여러 가지 문제점을 논의합니다. 나는 너가 너 자신에 의하여 그것을 배우고 싶었던 경우에 이것을 시도 할 것을 나는 보여줄 것이라는 점을 생각했다.
텔넷을 통해 메일 서버에 연결하여 이메일 주소가 있는지 여부를 묻습니다. 다음은 stackoverflow.com의 전자 메일 주소를 테스트하는 예제입니다.
C:\>nslookup -q=mx stackoverflow.com Non-authoritative answer: stackoverflow.com MX preference = 40, mail exchanger = STACKOVERFLOW.COM.S9B2.PSMTP.com stackoverflow.com MX preference = 10, mail exchanger = STACKOVERFLOW.COM.S9A1.PSMTP.com stackoverflow.com MX preference = 20, mail exchanger = STACKOVERFLOW.COM.S9A2.PSMTP.com stackoverflow.com MX preference = 30, mail exchanger = STACKOVERFLOW.COM.S9B1.PSMTP.com C:\>telnet STACKOVERFLOW.COM.S9A1.PSMTP.com 25 220 Postini ESMTP 213 y6_35_0c4 ready. CA Business and Professions Code Section 17538.45 forbids use of this system for unsolicited electronic mail advertisements. helo hi 250 Postini says hello back mail from: <me@myhost.com> 250 Ok rcpt to: <fake@stackoverflow.com> 550-5.1.1 The email account that you tried to reach does not exist. Please try 550-5.1.1 double-checking the recipient's email address for typos or 550-5.1.1 unnecessary spaces. Learn more at 550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596 w41si3198459wfd.71
숫자 코드가 접두사로 표시된 줄은 SMTP 서버의 응답입니다. 좀 더 읽기 쉽도록 빈 줄을 추가했습니다.
많은 메일 서버는 스팸 발송자가 전자 메일 주소를 수집하지 못하도록 방지하기 위해이 정보를 반환하지 않으므로이 기술에 의존 할 수 없습니다. 그러나 유효하지 않은 메일 서버를 탐지하거나 수신자 주소를 위와 같이 거부함으로써 명백하게 나쁜 이메일 주소를 제거하는 데 약간의 성공을 거둘 수 있습니다.
너무 많은 요청을하면 메일 서버가 사용자를 블랙리스트에 올릴 수 있습니다.
PHP에서는 fsockopen, fwrite 및 fread를 사용하여 위의 단계를 프로그래밍 방식으로 수행 할 수 있다고 생각합니다.
$smtp_server = fsockopen("STACKOVERFLOW.COM.S9A1.PSMTP.com", 25, $errno, $errstr, 30); fwrite($smtp_server, "helo hi\r\n"); fwrite($smtp_server, "mail from: <me@myhost.com>\r\n"); fwrite($smtp_server, "rcpt to: <fake@stackoverflow.com>\r\n");
-
==============================
3.
일반적인 대답은 전자 메일 주소가 있는지 여부를 전자 메일로 보내면 확인할 수 없다는 것입니다. 블랙홀에 들어갈 수 있습니다.
그것은 거기에 설명 된 방법이 매우 효과적이라고 말하고 있습니다. QUIT 대신 RSET을 사용한다는 점을 제외하고는 ZoneCheck의 프로덕션 코드에 사용됩니다.
사용자가 자신의 사서함과 상호 작용하는 것이 과도하게 과도하지 않은 경우 많은 사이트에서 실제로 발신자에게 다시 보내야하는 비밀 번호를 보내 어서 메일이 어딘가에 도착하는지 테스트합니다 (비밀 URL로 이동하거나 전자 메일로이 비밀 번호를 다시 보내는 방법). 대부분의 메일 링리스트는 이와 같이 작동합니다.
-
==============================
4.
실제로는 ..... 어떤 서버는 "rcpt to :"를 검사하지 않을 수도 있습니다.
http://www.freesoft.org/CIE/RFC/1123/92.htm
그렇게하는 것은 보안상의 위험입니다 .....
서버가 할 경우, 당신은 서버에있는 모든 주소를 발견 봇 쓸 수 있습니다 ....
-
==============================
5.
대상 메일 서버가 greylisting을 사용할 때 (다른 경우들) 실패합니다.
Greylisting : SMTP 서버는 이전에 알려지지 않은 클라이언트가 처음 연결할 때 배달을 거부하고 다음 번에 허용합니다. 이것은 합법적 인 사용을 허용하면서 스팸봇의 일정 비율을 밖으로 유지합니다. 정상적인 메일 전송 에이전트가 재 시도 할 합법적 인 메일 발송자가 다시 시도 할 것으로 예상되므로.
그러나 코드가 서버에서 한 번만 검사하는 경우 greylisting이있는 서버는 클라이언트가 처음 연결될 때 배달을 거부합니다. 잠시 후에 다시 확인하지 않으면 유효한 전자 메일 주소를 잘못 거부 할 수 있습니다.
-
==============================
6.
몇 가지 문제 :
-
==============================
7.
"이메일 고객 / 사용자가 올 바르고 존재하는지 알 수 있습니까?"
실제로 이것은 두 가지 분리 된 것입니다. 존재할 수도 있지만 올바르지 않을 수도 있습니다.
때로는 사용자 입력 값을 액면가로 가져와야합니다. 그렇지 않은 경우 시스템을 무력화시키는 데는 여러 가지 방법이 있습니다.
-
==============================
8.
당신이 할 수있는 일은 DNS를 검색하고 이메일 주소에있는 도메인이 이것을 다루는 확실한 방법이 없다는 것을 제외하고는 MX 레코드를 가지고 있는지 확인하는 것입니다.
일부 서버는 SMTP 서버와 통신하는 rcpt-to 메소드로 작동하지만 서버의 구성에 전적으로 의존합니다. 또 다른 문제는 사용자가 알 수 없다는 550 코드를 반환 할 수있는 오버로드 된 서버 일 수 있습니다. 그러나 이것은 일시적인 오류입니다. 반환 될 수있는 영구적 인 오류가 있습니다. 이것은 전적으로 서버의 구성에 달려 있습니다.
개인적으로 DNS MX 레코드를 확인한 다음 MX 레코드가 있는지 이메일 확인을 보냅니다.
-
==============================
9.
이 질문은 다소 오래되었지만이 서비스 팁은 사용자가 전송하기 전에 구문 유효성 검사 외에 전자 메일 주소를 확인하는 유사한 솔루션을 찾는 데 도움이 될 수 있습니다.
나는이 오픈 소스 서비스를 사용하여 좋은 결과를 얻은 몇 가지 프로젝트에 대해 전자 메일 유효성 검사 (전자 메일 주소 도메인에서 mx 레코드 확인 등)를보다 깊이있게 수행했습니다. 그것은 또한 마녀가 아주 유용하다는 공통된 오타를 검사합니다. 여기에서 데모하십시오.
-
==============================
10.
그것이 사용자의 주소라고 가정하면, 일부 메일 서버는 SMTP VRFY 명령이 사서함에 대한 전자 메일 주소를 실제로 확인하도록 허용합니다. 주요 사이트의 대부분은 많은 정보를 제공하지 않습니다. Gmail의 응답은 "메일을 보내려고하면 Google에서 전달하려고 시도합니다"또는 그런 식으로 뭔가 똑똑합니다.
-
==============================
11.
나는 당신이 할 수 없다고 생각한다. 이메일을 보내는 것조차 실패 할 수있는 시나리오가 너무 많다. 예 : 사용자 측의 메일 서버가 일시적으로 다운되고 메일 함이 있지만 꽉 차서 메시지를 전달할 수 없습니다.
아마 많은 사이트가 사용자가 확인 이메일을 받았음을 확인한 후 등록을 확인하는 이유 일 것입니다.
-
==============================
12.
function EmailValidation($email) { $email = htmlspecialchars(stripslashes(strip_tags($email))); //parse unnecessary characters to prevent exploits if (eregi('[a-z||0-9]@[a-z||0-9].[a-z]', $email)) { //checks to make sure the email address is in a valid format $domain = explode( "@", $email ); //get the domain name if (@fsockopen ($domain[1],80,$errno,$errstr,3)) { //if the connection can be established, the email address is probably valid echo "Domain Name is valid "; return true; } else { echo "Con not a email domian"; return false; //if a connection cannot be established return false } return false; //if email address is an invalid format return false } }
-
==============================
13.
<?php $email = "someone@exa mple.com"; if(!filter_var($email, FILTER_VALIDATE_EMAIL)) echo "E-mail is not valid"; else echo "E-mail is valid"; ?>
from https://stackoverflow.com/questions/565504/how-to-check-if-an-email-address-exists-without-sending-an-email by cc-by-sa and MIT lisence