כשטופס יצירת הקשר אומר ״תודה״ אבל לא מגיע דואר
טופס יצירת קשר יכול להתקלקל בלי שאיש יראה שגיאה: המבקר מקבל אישור ידידותי, ובצד העסק לא מתקבל דבר. למה זה קורה ואיך להבחין בכך בזמן.
אפשר לדמיין מרפאת פיזיותרפיה קטנה. באתר שלה יש טופס יצירת קשר, והטופס עובד — או לפחות נראה כך. מבקרים ממלאים אותו, לוחצים על ״שליחה״ ורואים הודעה ידידותית: ״תודה, נחזור בקרוב״. מה שאיש אינו רואה: ההודעות הפסיקו להגיע לתיבת הדואר של המרפאה לפני זמן מה. אין שגיאה, אין הודעת החזרה בתיבה של אף אחד, אין נורה אדומה בשום מקום. הטופס נכשל בשקט.
למה איש אינו מבחין
דף ה״תודה״ של טופס אומר בדרך כלל רק דבר אחד: האתר העביר את ההודעה הלאה. השאלה אם שרת דואר מקבל אותה, מסווג אותה כספאם או דוחה אותה בדרך מוכרעת מאוחר יותר, מחוץ לטווח הראייה של הטופס. הפונקציה mail() של PHP, למשל, מדווחת על הצלחה ברגע שהמערכת המקומית מקבלת את ההודעה למסירה — לא כשהיא מגיעה למישהו. לכן המבקר מקבל אישור וממשיך הלאה. בינתיים, הבעלים רואים תיבה ריקה ומניחים שזה פשוט חודש שקט. פחות פניות מעוררות לעיתים רחוקות דאגה בפני עצמן: חופשות, מזג האוויר, הכלכלה — תמיד יש הסבר שנשמע סביר יותר מ״הטופס לא עובד״.
- יום 0עדכון שגרתי של תוסף מתבצע בלילה. האתר נראה בדיוק כפי שנראה קודם.
- יום 1ההודעה האחרונה מגיעה. איש אינו יודע שהיא האחרונה.
- ימים 2–13מבקרים ממשיכים לשלוח את הטופס וממשיכים לראות ״תודה״. דבר אינו מגיע לתיבת הדואר.
- יום 14מישהו מתקשר ושואל, ברוגז קל, למה איש לא השיב לפנייה שלו.
- יום 15הסיבה מתגלה בתוך שעה. ההודעות משני השבועות האלה אבדו — אלא אם הטופס שמר גם עותק.
הסיבות הרגילות
- סיסמת ה-SMTP או ספק הדואר השתנו. הטופס ממשיך להתחבר עם פרטי הגישה הישנים ושרת הדואר מסרב — בשקט, ככל שהמבקר יכול לראות.
- PHP mail() ללא אימות. שרת האינטרנט שולח דואר ישירות, בלי להתחבר לשרת דואר מסודר. שרתי דואר מקבלים רבים מתייחסים לדואר כזה כחשוד: הוא מגיע לספאם או נדחה מיד.
- SPF, DKIM ו-DMARC אינם תואמים. טפסים רבים מציבים את כתובת המבקר בשדה From. ההודעה טוענת אז שהיא מגיעה, למשל, מכתובת gmail.com, אבל נשלחת משרת האתר — בדיוק מה ש-DMARC נועד לעצור.
- עדכון תוסף או החלפת ערכת עיצוב משבשים את הטופס או את ה-CAPTCHA שלו. תבנית שהשתנתה משמיטה שדה, סקריפט כבר אינו נטען או שרכיב CAPTCHA מופיע בלי הסקריפט שלו — וכל שליחה נכשלת באימות.
- תיבת הדואר המקבלת מלאה. שרת הדואר מסרב לקבל הודעות חדשות והודעת ההחזרה נשלחת לכתובת שאיש אינו קורא.
- באנר העוגיות חוסם את סקריפט הטופס. אם כלי ההסכמה מסווג את ה-CAPTCHA או את סקריפט הטופס כ״שיווק״, מבקרים שמסרבים לעוגיות עלולים לקבל טופס שאי אפשר לשלוח, או שהשליחות שלו נדחות בגלל אסימון חסר.
- תעודת TLS או דומיין שפג תוקפם. מבקרים רואים אזהרת דפדפן ועוזבים, או שכבר אי אפשר להגיע לשרת הדואר בצורה מאובטחת. אם תוקף הדומיין של תיבת הדואר המקבלת פג, הדואר אליה פשוט נפסק.
- שכבת מטמון מגישה דפים מיושנים. מטמון של דף מלא יכול למסור טופס עם אסימון אבטחה שפג תוקפו (nonce או אסימון CSRF). השרת דוחה את השליחה, ובהתאם להגדרות המבקר אינו רואה שגיאה ברורה.
המלכודת של כתובת From
הסיבה השלישית ראויה למבט קרוב, מפני שבהגדרות טפסים רבות היא מובנית כברירת מחדל. DMARC בודק אם הדומיין בכתובת From הגלויה תואם לדומיין ש-SPF או DKIM מאשרים. אם הטופס שולח הודעה ״מאת״ כתובת המבקר, השרת אינו מורשה לשלוח עבור הדומיין הזה, ולכן הבדיקה נכשלת. בהתאם למדיניות DMARC של דומיין המבקר ולספק הדואר של האתר, ההודעה מגיעה לספאם או נדחית. הפתרון פשוט: לשלוח מכתובת בדומיין של האתר ולהציב את כתובת המבקר ב-Reply-To. לחיצה על ״השבה״ עדיין מגיעה למבקר.
- From: כתובת המבקר
- ללא Reply-To
- PHP mail() ישירות משרת האתר
- ללא SPF, DKIM או DMARC עבור הדומיין השולח
- ההודעה קיימת רק כדואר אלקטרוני
- From: כתובת בדומיין של האתר, למשל form@yourdomain
- Reply-To: כתובת המבקר
- SMTP עם אימות או שירות שליחה
- SPF, DKIM ו-DMARC מוגדרים ומתואמים
- עותק נשמר גם במסד הנתונים
מה לעשות
- 1יש לשלוח הודעת בדיקה דרך הטופס באופן קבוע — לפחות פעם בחודש, ותמיד אחרי עדכונים, החלפת ערכת עיצוב או שינויים בהגדרות הדואר. יש לסמן אותה בבירור כבדיקה כדי שאיש לא ישיב לה.
- 2חשוב להכיר את הקצב הרגיל. אם הטופס מביא בדרך כלל כמה הודעות בשבוע, שבועיים של שקט הם סיבה לבדיקה, לא חודש שקט.
- 3יש לשלוח באמצעות SMTP עם אימות — דרך ספק הדואר או שירות שליחה ייעודי — במקום להסתמך על PHP mail().
- 4יש להשתמש בדומיין של האתר ב-From ובכתובת המבקר ב-Reply-To. לאחר מכן יש להגדיר SPF, DKIM ו-DMARC לאותו דומיין כדי שההודעות יעברו את הבדיקות.
- 5יש לשמור עותק של כל שליחה במסד הנתונים. תוספי טפסים רבים מציעים זאת, לפעמים כהרחבה. אם הדואר נכשל, הפניות עדיין קיימות.
- 6יש לבדוק את הטופס אחרי כל עדכון תוסף — כולל ה-CAPTCHA, וגם לאחר סירוב לעוגיות.
קל לשכוח בדיקות כאלה, ולכן כדאי להפוך אותן לאוטומטיות. עם חשבון ודומיין מאומת, formexposed יכול לשלוח שליחת בדיקה שמסומנת בבירור ולבדוק אם היא מגיעה בפועל (בדיקת מסירה, בהפעלה יזומה בלבד). הוא גם מזהה שקט — טופס שבדרך כלל מקבל הודעות מפסיק פתאום לקבל אותן — ובודק SPF, DKIM ו-DMARC של הודעות ההתראה, וכן תוקף תעודת TLS ותוקף הדומיין. התרעה נשלחת רק כשמשהו משתנה.
למבט ראשון בלבד: בדיקה חינמית ב-formexposed.com אינה דורשת חשבון ואינה שולחת דבר. בין היתר, היא מראה אם CAPTCHA קיים אבל אינו תקין — רכיב ללא הסקריפט שלו, מפתח בדיקה ציבורי, שגיאות בדפדפן — אחת הדרכים השקטות שבהן טופס מפסיק לעבוד. רק הודעת בדיקה אמיתית יכולה לאשר שהודעות אכן מגיעות, ולכן כדאי לשלוח אחת היום.