במדריך הזה מוסבר איך להשתמש ב-Mail API כדי לקבל אימייל.
הודעות אימייל שנשלחות לאפליקציה מיושמות כבקשות HTTP שמכילות נתוני MIME. כדי לעבד הודעות אימייל נכנסות, משייכים כתובות אימייל ל-script handlers בהגדרות האפליקציה, ואז כוללים את ה-handlers בקוד של האפליקציה.
אימייל נכנס יוצר בקשות HTTP, שמועברות לסקריפטים המתאימים. הסקריפטים שמטפלים באימייל הנכנס צריכים להיות בשירות ברירת המחדל.
מידע נוסף על שירות הדואר זמין במאמר סקירה כללית על Mail API.
לפני שמתחילים
צריך לרשום את כתובות האימייל של השולחים כשולחים מורשים. מידע נוסף זמין במאמר בנושא מי יכול לשלוח אימייל.
הגדרת האפליקציה לקבלת אימייל
כשיוצרים אפליקציה חדשה, האפשרות לקבל אימיילים מושבתת כברירת מחדל. כדי להפעיל את האימייל הנכנס, צריך לשנות את קובץ app.yaml בשירות ברירת המחדל.
מוסיפים קטע
inbound_servicesשמאפשר את שירות האימייל הנכנס. לדוגמה:אם לא תפעילו אימייל נכנס על ידי הכללת הקטע הזה בקובץ ההגדרות, האימייל הנכנס יושבת והודעות אימייל שנשלחות לאפליקציה יתעלמו.
מוסיפים מיפויים שמשייכים כתובות אימייל שממופות לכתובות URL למטפלים בסקריפטים.
בשירות ברירת המחדל, כתובת האימייל לקבלת אימיילים היא בפורמט הבא:
[STRING]@[Google Cloud project ID].appspotmail.comבשירותים שאינם ברירת מחדל, כתובת האימייל היא בפורמט הבא:
[STRING]@[servicename]-dot-[Google Cloud project ID].appspotmail.comהודעות אימייל נשלחות לאפליקציה שלכם כבקשות HTTP POST באמצעות כתובת ה-URL הבאה, כאשר [ADDRESS] היא כתובת אימייל מלאה, כולל שם הדומיין:
/_ah/mail/[ADDRESS]כדי לטפל באימייל נכנס באפליקציה, צריך למפות כתובות URL של אימייל ל-handlers בקובץ
app.yaml:בדוגמה שלמעלה,
/_ah/mail/.+תואם לכל כתובות האימייל שמופנות לאפליקציה. אם רוצים, אפשר להגדיר כמה פונקציות handler לכתובות אימייל שונות, כמו בדוגמה הבאה:כתובות ה-URL של הודעות אימייל נכנסות מושוות לרשימה הזו מההתחלה ועד הסוף, כך שאם כתובת URL של הודעת אימייל תואמת ליותר מתבנית אחת, המטפל הראשון שתואם יהיה זה שיבוצע. כך אפשר לכלול מיפוי אחרון של 'טיפול בכל'. ה-handlers פועלים במודול ברירת המחדל (או בגרסת האפליקציה).
טיפול באימייל נכנס
כשמשתמשים ב-frameworks של Python לאינטרנט, הקונסטרוקטור InboundEmailMessage מקבל את הבייטים של גוף בקשת ה-HTTP. יש כמה דרכים ליצור את האובייקט InboundEmailMessage ב-Python. ב-Flask, request.get_data()
מחזיר את הבייטים של הבקשה.
אובייקט InboundEmailMessage מכיל את הודעת האימייל. השיטה bodies() מחזירה את הגופים בתוך ההודעה. אם קוראים לפונקציה bodies() ללא ארגומנטים, היא מחזירה איטרטור שמניב קוד HTML תחילה, ואז גופי טקסט פשוט. אם רוצים רק HTML או רק טקסט פשוט, אפשר להעביר ארגומנט ל-bodies():
אובייקט InboundEmailMessage כולל מאפיינים לגישה לשדות אחרים של ההודעה:
-
subjectמכיל את נושא ההודעה. -
senderהיא הכתובת של השולח, למשל"Nobody <nobody@example.com>". -
toהיא רשימה מופרדת בפסיקים של הנמענים הראשיים של ההודעה, למשל"Joe <joe@example.com>, Bill <bill@example.com>". -
cc: רשימה מופרדת בפסיקים של הנמענים שקיבלו עותק, לדוגמה:"Joe <joe@example.com>, Bill <bill@example.com>". -
dateמחזירה את תאריך ההודעה. -
attachmentsהיא רשימה שלAttachmentאובייקטים, שיכולה להיות ריקה. -
originalהיא ההודעה המלאה, כולל נתונים שלא מוצגים בשדות האחרים, כמו כותרות אימייל, כ-Pythonemail.message.Message.
הדמיה של הודעות נכנסות באמצעות שרת הפיתוח המקומי
אחרי שמגדירים את האפליקציה לטיפול באימיילים נכנסים, אפשר להשתמש במסוף של שרת הפיתוח כדי לדמות הודעות אימייל נכנסות:
- כדי לגשת לשרת הפיתוח כאדמין, עוברים אל http://localhost:8080/console ובוחרים באפשרות Sign in as administrator (כניסה כאדמין).
- בשרת הפיתוח, לוחצים על Inbound Mail (אימייל נכנס) בניווט.
ממלאים את הטופס שמופיע ולוחצים על שליחת אימייל.
כדי להפעיל את שרת הפיתוח, אפשר לעיין במאמר בנושא שרת פיתוח מקומי.
מידע נוסף על שיקולים להעברה של Mail API זמין במדריך Mail handlers.