מדריך מעשי לבדיקת שרת אימייל ידנית. למדו מה עושה כל פקודת SMTP, כיצד השרת משיב, וכיצד להריץ מפגש אימות מלא עם telnet או openssl.
SMTP (Simple Mail Transfer Protocol) הוא פרוטוקול טקסט-רגיל, מבוסס-שורות. משמעות הדבר היא שאפשר לשוחח עם שרת דואר ישירות מתוך טרמינל ולקרוא בדיוק מה הוא משיב — ללא צורך בתוכנה מיוחדת. זוהי הדרך השקופה ביותר לבדוק האם תיבת דואר קיימת, האם שרת נגיש, וכיצד הוא מוגדר.
תחילה מצאו את שרת הדואר (מארח MX) של הדומיין, ואז פתחו חיבור TCP אל פורט ה-SMTP שלו. הפורט הקלאסי הוא 25. פורטי ההגשה 587 ו-2525 משמשים עם STARTTLS; פורט 465 הוא TLS מובלע (SMTPS).
חיבור רגיל (פורט 25):
telnet mail.example.com 25
פורט STARTTLS (587 או 25) — telnet אינו תומך ב-TLS, השתמשו ב-openssl:
openssl s_client -connect mail.example.com:587 -starttls smtp -crlf
פורט TLS מובלע (465):
openssl s_client -connect mail.example.com:465 -crlf
הערה: ספקי אינטרנט ביתיים וסלולריים רבים חוסמים את פורט 25 היוצא כדי להילחם בספאם. אם telnet ... 25 פשוט נתקע, זהו בדרך כלל הספק שלכם, לא שרת הדואר. בדקו משרת/VPS שבו פורט 25 פתוח, או השתמשו בפורטי הגשה.
אתם מקלידים פקודות (ללא רגישות לאותיות גדולות/קטנות); השרת משיב בקוד בן 3 ספרות ובטקסט. סיימו כל פקודה ב-Enter (CRLF).
| פקודה | מה היא עושה |
|---|---|
HELO domain | ברכת פתיחה ישנה. מזהה את המארח המתחבר לפי שם. השרת משיב 250. |
EHLO domain | ברכת פתיחה מודרנית (HELO מורחב). זהה ל-HELO אך השרת גם מציג את ההרחבות הנתמכות (STARTTLS, AUTH, SIZE, PIPELINING…). |
MAIL FROM:<addr> | מתחיל הודעה חדשה ומגדיר את שולח המעטפה (ה“נתיב החוזר”). תשובת 250 אם התקבל. |
RCPT TO:<addr> | הפקודה המרכזית לאימות. מבקשת מהשרת לקבל נמען. 250 = תיבת הדואר התקבלה; 550 = אין משתמש כזה; 4xx = נסו מאוחר יותר (למשל greylisting). |
DATA | מתחיל את גוף ההודעה. השרת משיב 354; אתם שולחים כותרות + גוף ומסיימים בנקודה בודדת . בשורה משלה. (בבדיקת אימות לעולם אינכם מגיעים לשלב זה.) |
RSET | מאפס את הטרנזקציה הנוכחית (שוכח את MAIL FROM / RCPT TO) בלי לסגור את החיבור. |
VRFY user | מבקש מהשרת לאמת שם משתמש/כתובת. תוכנן בדיוק לשם כך, אך כמעט תמיד מושבת כיום (מחזיר 252 או 502) משום שהוא חושף כתובות תקפות לשולחי ספאם. |
EXPN list | מבקש מהשרת להרחיב רשימת תפוצה לחבריה. כמו VRFY, מושבת כמעט בכל מקום מאותה סיבת פרטיות. |
STARTTLS | משדרג חיבור רגיל ל-TLS מוצפן (בפורטים 25/587). מוצע רק אם צוין בתשובת ה-EHLO. |
AUTH LOGIN / PLAIN | מאמת משתמש (נדרש כדי לשלוח דואר דרך פורטי הגשה, לא לצורך אימות). |
NOOP | אינו עושה דבר; השרת משיב 250. שימושי כדי לשמור חיבור פעיל או לבדוק תגובתיות. |
HELP | מבקש מהשרת להציג את הפקודות שהוא תומך בהן. |
QUIT | מסיים את הסשן באדיבות. השרת משיב 221 וסוגר את החיבור. |
הספרה הראשונה אומרת לכם את הקטגוריה, כך שתוכלו לקרוא כל תשובה גם אם אינכם יודעים את הקוד המדויק:
354 אחרי DATA).| קוד | משמעות |
|---|---|
220 | השירות מוכן (כרזת הברכה). |
221 | סוגר את החיבור (תשובה ל-QUIT). |
250 | תקין — הפקודה התקבלה (התשובה שאתם רוצים אחרי RCPT TO). |
251 / 252 | המשתמש אינו מקומי אך יועבר / לא ניתן לאמת אך ינסה למסור. |
354 | התחילו לשלוח את גוף ההודעה (אחרי DATA). |
421 | השירות אינו זמין, סוגר — לרוב הגבלת קצב. |
450 / 451 / 452 | בעיה זמנית (תיבת הדואר עסוקה, שגיאה מקומית, אחסון נמוך). Greylisting מופיע כאן לעיתים קרובות. |
502 | הפקודה אינה ממומשת (תשובה אופיינית ל-VRFY / EXPN). |
550 | תיבת הדואר אינה זמינה / אין משתמש כזה — הכתובת אינה קיימת. |
551 / 552 / 553 / 554 | המשתמש אינו מקומי / חריגה ממכסה / שם תיבת דואר שגוי / הטרנזקציה נכשלה. |
בדיקה האם john@example.com קיים. השורות שאתם מקלידים מסומנות ב->; כל השאר הוא השרת:
$ telnet mail.example.com 25 220 mail.example.com ESMTP ready > EHLO checkemail.test 250-mail.example.com Hello checkemail.test 250-STARTTLS 250-SIZE 52428800 250 PIPELINING > MAIL FROM:<probe@checkemail.test> 250 2.1.0 Ok > RCPT TO:<john@example.com> 250 2.1.5 Ok ← mailbox EXISTS > RSET 250 2.0.0 Ok > QUIT 221 2.0.0 Bye
אם לעומת זאת הנמען אינו קיים, הייתם רואים משהו כמו:
> RCPT TO:<nosuchuser@example.com> 550 5.1.1 <nosuchuser@example.com>: Recipient address rejected: User unknown
4xx בניסיון הראשון, ומבקש מכם לחזור מאוחר יותר. תשובת 4xx אינה אומרת שהכתובת אינה תקפה.250 וממיינים זאת מאוחר יותר. אז RCPT TO אינו יכול להוכיח שתיבת דואר ספציפית קיימת. כדי לזהות catch-all, נסו כתובת אקראית בבירור: אם גם היא מתקבלת, הדומיין הוא catch-all.רוצים שזה ייעשה אוטומטית, כולל חיפוש MX, זיהוי catch-all ופסק דין נקי? השתמשו בבודק האימייל שלנו בדף הבית.