לעתים קרובות תצטרך לשלוח מיילים לחשבונות רבים באמצעות תוכניות לאימות ולמטרות רבות אחרות.
פרוטוקול SMTP מגדיר תקנים המאפשרים תקשורת דואר אלקטרוני בין שרתי דואר וסוכני העברת דואר, בעוד שפרוטוקול IMAP מיועד לקבלת מיילים.
Go מספקת פונקציונליות לפעילויות הקשורות לאימייל המוגדרות על ידי ה-RFC בחבילת net/smtp, המכילה גם הרחבות 8BITMIME, AUTH ו-STARTTLS.
הקוד המשמש בפרויקט זה זמין ב-a מאגר GitHub והוא בחינם עבורך לשימוש תחת רישיון MIT.
כיצד לשלוח אימיילים ב-Go באמצעות חבילת Net/SMTP
חבילת net/smtp היא חלק מהספרייה הסטנדרטית של Go, כך שאין צורך להתקין חבילה חיצונית כלשהי. אתה רק צריך לייבא את החבילה לפני השימוש בה.
יְבוּא (
"net/smtp"
"עֵץ"
"crypto/tls"
"fmt"
)
תצטרך גם לייבא את ה עֵץ חבילה לרישום שגיאות למסוף ול- crypto/tls חבילה להגדרת חיבור בטוח.
לאחר שייבאת את חבילת net/smtp, עליך לכתוב א שלח מייל() פונקציה כדי לשלוח את הדואר ולאחר מכן לקרוא לפונקציה בפונקציה הראשית.
funcרָאשִׁי() {
fmt. הדפס (SendMail())
}
funcשלח מייל()חוּט {
// הוסף קוד כאן
}
ה שלח מייל() הפונקציה תכיל את הקוד ששולח את הדואר לנמענים.
איך עובדת שליחת אימיילים
פרוטוקול SMTP מגדיר את הפרמטרים שכל דואר צריך להיות. פרמטרים אלו הם כתובות הדואר של השולח והמקבל, יציאה בה נשלח הדואר, שרת מארח והודעה.
הפרמטרים המצוינים לעיל חשובים לשליחת מיילים.
במדריך זה, תלמד לשלוח מיילים של Yahoo. עם זאת, התהליך זהה עבור כל ספק שרת הדואר (MSP) שבו אתה משתמש.
מכיוון שאתה משתמש ב-Yahoo Mail, היכנס לחשבון שלך דואר יאהו חשבון, עבור אל פרטי חשבון, ולחץ על אבטחת חשבון לשונית. לאחר מכן צור סיסמת אפליקציה. תצטרך לתת שם לאפליקציה, ואז Yahoo Mail תיצור סיסמה עבור האפליקציה, ותוכל להשתמש בסיסמה בקוד שלך יחד עם כתובת הדואר שלך.
בתוך ה שלח מייל() פונקציה, תכריז על שלושה משתנים; משתנה שמכיל את מחרוזת האימייל שלך, אחד שמכיל את סיסמת הדוא"ל שלך, ומחרוזת שמחזיקה את כתובת הדוא"ל שאליה אתה שולח הודעות.
מאת := "[email protected]"
סיסמה := "aSecurePasswordHere"
אל := "[email protected]"
אפשר להשתמש בפרוסה ו לולאה דרך האלמנטים אם אתה מתכוון לשלוח אותם למספר נמענים.
השגה והגדרה של מארח הדוא"ל והיציאה
פרוטוקול SMTP משתמש במספרי המארח והיציאה כדי לזהות את מקור הדוא"ל. זה המקום שבו ה-MSP שלך נכנס לתמונה. אתה צריך לדעת את המארח ואת מספר היציאה שה-MSP שלך מאפשר לך להשתמש בו.
בדוק את המשאב הזה לקבלת רשימה של מארחי MSP ו מספרי יציאות אם אתה משתמש בדוא"ל ציבורי כמו Gmail, Yahoo או Outlook. גוגל כיבה את "אפליקציות פחות מאובטחות" עבור Gmail; ייתכן שתרצה לאבטח את האפליקציה שלך אם אתה משתמש ב-Gmail.
לאחר שקיבלת את מספר היציאה וכתובת המארח, הקצה אותם למשתנים כמו זה:
מארח := "smtp.mail.yahoo.com"
יציאה := "465"
מספרי המארח והיציאה למעלה הם מ-Yahoo Mail לשימוש בחשבונות רגילים. השרת מתארח בכתובת smtp.mail.yahoo.com, ואתה רשאי להשתמש בפורט 465 לשלוח מיילים.
הכרזה על תוכן המייל
השלב הבא הוא להכריז על תוכן הדואר כמשתנים. הנושא והגוף מרכיבים את המסר.
נושא := "היי, אני רק בודק אותך."
body := "מקווה שאתה בסדר! מה שלומך היום. "
ה נושא משתנה הוא נושא המייל; ה גוּף משתנה הוא גוף האימייל שאתה שולח.
הגדרת כותרות הדוא"ל
תצטרך ליצור מפה של מחרוזות כדי לציין את הכותרות של האימייל.
כותרות := עשה(מַפָּה[חוּט]חוּט)
headers["From"] = from
headers["To"] = to
headers["Subject"] = נושא
הודעה := ""
ל k, v := טווח כותרות {
הודעה += fmt. Sprintf("%s: %s\r", k, v)
}
הודעה += "\r" + body
ראשית, אתה יוצר מפה של מפתחות וערכים של מחרוזות ומגדיר את הכותרות של הכתובת שלך, כתובת הנמען והנושא, כפי שמוצג לעיל. שימוש בטווח עבור לולאה על כותרות מפה, א הוֹדָעָה המשתנה מוכרז כמכיל את הכותרות ואת ההודעה באמצעות עיצוב מחרוזת.
אימות הדוא"ל
המייל צריך אימות כדי לאמת את המקור. חבילת smtp מספקת פונקציונליות לאימות דואר אלקטרוני באמצעות ה PlainAuth. ה PlainAuth השיטה לוקחת את הזהות, האימייל, הסיסמה והמארח של השולח כפרמטרים ומחזירה an Auth אובייקט שבו תשתמש לשליחת האימייל.
אימות := smtp. PlainAuth("", from, password, host)
הזהות היא שם המשתמש שלך, אותו ניתן להשאיר ריק, כפי שניתן לראות במקרה זה.
יצירת חיבור לאימייל
ספקי שירותי דואר מסוימים דורשים ממך לשלוח את האימייל באמצעות חיבור. במאמר זה, ניצור א חיבור TCP לשרת עם תצורות TLS.
tlsConfig := &tls. תצורה{
InsecureSkipVerify: נָכוֹן,
שם שרת: מארח,
}
בקוד שלמעלה, ביצעת תצורת TLS על ידי הפניה של Config לבנות איפה InsecureSkipVerify הוגדר ל נָכוֹן, ושם השרת הוקצה ל- מנחה מִשְׁתַנֶה.
עליך ליצור חיבור TCP באמצעות ה חוּגָה שיטת ה tls חֲבִילָה. ה חוּגָה השיטה לוקחת את סוג החיבור (TCP), במקרה זה, את כתובת השרת ואת תצורות החיבור של TLS.
חיבור, טעות := tls. Dial("tcp", serverAddress, tlsConfig) שגיאה != אֶפֶס {
עֵץ. פאניקה (שגיאה)
}
בקוד למעלה, ביצעת חיבור TCP וטיפלת בשגיאות; הכנת חבילת smtp חדשה באמצעות ה לקוח חדש שיטת ה net/smtp חֲבִילָה. ה לקוח חדש השיטה לוקחת חיבור ומארח, בהתאמה.
smtpClient, err := smtp. NewClient (חיבור, מארח)
אם טעות != אֶפֶס {
עֵץ. פאניקה (שגיאה)
}
עכשיו לאחר שיצרת smtp מופע לקוח, עליך להגדיר את הפרמטרים של smtpClient ולטפל בשגיאות.
אם err = smtpClient. אימות (אימות); טעות != אֶפֶס {
עֵץ. פאניקה (שגיאה)
}
אם err = smtpClient. דואר מ); טעות != אֶפֶס {
עֵץ. פאניקה (שגיאה)
}
אם err = smtpClient. Rcpt (כותרות["To"]); טעות != אֶפֶס {
עֵץ. פאניקה (שגיאה)
}
בדוגמה שלמעלה, העברת את הפרמטרים של האימות, כתובת השולח וכתובת הנמען לשיטות שלהם וטיפלת בשגיאות.
לבסוף, עליך לכתוב למופע החיבור, ותוכל לעשות זאת על ידי יצירת כותב באמצעות ה נתונים השיטה שלך לקוח smtp למשל.
כותב, טעות := smtpClient. נתונים()
אם טעות != אֶפֶס {
עֵץ. פאניקה (שגיאה)
}
_, טעות = כותב. לִכתוֹב([]בייט(הוֹדָעָה))
אם טעות != אֶפֶס {
עֵץ. פאניקה (שגיאה)
}
לאחר יצירת כותב, אתה כותב פרוסת בייט של ההודעה באמצעות ה- לִכתוֹב שיטה כמו בדוגמה למעלה.
טעות = סופר. סגור()
אם טעות != אֶפֶס {
עֵץ. פאניקה (שגיאה)
}
err = smtpClient. לְהַפְסִיק()
אם טעות != אֶפֶס {
לַחֲזוֹר
}
לַחֲזוֹר "הצליח, הדואר נשלח!"
סגור את הסופר וצא ממופע החיבור של לקוח smtp באמצעות הקוד שלמעלה. ה שלח מייל() הפונקציה מחזירה הודעת הצלחה, כפי שמוצג לעיל.
בהתקשרות ל שלח מייל() לתפקד ב רָאשִׁי פונקציה, אתה אמור לקבל את הודעת ההצלחה מחוברת למסוף שלך, ואת האימייל` נשלח לנמען שלך.
יש עוד בחבילה נטו
חבילת net מכילה חבילות רבות לפונקציות הקשורות לרשת וחבילת smtp היא רק אחת מהן. אתה יכול גם להשתמש בחבילות TCP ו-HTTP לפיתוח הקשור לרשת.
אתה עשוי למצוא את חבילת net/smtp מהממת אם אינך מפתח אחורי. ישנן חלופות רבות אחרות לשליחת מיילים במהירות עם פחות שורות קוד. אתה יכול לבדוק חברות שיווק בדוא"ל כמו SendGrid, Twilio ו-MailChimp ושירותי ניוזלטר כמו Substack ו-Revue המאפשרים לך לשלוח מיילים למשתמשים רבים ללא לחץ.