301,118 מיילים מ-26 שנה, בלי לאבד הודעה אחת
משרד עורכי דין ותיק בבית שמש, המתמחה בנדל"ן ומקרקעין, עבד עשרות שנים עם תוכנת דואר שמיקרוסופט נטשה. 26 שנה של התכתבות עם לקוחות היו כלואות בתוכה.
האתגר
התוכנה הייתה Windows Live Mail, שמיקרוסופט הפסיקה לתמוך בה עוד ב-2017.
זה לא היה ארכיון שנחמד שיהיה. עבור משרד עורכי דין, ההתכתבות ההיסטורית היא חלק מהתיק: אישורי מיסים, התכתבות עם רשם המקרקעין, הסכמים, אישורי בנקים. חובת שימור מסמכים אינה המלצה.
הבעיה הייתה כפולה. ראשית, הדואר היה נעול בפורמט מת. הפונקציה המובנית של Windows Live Mail לייצוא ל-Outlook פשוט לא עבדה, היא נכשלת על גרסאות Office מודרניות של 64 ביט.
שנית, הארכיון היה מפוזר ומשוכפל. הדואר היה קיים בשני מחשבים במשרד, בעותקים חופפים אך לא זהים. יותר מ-340 אלף קבצים ו-103 ג'יגה-בייט, עם כמות לא ידועה של כפילויות.
מה שהיה קל לעשות, ולא נכון
הפתרון המקובל לזיהוי מיילים כפולים הוא להשוות את המזהה הייחודי שבכותרת ההודעה (Message-ID). זה מהיר, וזה מה שרוב הכלים עושים.
בדקנו את זה מול הנתונים האמיתיים, והתוצאה הפתיעה: נמצאו מאות מקרים שבהם שתי הודעות שונות חלקו את אותו מזהה ואת אותו גודל בדיוק, אך התוכן שלהן היה שונה.
כלומר השיטה המקובלת הייתה מוחקת מאות מיילים אמיתיים, בשקט, בלי שאיש היה יודע. במשרד עורכי דין, מייל שנעלם הוא לא תקלה טכנית, הוא חשיפה מקצועית.
בחרנו בדרך האיטית והבטוחה: חתימה קריפטוגרפית (SHA-256) של כל קובץ. שתי הודעות נחשבות זהות רק אם כל בייט בהן זהה. שום דבר לא נמחק על סמך השערה. כך הוסרו עשרות אלפי כפילויות אמיתיות, ואף הודעה ייחודית לא.
הבעיה שלא ציפינו לה
בשלב ההמרה נתקלנו בקיר.
הדרך המקובלת להמיר דואר ל-Outlook היא להשתמש במנוע ההמרה של Outlook עצמו. הרצנו, וקיבלנו הודעת הצלחה: 301,118 הודעות הומרו, האימות עבר.
אבל הפלט היה זבל. ההודעות נפתחו בלי נושא, בלי נמענים, והגוף שלהן הכיל את הקוד הגולמי של המייל במקום את הטקסט. העברית הייתה משובשת לחלוטין. הכלי דיווח על הצלחה מלאה, וייצר ארכיון חסר ערך.
מה שגילינו בחקירה: מנוע ההמרה של Outlook מושבת בהתקנות המודרניות של Microsoft 365 (התקנות מסוג Click-to-Run). הוא נטען, מקבל את הבקשה, מדווח שהכול תקין, ולא עושה כלום.
זה לא באג שלנו. אימתנו שאפילו הכלי הרשמי של מיקרוסופט עצמה נכשל באותה נקודה בדיוק.
זו הנקודה המסוכנת ביותר בכל הפרויקט. לא כישלון רועש, אלא הצלחה מדומה. משרד שהיה סומך על הדיווח הזה, מוחק את המקור וממשיך הלאה, היה מגלה את האובדן שנים אחר כך. הרחבנו על זה בפוסט כשהכלי מדווח הצלחה ומשקר לך.
הפתרון
כשהכלים הקיימים לא הספיקו, בנינו כלי משלנו.
WLM2PST עוקף את המנוע השבור ומשתמש במנוע ה-MIME של Windows עצמו, אותו רכיב שהפעיל את Windows Live Mail מלכתחילה. הארכיון מפורק בחזרה על ידי אותה טכנולוגיה שיצרה אותו.
ארבעה עקרונות הנחו את הפיתוח:
- קבצי המקור לעולם אינם משתנים. הכלי קורא בלבד.
- בדיקה עצמית לפני כל ריצה. הכלי ממיר קובץ בדיקה עם עברית וקובץ מצורף, ואם התוצאה אינה תקינה הוא מסרב לרוץ. אחרי מה שראינו, כשל שקט הוא בלתי מתקבל על הדעת.
- שער שלמות לכל הודעה. הודעה שהיה לה נושא במקור חייבת לצאת עם נושא. הודעה עם קובץ מצורף חייבת לצאת עם קובץ מצורף.
- התאוששות מנקודת הכשל. אם התהליך נקטע, הוא ממשיך בדיוק משם.
התוצאה
| הודעות שהועברו | 301,118 |
| הודעות שאבדו | 0 |
| אנשי קשר שהופקו | 1,532 |
| זמן ההמרה | 2 שעות 17 דקות |
הארכיון חולק לשישה קבצים לפי תקופות, בשמות בעברית, ונשמר בשני עותקים: אחד מקומי ואחד מגובה בענן.
כל הודעה אומתה. לא בדגימה, אחת לאחת, מול רשימה מלאה שנבנתה מראש. סכום ההודעות בכל קובץ הותאם למספר המקורי. בסוף התהליך נערכה גם בדיקה ויזואלית: עברית, תאריכים מ-2005 עד 2026, קבצים מצורפים שנפתחים.
מה שהלקוח קיבל
- ארכיון דואר מלא, נגיש מ-Outlook, שניתן לחפש בו
- אנשי הקשר של המשרד בפורמט תקני
- שני עותקים, אחד מהם מגובה בענן
- רשומת ביקורת מלאה שמאפשרת, בעוד שנים, לאמת שהודעה מסוימת אכן הועברה ולאיזה קובץ
- המשכיות מלאה, 26 שנה של התכתבות, זמינות כמו ביום שנשלחו
הערה על שקיפות
הכלי שפיתחנו במסגרת הפרויקט פורסם כקוד פתוח תחת רישיון MIT, כולל התיעוד המלא של התקלה שגילינו, כדי שמי שייתקל בה לא יאבד נתונים.
למה זה מעניין אותך
רוב ספקי ה-IT היו עוצרים בשלב שבו הכלי הרשמי דיווח על הצלחה. הם לא היו פותחים את התוצאה כדי לבדוק, ולא היו מגלים שהארכיון הפך לזבל.
זה ההבדל בין תיקון לבין אחריות.
אם יש לכם מערכת ישנה שצריך להעביר, או מידע שאתם לא בטוחים שהוא בטוח, זה חלק מהמעברים ל-Microsoft 365 ומשירותי המחשוב הנוספים שאנחנו עושים.
שאלות? צרו קשר.