במדריך הזה מוסבר איך להשתמש ב-Mail API כדי לקבל אימייל.
הודעות אימייל שנשלחות לאפליקציה שלכם מיושמות כבקשות HTTP שמכילות נתוני MIME. כדי לעבד הודעות אימייל נכנסות, אתם משייכים כתובות אימייל ל-handlers של סקריפטים בהגדרת האפליקציה, ואז כוללים את ה-handlers בקוד של האפליקציה.
אימייל נכנס יוצר בקשות HTTP, שמועברות לסקריפטים המתאימים. הסקריפטים שמטפלים באימייל הנכנס צריכים להיות בשירות ברירת המחדל.
מידע נוסף על שירות הדואר זמין במאמר סקירה כללית על Mail API.
לפני שמתחילים
צריך לרשום את כתובות האימייל של השולחים כשולחים מורשים. למידע נוסף, אפשר לעיין במאמר בנושא מי יכול לשלוח אימייל.
הגדרת האפליקציה לקבלת אימייל
כשיוצרים אפליקציה חדשה, אימיילים נכנסים מושבתים כברירת מחדל. כדי להפעיל את האימייל הנכנס, צריך לשנות את קובץ app.yaml בשירות ברירת המחדל.
מוסיפים קטע
inbound_servicesשמאפשר את שירות האימייל הנכנס. לדוגמה:אם לא תפעילו אימייל נכנס על ידי הכללת הקטע הזה בקובץ ההגדרות, האימייל הנכנס יושבת והודעות אימייל שנשלחות לאפליקציה יתעלמו.
מוסיפים מיפויים שמשייכים כתובות אימייל שממופות לכתובות URL ל-handlers של סקריפטים.
בשירות ברירת המחדל, כתובת האימייל לקבלת אימייל היא בפורמט הבא:
[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/.+תואם לכל כתובות האימייל שמופנות לאפליקציה. אם רוצים, אפשר להגדיר כמה פונקציות לטיפול בבקשות לכתובות אימייל שונות, כמו בדוגמה הבאה:כתובות ה-URL של הודעות אימייל נכנסות מותאמות לרשימה הזו מההתחלה ועד הסוף, כך שאם כתובת URL של הודעת אימייל תואמת ליותר מתבנית אחת, המטפל הראשון שתואם יהיה זה שיופעל. כך אפשר לכלול את ה-handler של catchall כמפוי האחרון. ה-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.