איך לשלוח אימייל מתוכנית פייתון

03/07/2020

פוסט זה כולל טיפ קצר לעבודה יעילה עם Python. אם אתם רוצים ללמוד פייתון יותר לעומק אני ממליץ על קורס Python כאן באתר.
הקורס כולל עשרות שיעורי וידאו והמון תרגול מעשי וילמד אתכם Python בצורה מקצועית מההתחלה ועד הנושאים המתקדמים.

נכון אימייל אולי פחות מגניב מ WhatsApp אבל עדיין קיים ואנשים מבוגרים וצעירים עדיין משתמשים בו די הרבה. בואו נראה איך לשלוח אימייל מ Python כדי שהסקריפטים שלכם יוכלו בקלות לדבר עם העולם.

1. תחילה הקוד

התוכנית הבאה ב Python (כמעט) שולחת אימייל ממני אליי:

from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail

message = Mail(
    from_email='ynon@ynonperek.com',
    to_emails='ynonperek@gmail.com',
    subject='Sending with Twilio SendGrid is Fun',
    html_content='and easy to do anywhere, even with <strong>Python</strong>')

sg = SendGridAPIClient('API KEY')
response = sg.send(message)

ולמה כמעט? כי לפני שמריצים אותה צריך לעדכן את ה API Key של Sendgrid. אבל לפני שנגיע לזה בואו נדבר על הקוד ונראה שורה שורה איך זה עובד.

2. שורות 1-2 פקודות import

התוכנית מתחילה ב-2 שורות של פקודות import:

from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail

אנחנו מייבאים שתי פונקציות משתי חבילות שונות: הפונקציה SendGridAPIClient מהחבילה sendgrid והפונקציה Mail מהחבילה sendgrid.helpers.mail.

עכשיו יהיה זמן טוב לשאול מה זה או מי זה SendGrid. טוב אז סנדגריד הם חברה שמטפלת בשליחת אימיילים. שליחת אימייל הפכה לנושא מסובך מאז שספאמרים הבינו שאפשר לשלוח אימייל בחינם לכל אחד והתחילו לשלוח המון המון הודעות ספאם לכל העולם. החברות שיוצרות תיבות דואר (גוגל, יאהו, מייקרוסופט ואחרות) התחילו לסנן הודעות כדי שספאם לא יגיע למשתמשים. סנדגריד היא בעצם סוג של חברת תיווך: אנחנו מבקשים מהם לשלוח את המייל והם כבר יודעים לדבר בשמנו עם גוגל כדי שהמייל לא יסונן החוצה. בנפחים גדולים השירות שלהם כרוך בתשלום אבל התוכנית החינמית כוללת עד 100 הודעות ביום ומספיקה בשביל הדוגמאות שלנו כאן.

3. שורות 4-8 הכנת המייל

הפקודה המרכזית של התוכנית לוקחת 4 שורות והיא הפקודה שמכינה את הודעת האימייל:

message = Mail(
    from_email='ynon@ynonperek.com',
    to_emails='ynonperek@gmail.com',
    subject='Sending with Twilio SendGrid is Fun',
    html_content='and easy to do anywhere, even with <strong>Python</strong>')

אנחנו רואים קריאה לפונקציה Mail (שאנחנו זוכרים שיבאנו אותה מתוך החבילה sendgrid.helpers.mail) והעברת 4 פרמטרים לפונקציה: כתובת השולח, כתובת הנמען, נושא ותוכן.

ב Python פונקציות רבות שמקבלות הרבה פרמטרים בנויות כך שאפשר יהיה לתת שם לכל פרמטר ואז לא משנה באיזה סדר אנחנו מעבירים את המידע. כך הקריאה התיאורטית הבאה היתה מביאה בדיוק לאותה תוצאה:

message = Mail(
    subject='Sending with Twilio SendGrid is Fun',
    html_content='and easy to do anywhere, even with <strong>Python</strong>')
    from_email='ynon@ynonperek.com',
    to_emails='ynonperek@gmail.com',

או בכל סדר אחר שתבחרו.

את ההודעה שומרים במשתנה message ובהמשך התוכנית נשלח אותו לסנדגריד.

4. שורה 10 - חיבור לממשק של SendGrid

בשורה 10 אנחנו יוצרים אוביקט חיבור לממשק התקשורת:

sg = SendGridAPIClient('API KEY')

אנחנו רואים שיוצרים אוביקט חדש לפי האות הגדולה בתחילת שם הפונקציה SendGridAPIClient. את האוביקט שנוצר שומרים במשתנה בשם sg. את הערך האמיתי של הפרמטר שאני מעביר ל SendGridAPIClient תצטרכו לקחת מממשק הניהול של SendGrid ואני אסביר על זה בסוף המייל.

בעיקרון ב Python אנחנו לא אוהבים לשמור API Keys בתוך הסקריפט. טריק טוב לשמור את ה API Key מבחוץ הוא לשמור אותו במשתנה סביבה ולקרוא מתוך הסקריפט את הערך של משתנה הסביבה. בגלל זה בתוכניות דוגמא רבות נראה קוד שנראה כך:

sg = sendgrid.SendGridAPIClient(api_key=os.environ.get('SENDGRID_API_KEY'))

5. שורה 11 - שליחת ההודעה

אחרי כל ההכנות אפשר לשלוח את ההודעה:

response = sg.send(message)

אם ה API Key שלכם מעודכן וחשבון הסנדגריד פעיל - אני אמצא את ההודעה אצלי בג'ימייל (ונו תהיו בני אדם ותחליפו את כתובת הנמען לפני שמנסים את התוכנית, אני מקבל גם ככה יותר מדי אימיילים).

6. הוראות הפעלה

בשביל להפעיל את התוכנית אנחנו צריכים להתקין את החבילה של סנדגריד וגם ליצור חשבון באתר שלהם. התקנת החבילה היא החלק הקל. משורת הפקודה נרשום:

python -m pip install --user sendgrid

בשביל ליצור חשבון סנדגריד תצטרכו לבקר באתר שלהם בכתובת https://signup.sendgrid.com/ ולמלא את הפרטים בטופס. לאחר מכן הם ישלחו אליכם מייל לאימות חשבון ותצטרכו ללחוץ על הקישור במייל.

אחרי שיצרתם את החשבון בתוך תפריט Dashboard תמצאו קישור בשם Integrate using our Web API or SMTP Relay. לחצו שם Start ואחרי זה בחרו Web API, בחרו את שפת Python ובתיבה מספר 2 הכניסו שם למפתח ה API שלכם ולחצו Create Key. זה ייתן לכם מפתח API להקליד בתוך התוכנית.

השלב האחרון הוא להיכנס למסך Settings ושם ל Sender Authentication. ואז ללחוץ על Verify a Single Sender.

בשביל שסנדגריד ידעו שאתם לא ספאמרים אתם צריכים לספק להם את כתובת המייל הנוכחית שלכם עם עוד כמה פרטים מזהים, הם ישלחו לשם קישור ואחרי זה אתם תלחצו על הקישור כדי לאמת את הכתובת.

אחרי כל זה תוכלו לחזור לתוכנית, לוודא שהכנסתם את ה API Key שלכם, את כתובת השולח שהרגע אימתתם ואת כתובת הנמען (כדי שהמייל יגיע אליכם ולא אליי) ולצאת לדרך.

(נ.ב. בעוד מספר שבועות נפתח המחזור השני של בוטקמפ Python למתכנתים - הבוטקמפ מיועד למתכנתים שיודעים לכתוב קוד בשפות אחרות ורוצים ללמוד Python בצורה פרקטית דרך כתיבת תוכניות מועילות והתמודדות עם אתגרים אמיתיים. לפרטים נוספים בקרו בדף הקורס)