How to check if an email address exists without sending an email?

前端 未结 14 1743
半阙折子戏
半阙折子戏 2020-11-22 00:28

I have come across this PHP code to check email address using SMTP without sending an email.

Has anyone tried anything similar or does it work for you? Can you tell

相关标签:
14条回答
  • 2020-11-22 01:16

    Some issues:

    1. I'm sure some SMTP servers will let you know immediately if an address you give them does not exist, but some won't as a privacy measure. They'll just accept whatever addresses you give them and silently ignore the ones that don't exist.
    2. As the article says, if you do this too often with some servers, they will blacklist you.
    3. For some SMTP servers (like gmail), you need to use SSL in order to do anything. This is only true when using gmail's SMTP server to send email.
    0 讨论(0)
  • 2020-11-22 01:19

    "Can you tell if an email customer / user enters is correct & exists?"

    Actually these are two separate things. It might exist but might not be correct.

    Sometimes you have to take the user inputs at the face value. There are many ways to defeat the system otherwise.

    0 讨论(0)
  • 2020-11-22 01:20

    Other answers here discuss the various problems with trying to do this. I thought I'd show how you might try this in case you wanted to learn by doing it yourself.

    You can connect to an mail server via telnet to ask whether an email address exists. Here's an example of testing an email address for 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
    

    Lines prefixed with numeric codes are responses from the SMTP server. I added some blank lines to make it more readable.

    Many mail servers will not return this information as a means to prevent against email address harvesting by spammers, so you cannot rely on this technique. However you may have some success at cleaning out some obviously bad email addresses by detecting invalid mail servers, or having recipient addresses rejected as above.

    Note too that mail servers may blacklist you if you make too many requests of them.


    In PHP I believe you can use fsockopen, fwrite and fread to perform the above steps programmatically:

    $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");
    
    0 讨论(0)
  • 2020-11-22 01:25

    Not really.....Some server may not check the "rcpt to:"

    http://www.freesoft.org/CIE/RFC/1123/92.htm

    Doing so is security risk.....

    If the server do, you can write a bot to discovery every address on the server....

    0 讨论(0)
  • 2020-11-22 01:26

    Assuming it's the user's address, some mail servers do allow the SMTP VRFY command to actually verify the email address against its mailboxes. Most of the major site won't give you much information; the gmail response is "if you try to mail it, we'll try to deliver it" or something clever like that.

    0 讨论(0)
  • 2020-11-22 01:27

    This will fail (amongst other cases) when the target mailserver uses greylisting.

    Greylisting: SMTP server refuses delivery the first time a previously unknown client connects, allows next time(s); this keeps some percentage of spambots out, while allowing legitimate use - as it is expected that a legitimate mail sender will retry, which is what normal mail transfer agents will do.

    However, if your code only checks on the server once, a server with greylisting will deny delivery (as your client is connecting for the first time); unless you check again in a little while, you may be incorrectly rejecting valid e-mail addresses.

    0 讨论(0)
提交回复
热议问题