SMTP рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рдпрд╣ рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд░реНрдг рдорд╛рдирдХ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдИрдореЗрд▓ рдкрддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдмреБрдирд┐рдпрд╛рджреА syntax validation рдпрд╛ domain checks рдХреЗ рд╡рд┐рдкрд░реАрдд, SMTP verification рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреЗ mail server рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рд╕рдВрдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ mailbox рдореМрдЬреВрдж рд╣реИ рдФрд░ рдИрдореЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред рдпрд╣ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдИрдореЗрд▓ рд╡реИрд▓рд┐рдбреЗрд╢рди рддрдХрдиреАрдХ professional email verification services рдХреА рд░реАрдврд╝ рдмрдирддреА рд╣реИ рдФрд░ businesses рдХреЛ рд╕реНрд╡рдЪреНрдЫ email lists рдмрдирд╛рдП рд░рдЦрдиреЗ, sender reputation рдХреА рд░рдХреНрд╖рд╛ рдХрд░рдиреЗ рдФрд░ email deliverability рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИред
SMTP рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рдХреЛ рд╕рдордЭрдирд╛
SMTP, Simple Mail Transfer Protocol, рдИрдореЗрд▓ рд╕рдВрдЪрд░рдг рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдиреЗрдЯ рдорд╛рдирдХ рд╣реИред рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдПрдХ рдИрдореЗрд▓ рднреЗрдЬрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХрд╛ mail client рдпрд╛ server рдЙрд╕ рд╕рдВрджреЗрд╢ рдХреЛ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреЗ mail server рддрдХ рдкрд╣реБрдВрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП SMTP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред SMTP рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рдЗрд╕реА protocol рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдИрдореЗрд▓ рдкрддрд╛ рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВтАФрд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗ рдмрд┐рдирд╛ред
SMTP verification рдХреА рд╕реБрдВрджрд░рддрд╛ рд╕реНрд░реЛрдд рдкрд░ рдИрдореЗрд▓ рдкрддрд╛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЗрд╕рдХреА рдХреНрд╖рдорддрд╛ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред format рдпрд╛ domain рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХрд┐ рдХреЛрдИ рдкрддрд╛ рд╡реИрдз рд╣реИ рдпрд╛ рдирд╣реАрдВ, SMTP verification mail server рд╕реЗ рд╕реАрдзреЗ рдкреВрдЫрддрд╛ рд╣реИ: "рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдкрддреЗ рдХреЗ рд▓рд┐рдП mail рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВрдЧреЗ?" server рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдпрд╣ рдмрддрд╛рддреА рд╣реИ рдХрд┐ mailbox рдореМрдЬреВрдж рд╣реИ, рднрд░рд╛ рд╣реБрдЖ рд╣реИ, рдпрд╛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
SMTP рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
SMTP verification process commands рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреА рд╣реИ рдЬреЛ рдИрдореЗрд▓ delivery рдХреА рд╢реБрд░реБрдЖрдд рдХреА рдирдХрд▓ рдХрд░рддреА рд╣реИ рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рд╕рдВрджреЗрд╢ content рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд░реБрдХ рдЬрд╛рддреА рд╣реИред рдпрд╣рд╛рдБ step-by-step рд╡рд┐рд╡рд░рдг рд╣реИ:
Step 1: MX Records рдХреЗ рд▓рд┐рдП DNS Lookup
рдХрд┐рд╕реА рднреА mail server рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, verification process рдХреЛ рдпрд╣ рдкрд╣рдЪрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ domain рдХреЗ рд▓рд┐рдП рдХреМрди рд╕рд╛ server рдИрдореЗрд▓ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ Mail Exchange (MX) records рдХреЗ рд▓рд┐рдП DNS рдХреЛ query рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдПрдХ domain рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрдИ MX records рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ primary server рдЕрдиреБрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдкрд░ fallback рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред
Step 2: TCP Connection рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
рдПрдХ рдмрд╛рд░ mail server рдХреА рдкрд╣рдЪрд╛рди рд╣реЛ рдЬрд╛рдиреЗ рдкрд░, verifier port 25 (рдорд╛рдирдХ SMTP port) рдпрд╛ submission рдХреЗ рд▓рд┐рдП 587 рдпрд╛ 465 рдЬреИрд╕реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ ports рдкрд░ рдПрдХ TCP connection рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред
Step 3: SMTP Handshake (HELO/EHLO)
Connection рдПрдХ greeting рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред Verifier mail server рд╕реЗ рдЕрдкрдирд╛ рдкрд░рд┐рдЪрдп рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ EHLO (Extended HELO) рдпрд╛ HELO command рднреЗрдЬрддрд╛ рд╣реИред Server рдЕрдкрдиреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддрд╛ рд╣реИ рдФрд░ рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред
Step 4: MAIL FROM Command
Verifier MAIL FROM command рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ sender address рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдкрддрд╛ рдЕрдВрддрд┐рдо sender рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, mail servers verification рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ MAIL FROM domain рдореЗрдВ рдЙрдЪрд┐рдд DNS records рдХреА рдХрдореА рд╣реИ рдпрд╛ рд╕рдВрджрд┐рдЧреНрдз рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред
Step 5: RCPT TO Command (рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрджрдо)
рдпрд╣реАрдВ рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ verification рд╣реЛрддрд╛ рд╣реИред Verifier рдЬрд╛рдВрдЪреЗ рдЬрд╛ рд░рд╣реЗ рдИрдореЗрд▓ рдкрддреЗ рдХреЗ рд╕рд╛рде рдПрдХ RCPT TO command рднреЗрдЬрддрд╛ рд╣реИред рдЗрд╕ command рдХреЗ рд▓рд┐рдП mail server рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ mailbox рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВ:
- 250 OK: Mailbox рдореМрдЬреВрдж рд╣реИ рдФрд░ mail рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ
- 550 User unknown: Mailbox рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ
- 551 User not local: Server рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдПрдХ рдЕрдиреНрдп рдкрддрд╛ рд╕реБрдЭрд╛рддрд╛ рд╣реИ
- 552 Mailbox full: Mailbox рдореМрдЬреВрдж рд╣реИ рд▓реЗрдХрд┐рди рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛
- 553 Mailbox name not allowed: рдкрддрд╛ syntax рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
Step 6: QUIT
RCPT TO response рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, verifier рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗ рдмрд┐рдирд╛ connection рдХреЛ gracefully рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП QUIT рднреЗрдЬрддрд╛ рд╣реИред
SMTP Response Codes рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛
рд╕рдЯреАрдХ рдИрдореЗрд▓ рдЪреЗрдХрд░ systems рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП SMTP response codes рдХреЛ рд╕рдордЭрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпреЗ рддреАрди-рдЕрдВрдХреАрдп codes рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрд░реНрде рд░рдЦрддреЗ рд╣реИрдВ рдЬреЛ verification outcomes рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
2xx Success Codes
- 250: рдЕрдиреБрд░реЛрдзрд┐рдд рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░реНрдг рд╣реБрдИ (рдИрдореЗрд▓ рдореМрдЬреВрдж рд╣реИ)
- 251: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ local рдирд╣реАрдВ рд╣реИ; рдирд┐рд░реНрджрд┐рд╖реНрдЯ path рдкрд░ forward рдХрд░реЗрдЧрд╛
4xx Temporary Failure Codes
- 421: рд╕реЗрд╡рд╛ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, transmission channel рдмрдВрдж рд╣реЛ рд░рд╣рд╛ рд╣реИ
- 450: рдЕрдиреБрд░реЛрдзрд┐рдд mail action рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛: mailbox рдЕрдиреБрдкрд▓рдмреНрдз (рд╡реНрдпрд╕реНрдд/рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ blocked)
- 451: рдЕрдиреБрд░реЛрдзрд┐рдд action рдирд┐рд░рд╕реНрдд: processing рдореЗрдВ local error
- 452: рдЕрдиреБрд░реЛрдзрд┐рдд action рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛: рдЕрдкрд░реНрдпрд╛рдкреНрдд system storage
5xx Permanent Failure Codes
- 550: рдЕрдиреБрд░реЛрдзрд┐рдд action рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛: mailbox рдЕрдиреБрдкрд▓рдмреНрдз (рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ)
- 551: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ local рдирд╣реАрдВ рд╣реИ; рдХреГрдкрдпрд╛ рджреВрд╕рд░рд╛ path рдЖрдЬрд╝рдорд╛рдПрдВ
- 552: рдЕрдиреБрд░реЛрдзрд┐рдд mail action рдирд┐рд░рд╕реНрдд: storage рдЖрд╡рдВрдЯрди рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЧрдпрд╛
- 553: рдЕрдиреБрд░реЛрдзрд┐рдд action рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛: mailbox name рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ
- 554: Transaction рд╡рд┐рдлрд▓
4xx рдФрд░ 5xx codes рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред рдПрдХ 4xx response рдЕрд╕реНрдерд╛рдпреА рдореБрджреНрджреЛрдВ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИтАФmailbox рдмрд╛рдж рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ 5xx response рд╕реНрдерд╛рдпреА рд╡рд┐рдлрд▓рддрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИтАФрдкрддреЗ рдХреЛ invalid рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
SMTP рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛
рдПрдХ SMTP verification system рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП protocol рд╡рд┐рд╡рд░рдг, error handling, рдФрд░ rate limiting рдкрд░ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ implementation guide рд╣реИред
рдмреБрдирд┐рдпрд╛рджреА SMTP Verification Flow
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд pseudocode рдореБрдЦреНрдп verification logic рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ:
function verifyEmail(email):
domain = extractDomain(email)
// Step 1: Get MX records
mxRecords = getMXRecords(domain)
if mxRecords is empty:
return INVALID_DOMAIN
// Sort by priority (lowest number = highest priority)
sortByPriority(mxRecords)
// Try each MX server
for mx in mxRecords:
try:
// Step 2: Connect
connection = connectSMTP(mx.host, 25)
// Step 3: EHLO
response = sendCommand("EHLO verifier.example.com")
if response.code != 250:
continue // Try next MX
// Step 4: MAIL FROM
response = sendCommand("MAIL FROM:<verify@example.com>")
if response.code != 250:
continue
// Step 5: RCPT TO
response = sendCommand("RCPT TO:<" + email + ">")
// Step 6: QUIT
sendCommand("QUIT")
closeConnection()
// Interpret result
if response.code == 250:
return VALID
else if response.code >= 500:
return INVALID
else:
return UNKNOWN
catch ConnectionError:
continue // Try next MX
return UNABLE_TO_VERIFY
Node.js Implementation
рдпрд╣рд╛рдБ native net рдФрд░ dns modules рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ Node.js implementation рд╣реИ:
const dns = require('dns');
const net = require('net');
async function verifyEmailSMTP(email) {
const domain = email.split('@')[1];
// Get MX records
const mxRecords = await new Promise((resolve, reject) => {
dns.resolveMx(domain, (err, addresses) => {
if (err) reject(err);
else resolve(addresses.sort((a, b) => a.priority - b.priority));
});
});
if (!mxRecords || mxRecords.length === 0) {
return { valid: false, reason: 'No MX records found' };
}
// Try each MX server
for (const mx of mxRecords) {
try {
const result = await checkMailbox(mx.exchange, email);
return result;
} catch (err) {
continue; // Try next MX server
}
}
return { valid: null, reason: 'Unable to verify' };
}
function checkMailbox(mxHost, email) {
return new Promise((resolve, reject) => {
const socket = net.createConnection(25, mxHost);
let step = 0;
let response = '';
socket.setTimeout(10000);
socket.on('data', (data) => {
response = data.toString();
const code = parseInt(response.substring(0, 3));
switch (step) {
case 0: // Server greeting
if (code === 220) {
socket.write('EHLO verifier.example.com\r\n');
step++;
} else {
socket.end();
reject(new Error('Server rejected connection'));
}
break;
case 1: // EHLO response
if (code === 250) {
socket.write('MAIL FROM:<verify@example.com>\r\n');
step++;
} else {
socket.end();
reject(new Error('EHLO failed'));
}
break;
case 2: // MAIL FROM response
if (code === 250) {
socket.write(`RCPT TO:<${email}>\r\n`);
step++;
} else {
socket.end();
reject(new Error('MAIL FROM rejected'));
}
break;
case 3: // RCPT TO response - the verification result
socket.write('QUIT\r\n');
socket.end();
if (code === 250) {
resolve({ valid: true, reason: 'Mailbox exists' });
} else if (code >= 500) {
resolve({ valid: false, reason: 'Mailbox does not exist', code });
} else {
resolve({ valid: null, reason: 'Unable to determine', code });
}
break;
}
});
socket.on('timeout', () => {
socket.end();
reject(new Error('Connection timeout'));
});
socket.on('error', (err) => {
reject(err);
});
});
}
Python Implementation
Python рдЕрдкрдиреЗ smtplib module рдХреЗ рд╕рд╛рде рд╕реНрд╡рдЪреНрдЫ SMTP verification рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
import dns.resolver
import smtplib
import socket
def verify_email_smtp(email):
domain = email.split('@')[1]
# Get MX records
try:
mx_records = dns.resolver.resolve(domain, 'MX')
mx_hosts = sorted([(r.preference, str(r.exchange).rstrip('.'))
for r in mx_records])
except dns.resolver.NXDOMAIN:
return {'valid': False, 'reason': 'Domain does not exist'}
except dns.resolver.NoAnswer:
return {'valid': False, 'reason': 'No MX records found'}
# Try each MX server
for priority, mx_host in mx_hosts:
try:
result = check_mailbox(mx_host, email)
if result['valid'] is not None:
return result
except Exception as e:
continue
return {'valid': None, 'reason': 'Unable to verify'}
def check_mailbox(mx_host, email):
try:
# Connect to SMTP server
smtp = smtplib.SMTP(timeout=10)
smtp.connect(mx_host, 25)
# EHLO
code, message = smtp.ehlo('verifier.example.com')
if code != 250:
smtp.quit()
return {'valid': None, 'reason': 'EHLO failed'}
# MAIL FROM
code, message = smtp.mail('verify@example.com')
if code != 250:
smtp.quit()
return {'valid': None, 'reason': 'MAIL FROM rejected'}
# RCPT TO - the verification step
code, message = smtp.rcpt(email)
smtp.quit()
if code == 250:
return {'valid': True, 'reason': 'Mailbox exists'}
elif code >= 500:
return {'valid': False, 'reason': 'Mailbox does not exist', 'code': code}
else:
return {'valid': None, 'reason': 'Temporary failure', 'code': code}
except socket.timeout:
return {'valid': None, 'reason': 'Connection timeout'}
except smtplib.SMTPServerDisconnected:
return {'valid': None, 'reason': 'Server disconnected'}
except Exception as e:
return {'valid': None, 'reason': str(e)}
SMTP рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рдореЗрдВ рдЪреБрдиреМрддрд┐рдпрд╛рдБ
рдЬрдмрдХрд┐ SMTP verification рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИ, рдХрдИ рдЪреБрдиреМрддрд┐рдпрд╛рдБ implementation рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рд╕рдЯреАрдХрддрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИрдВред
Catch-All Domains
рдХреБрдЫ mail servers catch-all рдХреЗ рд░реВрдк рдореЗрдВ configured рд╣реИрдВ, рдЕрдкрдиреЗ domain рдкрд░ рдХрд┐рд╕реА рднреА рдкрддреЗ рдкрд░ mail рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдЪрд╛рд╣реЗ рдХреЛрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ mailbox рдореМрдЬреВрдж рд╣реЛ рдпрд╛ рдирд╣реАрдВред рдЬрдм рдЖрдк рдХрд┐рд╕реА рднреА рдкрддреЗ рдХреЗ рд▓рд┐рдП RCPT TO рднреЗрдЬрддреЗ рд╣реИрдВтАФрдпрд╣рд╛рдВ рддрдХ рдХрд┐ random characters рдХреЗ рд▓рд┐рдПтАФserver 250 OK рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддрд╛ рд╣реИред
Catch-all configurations SMTP verification рдХреЛ рдЙрд╕ domain рдкрд░ valid рдФрд░ invalid addresses рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рдмрдирд╛рддреА рд╣реИрдВред BillionVerify рдЬреИрд╕реА professional email verification services рдЗрди domains рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдФрд░ рдЙрдЪрд┐рдд confidence scores рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ catch-all detection algorithms рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИрдВред
Greylisting
Greylisting рдПрдХ anti-spam рддрдХрдиреАрдХ рд╣реИ рдЬрд╣рд╛рдВ mail servers рдЕрдЬреНрдЮрд╛рдд senders рд╕реЗ рдИрдореЗрд▓ рдХреЛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ SMTP connection attempt рдПрдХ 4xx temporary error рд▓реМрдЯрд╛рддрд╛ рд╣реИред рд╡реИрдз mail servers delivery рдХреЛ retry рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдХрдИ spam systems рдирд╣реАрдВ рдХрд░рддреЗред
рдИрдореЗрд▓ рд╡реИрд▓рд┐рдбреЗрд╢рди рдХреЗ рд▓рд┐рдП, greylisting рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реЛрддреА рд╣реИред рдЙрдЪрд┐рдд implementation рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- Greylisting responses рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдирд╛ (рдЕрдХреНрд╕рд░ 450 рдпрд╛ 451)
- рдЙрдЪрд┐рдд delays рдХреЗ рд╕рд╛рде retry logic рд▓рд╛рдЧреВ рдХрд░рдирд╛
- Track рдХрд░рдирд╛ рдХрд┐ рдХреМрди рд╕реЗ servers greylisting рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ
Rate Limiting рдФрд░ Blocking
Mail servers рдПрдХ рд╣реА IP address рд╕реЗ рдХрдо рд╕рдордп рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ verification рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЛ connections рдХреЛ rate limiting рдХрд░рдХреЗ abuse рд╕реЗ рдЦреБрдж рдХреЛ рдмрдЪрд╛рддреЗ рд╣реИрдВ, рдЬреЛ trigger рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
- Temporary blocks (4xx responses)
- Permanent blacklisting
- Connection timeouts
- CAPTCHAs рдпрд╛ challenges
Professional email verification services рдЗрди protections рдХреЛ trigger рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ IP addresses рдкрд░ verification requests рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░рддреА рд╣реИрдВ рдФрд░ sophisticated rate limiting рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИрдВред
False Positives рдФрд░ Negatives
SMTP verification 100% рд╕рдЯреАрдХ рдирд╣реАрдВ рд╣реИред рдХрдИ рдкрд░рд┐рджреГрд╢реНрдп рдЧрд▓рдд рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
False Positives (Invalid рдХреЛ valid рдХреЗ рд░реВрдк рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛)
- Catch-all domains рд╕рдм рдХреБрдЫ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ
- Servers SMTP рдХреЗ рджреМрд░рд╛рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ bounce рдХрд░рддреЗ рд╣реИрдВ
- Full mailboxes рдЬреЛ рдЕрднреА рднреА connections рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ
False Negatives (Valid рдХреЛ invalid рдХреЗ рд░реВрдк рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛)
- Greylisting рдкрд╣рд▓реЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛
- Rate limiting рд╡реИрдз checks рдХреЛ block рдХрд░рдирд╛
- Server misconfiguration
- рдЕрд╕реНрдерд╛рдпреА outages
SMTP Server Variations
рд╡рд┐рднрд┐рдиреНрди mail servers SMTP рдХреЛ variations рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ verification рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
Microsoft Exchange/Office 365
- рдЕрдХреНрд╕рд░ рд╡рд┐рд╕реНрддреГрдд responses рдХреЗ рд▓рд┐рдП authentication рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
- SMTP рдХреЗ рджреМрд░рд╛рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ delivery рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ
- Sophisticated anti-spam рдЙрдкрд╛рдп рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ
Gmail/Google Workspace
- рдЖрдо рддреМрд░ рдкрд░ accepting/rejecting рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп
- Aggressive verification рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЛ rate limit рдХрд░ рд╕рдХрддрд╛ рд╣реИ
- Consistent responses рд▓реМрдЯрд╛рддрд╛ рд╣реИ
Yahoo Mail
- Strict rate limiting рдХреЗ рд▓рд┐рдП рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ
- Challenges рдХреЛ solve рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ
- Greylisting рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ
Custom Mail Servers
- рд╡реНрдпрд╡рд╣рд╛рд░ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ
- Non-standard configurations рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ
- Security settings verification accuracy рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИрдВ
SMTP рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдПрдВ
рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп SMTP verification рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рджреНрдз рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдЙрдЪрд┐рдд EHLO/HELO Configuration
рдЖрдкрдХрд╛ EHLO hostname рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
- рдЖрдкрдХреЗ verification server рдХреЗ IP рдХреЛ resolve рдХрд░рдирд╛
- Valid reverse DNS (PTR record) рд╣реЛрдирд╛
- Blacklists рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛
- рдЖрдкрдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рдПрдХ рд╡реИрдз domain рд╣реЛрдирд╛
EHLO verify.yourdomain.com
Generic рдпрд╛ рд╕рдВрджрд┐рдЧреНрдз hostnames рд╕реЗ рдмрдЪреЗрдВ рдЬреЛ spam filters рдХреЛ trigger рдХрд░рддреЗ рд╣реИрдВред
MAIL FROM Address Selection
MAIL FROM address verification acceptance рдХреЗ рд▓рд┐рдП рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ:
- Valid MX records рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ domain рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
- рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ SPF records рдЖрдкрдХреЗ verification server рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ
- Verification рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рдПрдХ domain рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ
- рдЬреНрдЮрд╛рдд spam trap domains рд╕реЗ рдмрдЪреЗрдВ
Connection Management
рдХреБрд╢рд▓ connection management verification speed рдФрд░ reliability рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИ:
// Connection pooling example
class SMTPConnectionPool {
constructor(maxConnections = 10) {
this.pools = new Map(); // Domain -> connections
this.maxConnections = maxConnections;
}
async getConnection(mxHost) {
if (!this.pools.has(mxHost)) {
this.pools.set(mxHost, []);
}
const pool = this.pools.get(mxHost);
// Reuse existing connection if available
if (pool.length > 0) {
return pool.pop();
}
// Create new connection
return await this.createConnection(mxHost);
}
releaseConnection(mxHost, connection) {
const pool = this.pools.get(mxHost);
if (pool && pool.length < this.maxConnections) {
pool.push(connection);
} else {
connection.end();
}
}
}
Timeout Configuration
Unresponsive servers рдкрд░ hanging рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд timeouts рд╕реЗрдЯ рдХрд░реЗрдВ:
const TIMEOUT_CONFIG = {
connection: 10000, // 10 seconds to establish connection
greeting: 30000, // 30 seconds for server greeting
command: 30000, // 30 seconds per command response
total: 60000 // 60 seconds maximum per verification
};
Error Handling рдФрд░ Retry Logic
Intelligent retry рдХреЗ рд╕рд╛рде рдордЬрдмреВрдд error handling рд▓рд╛рдЧреВ рдХрд░реЗрдВ:
async function verifyWithRetry(email, maxRetries = 3) {
const delays = [1000, 5000, 15000]; // Exponential backoff
for (let attempt = 0; attempt < maxRetries; attempt++) {
try {
const result = await verifyEmailSMTP(email);
// Don't retry if we got a definitive answer
if (result.valid !== null) {
return result;
}
// Check if error is retryable
if (isGreylisting(result) || isTemporaryError(result)) {
await sleep(delays[attempt]);
continue;
}
return result;
} catch (err) {
if (attempt === maxRetries - 1) {
return { valid: null, reason: err.message };
}
await sleep(delays[attempt]);
}
}
}
function isGreylisting(result) {
return result.code === 450 || result.code === 451;
}
function isTemporaryError(result) {
return result.code >= 400 && result.code < 500;
}
Rate Limiting Implementation
рдЕрдкрдиреА verification infrastructure рдХреА рд░рдХреНрд╖рд╛ рдХрд░реЗрдВ рдФрд░ рдЕрдЪреНрдЫреА reputation рдмрдирд╛рдП рд░рдЦреЗрдВ:
class RateLimiter {
constructor() {
this.domainLimits = new Map();
this.globalCounter = 0;
this.globalLimit = 100; // per second
this.domainLimit = 10; // per second per domain
}
async waitForSlot(domain) {
// Check global limit
while (this.globalCounter >= this.globalLimit) {
await sleep(100);
}
// Check domain limit
const domainCount = this.domainLimits.get(domain) || 0;
while (domainCount >= this.domainLimit) {
await sleep(100);
}
// Reserve slot
this.globalCounter++;
this.domainLimits.set(domain, domainCount + 1);
// Release after 1 second
setTimeout(() => {
this.globalCounter--;
this.domainLimits.set(domain,
(this.domainLimits.get(domain) || 1) - 1);
}, 1000);
}
}
SMTP Verification рдмрдирд╛рдо рдЕрдиреНрдп рд╡рд┐рдзрд┐рдпрд╛рдБ
рдпрд╣ рд╕рдордЭрдирд╛ рдХрд┐ SMTP verification рдЕрдиреНрдп email validation рддрдХрдиреАрдХреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреИрд╕реЗ рд╣реИ, рдЖрдкрдХреЛ рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЪреБрдирдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
Syntax Validation
Syntax validation regex patterns рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдИрдореЗрд▓ рд╕рд╣реА format рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрд╣ рддреЗрдЬрд╝ рд╣реИ рдФрд░ client-side рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд╕реНрдкрд╖реНрдЯ formatting errors рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИред
рд╢рдХреНрддрд┐рдпрд╛рдБ:
- рддрддреНрдХрд╛рд▓ рдкрд░рд┐рдгрд╛рдо
- рдХреЛрдИ network requests рдирд╣реАрдВ
- Typos рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИ
рд╕реАрдорд╛рдПрдБ:
- Existence рдХреА рдкреБрд╖реНрдЯрд┐ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛
- рдХрдИ invalid рдИрдореЗрд▓ syntax checks рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ
Domain/MX Verification
MX record verification mail server records рдХреА рдЬрд╛рдВрдЪ рдХрд░рдХреЗ рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдХ domain рдИрдореЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд╢рдХреНрддрд┐рдпрд╛рдБ:
- Non-existent domains рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИ
- рддреЗрдЬрд╝ DNS lookup
- рдХреЛрдИ SMTP connection рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ
рд╕реАрдорд╛рдПрдБ:
- рд╡рд┐рд╢рд┐рд╖реНрдЯ mailboxes рдХреЛ verify рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛
- Domain рдореЗрдВ MX рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХреЛрдИ valid users рдирд╣реАрдВ
SMTP Verification
SMTP verification рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ mailbox рдореМрдЬреВрдж рд╣реИ рдФрд░ mail рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд╢рдХреНрддрд┐рдпрд╛рдБ:
- Mailbox existence рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪрддрдо рд╕рдЯреАрдХрддрд╛
- Mail server рдХреЗ рд╕рд╛рде рд╕реАрдзрд╛ рд╕рдВрдЪрд╛рд░
- рдХрдИ invalid addresses рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИ
рд╕реАрдорд╛рдПрдБ:
- рдЕрдиреНрдп рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдорд╛
- Catch-all domains рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд
- Rate limiting рджреНрд╡рд╛рд░рд╛ block рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
Verification Hierarchy
рдПрдХ рд╡реНрдпрд╛рдкрдХ рдИрдореЗрд▓ рд╡реИрд▓рд┐рдбреЗрдЯрд░ strategy рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ layers рдХрд░рддреА рд╣реИ:
- Syntax validation - рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ invalid formats рдХреЛ filter рдХрд░реЗрдВ
- Domain verification - рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ рдХрд┐ domain рдореМрдЬреВрдж рд╣реИ рдФрд░ MX records рд╣реИрдВ
- SMTP verification - рд╡рд┐рд╢рд┐рд╖реНрдЯ mailbox рдХреЛ verify рдХрд░реЗрдВ
- рдЕрддрд┐рд░рд┐рдХреНрдд checks - Disposable email detection, role-based detection, catch-all detection
BillionVerify рдЬреИрд╕реА professional email verification services рдЗрд╕ рдкреВрд░реНрдг hierarchy рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИрдВ, SMTP verification рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рд╕рдВрднрд╛рд▓рддреА рд╣реИрдВ рдЬрдмрдХрд┐ рдИрдореЗрд▓ рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд intelligence рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВред
Professional SMTP Verification Services рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдЬрдмрдХрд┐ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ SMTP verification system рдмрдирд╛рдирд╛ рд╢реИрдХреНрд╖рд┐рдХ рд╣реИ, production applications рдЕрдХреНрд╕рд░ professional рдИрдореЗрд▓ рд╡реИрд▓рд┐рдбреЗрдЯрд░ APIs рд╕реЗ рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВред
Professional Services рдХреЗ рд▓рд╛рдн
Infrastructure
- рд╡рд┐рд╢реНрд╡рд╡реНрдпрд╛рдкреА рд╡рд┐рддрд░рд┐рдд verification servers
- рд╕реНрд╡рдЪреНрдЫ IP reputation management
- рдЙрдЪреНрдЪ availability рдФрд░ redundancy
Intelligence
- Catch-all domain detection
- Disposable email identification
- Role-based address flagging
- Spam trap detection
Compliance
- Privacy-compliant processing
- рд╕реБрд░рдХреНрд╖рд┐рдд data handling
- Audit trails
BillionVerify API Integration
BillionVerify SMTP checks рд╕рд╣рд┐рдд рд╡реНрдпрд╛рдкрдХ рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
async function verifyWithBillionVerify(email) {
const response = await fetch('https://api.billionverify.com/v1/verify', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({ email })
});
const result = await response.json();
return {
isValid: result.is_valid,
isDeliverable: result.is_deliverable,
isCatchAll: result.is_catch_all,
isDisposable: result.is_disposable,
isRoleBased: result.is_role_based,
smtpCheck: result.smtp_check,
mxRecords: result.mx_records,
riskScore: result.risk_score
};
}
API рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рднреА SMTP рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ рдЬрдмрдХрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд intelligence рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ replicate рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг infrastructure рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
Bulk SMTP Verification
рдмрдбрд╝реА email lists рдХреЛ verify рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, bulk verification рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ:
async function bulkVerify(emails) {
// Upload file for batch processing
const formData = new FormData();
formData.append('file', createCSV(emails));
const uploadResponse = await fetch('https://api.billionverify.com/v1/bulk/upload', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
},
body: formData
});
const { jobId } = await uploadResponse.json();
// Poll for completion
let status = 'processing';
while (status === 'processing') {
await sleep(5000);
const statusResponse = await fetch(
`https://api.billionverify.com/v1/bulk/status/${jobId}`,
{ headers: { 'Authorization': 'Bearer YOUR_API_KEY' } }
);
const job = await statusResponse.json();
status = job.status;
}
// Download results
const resultsResponse = await fetch(
`https://api.billionverify.com/v1/bulk/download/${jobId}`,
{ headers: { 'Authorization': 'Bearer YOUR_API_KEY' } }
);
return await resultsResponse.json();
}
Signup Forms рдХреЗ рд▓рд┐рдП Real-Time SMTP Verification
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ registration рдХреЗ рджреМрд░рд╛рди real-time рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢реБрд░реВ рд╕реЗ рд╣реА data quality рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИред
Frontend Implementation
// Debounced email verification on input
const emailInput = document.getElementById('email');
let verificationTimeout;
emailInput.addEventListener('input', (e) => {
clearTimeout(verificationTimeout);
const email = e.target.value;
if (!isValidSyntax(email)) {
showError('Please enter a valid email format');
return;
}
verificationTimeout = setTimeout(async () => {
showLoading();
try {
const result = await verifyEmail(email);
if (result.isValid) {
showSuccess('Email verified');
} else if (result.isCatchAll) {
showWarning('Unable to fully verify this email');
} else {
showError('This email address appears invalid');
}
} catch (err) {
// Don't block signup on verification errors
clearStatus();
}
}, 500); // Wait 500ms after typing stops
});
async function verifyEmail(email) {
const response = await fetch('/api/verify-email', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email })
});
return response.json();
}
Backend API Endpoint
// Express.js endpoint
app.post('/api/verify-email', async (req, res) => {
const { email } = req.body;
// Quick syntax check first
if (!isValidEmailSyntax(email)) {
return res.json({ isValid: false, reason: 'Invalid syntax' });
}
try {
// Call BillionVerify API for full verification
const result = await billionVerify.verify(email);
res.json({
isValid: result.is_valid && result.is_deliverable,
isCatchAll: result.is_catch_all,
isDisposable: result.is_disposable,
suggestion: result.did_you_mean // Typo suggestions
});
} catch (err) {
// Fail open - don't block signup on API errors
res.json({ isValid: true, verified: false });
}
});
SMTP Verification рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд╛ рд╡рд┐рдЪрд╛рд░
SMTP verification рдореЗрдВ network connections рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ security awareness рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдЕрдкрдиреА Infrastructure рдХреА рд░рдХреНрд╖рд╛ рдХрд░рдирд╛
Firewall Configuration
- рдХреЗрд╡рд▓ verification servers рд╕реЗ outbound SMTP connections рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ
- рдЕрд╕рд╛рдорд╛рдиреНрдп connection patterns рдХреЗ рд▓рд┐рдП monitor рдХрд░реЗрдВ
- рдЬреНрдЮрд╛рдд malicious IP ranges рдХреЛ block рдХрд░реЗрдВ
TLS/SSL Usage
- рдЬрдм рдЙрдкрд▓рдмреНрдз рд╣реЛ рддреЛ STARTTLS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
- Server certificates рдХреЛ verify рдХрд░реЗрдВ
- Certificate errors рдХреЛ gracefully handle рдХрд░реЗрдВ
Blacklisting рд╕реЗ рдмрдЪрдирд╛
рдЖрдкрдХреЗ verification servers рдХреЛ blacklist рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд╡реЗ spam рднреЗрдЬ рд░рд╣реЗ рдпрд╛ mail servers рдХрд╛ abuse рдХрд░ рд░рд╣реЗ рдкреНрд░рддреАрдд рд╣реЛрддреЗ рд╣реИрдВ:
- Strict rate limiting рд▓рд╛рдЧреВ рдХрд░реЗрдВ
- Verification рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд IPs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
- рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ blacklist status рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░реЗрдВ
- рдЙрдЪрд┐рдд reverse DNS рдмрдирд╛рдП рд░рдЦреЗрдВ
- Abuse complaints рдХрд╛ рддреБрд░рдВрдд рдЬрд╡рд╛рдм рджреЗрдВ
Data Privacy
рдИрдореЗрд▓ рдкрддреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд data рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╕реБрд░рдХреНрд╖рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- рдкреВрд░реНрдг рдИрдореЗрд▓ рдкрддреЛрдВ рдХреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ log рди рдХрд░реЗрдВ
- рд╕рдВрдЧреНрд░рд╣реАрдд verification рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ encrypt рдХрд░реЗрдВ
- Data retention policies рд▓рд╛рдЧреВ рдХрд░реЗрдВ
- GDPR рдФрд░ рдЕрдиреНрдп regulations рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ
- API calls рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд connections рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
SMTP Verification Performance рдХреЛ рдорд╛рдкрдирд╛
рдЕрдкрдиреЗ verification system рдХреЗ рдЕрдЪреНрдЫреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдореБрдЦ metrics рдХреЛ track рдХрд░реЗрдВред
рдкреНрд░рдореБрдЦ Metrics
Accuracy Metrics
- True positive rate (valid рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрд╣рдЪрд╛рдирд╛ рдЧрдпрд╛)
- False positive rate (invalid рдХреЛ valid рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд)
- Catch-all detection accuracy
- Unknown/unable to verify rate
Performance Metrics
- рдФрд╕рдд verification рд╕рдордп
- 95th percentile response рд╕рдордп
- Connection success rate
- Domain рджреНрд╡рд╛рд░рд╛ timeout rate
Operational Metrics
- рджреИрдирд┐рдХ verification volume
- Type рджреНрд╡рд╛рд░рд╛ error rates
- Blacklist incidents
- API availability
Monitoring Dashboard Example
class VerificationMetrics {
constructor() {
this.counters = {
total: 0,
valid: 0,
invalid: 0,
catchAll: 0,
unknown: 0,
errors: 0
};
this.timings = [];
}
record(result, duration) {
this.counters.total++;
this.timings.push(duration);
if (result.valid === true) this.counters.valid++;
else if (result.valid === false) this.counters.invalid++;
else if (result.isCatchAll) this.counters.catchAll++;
else this.counters.unknown++;
}
recordError() {
this.counters.errors++;
}
getStats() {
const sortedTimings = this.timings.sort((a, b) => a - b);
return {
counts: this.counters,
accuracy: {
validRate: this.counters.valid / this.counters.total,
unknownRate: this.counters.unknown / this.counters.total
},
performance: {
avgTime: average(this.timings),
p95Time: sortedTimings[Math.floor(sortedTimings.length * 0.95)],
errorRate: this.counters.errors / this.counters.total
}
};
}
}
рдирд┐рд╖реНрдХрд░реНрд╖
SMTP рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрди рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рдЯреАрдХ рд╡рд┐рдзрд┐ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдИрдореЗрд▓ рдкрддрд╛ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред SMTP protocol рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ mail servers рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рд╕рдВрдЪрд╛рд░ рдХрд░рдХреЗ, рдЖрдк рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдИрдореЗрд▓ рднреЗрдЬреЗ рдмрд┐рдирд╛ mailbox existence рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкреНрд░рднрд╛рд╡реА SMTP verification рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП protocol рд╡рд┐рд╡рд░рдг рдХреЛ рд╕рдордЭрдиреЗ, catch-all domains рдФрд░ greylisting рдЬреИрд╕реА рд╡рд┐рднрд┐рдиреНрди рдЪреБрдиреМрддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ, рдФрд░ рдЙрдЪрд┐рдд rate limiting рдФрд░ error handling рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ production applications рдХреЗ рд▓рд┐рдП, BillionVerify рдЬреИрд╕реА professional рдИрдореЗрд▓ рдЪреЗрдХрд░ services verification infrastructure рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдмрд┐рдирд╛ рдЖрд╡рд╢реНрдпрдХ infrastructure, intelligence, рдФрд░ reliability рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВред
рдЪрд╛рд╣реЗ рдЖрдк рд╕реАрдЦрдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ SMTP verification рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реЛрдВ рдпрд╛ рдПрдХ professional рдИрдореЗрд▓ рд╡реИрд▓рд┐рдбреЗрдЯрд░ API рдХреЛ integrate рдХрд░ рд░рд╣реЗ рд╣реЛрдВ, рдЗрд╕ guide рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рд┐рджреНрдзрд╛рдВрдд рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдИрдореЗрд▓ рдкрддрд╛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред
рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ SMTP verification рд╡реНрдпрд╛рдкрдХ рдИрдореЗрд▓ рд╡реИрд▓рд┐рдбреЗрд╢рди рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдШрдЯрдХ рд╣реИред рдЗрд╕реЗ syntax validation, domain verification, disposable email detection, рдФрд░ catch-all identification рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдирд╛ рдПрдХ рдкреВрд░реНрдг рдИрдореЗрд▓ рд╡реИрд▓рд┐рдбреЗрд╢рди strategy рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреА sender reputation рдХреА рд░рдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ, email deliverability рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреА email lists рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИред
рддрддреНрдХрд╛рд▓ feedback рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА syntax рдФрд░ domain checks рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ, рдЧрд╣рди validation рдХреЗ рд▓рд┐рдП SMTP verification рдХреЛ layer рдХрд░реЗрдВ, рдФрд░ BillionVerify рдЬреИрд╕реА professional services рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрдм рдЖрдкрдХреЛ рд╕рдорд░реНрдкрд┐рдд email verification infrastructure рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реА reliability, accuracy, рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд intelligence рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред