השתמש ב-Azure כדי לשלוח אימייל עם SendGrid, Graph, ו-Office 365

מיקרוסופט Azure אין לו שירות משלוח דואר אלקטרוני. בין אם אתה בודק יישומים או מפתח סקריפטים ב-Azure כדי לשלוח דואר אלקטרוני, ידע שאין שירות דואר זמין לך.

חיבור SMTP יוצא דרך פתח 25 נחסם לחלוטין ב-Azure גם. אם אתה לקוח עסקי, תוכל לבקש לבטל את החסימה עבור פתח 25 עבור נדלת ה-Azure שלך. אחרת, איך אפשר לשלוח דואר אלקטרוני מ-Azure?

יש בדרך כלל שני דרכים לאפשר דואר יוצא דרך Azure; באמצעות שרת חכם SMTP ו-בקשות REST API. רוב שירותי משלוח דואר מציעים שתי שיטות של שליחת דואר דרך SMTP ו-API. במאמר זה, תלמד כיצד לשלוח דואר אלקטרוני מ-Azure לשאר העולם.

דרישות מוקדמות

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

הבנת אילו שירותי אימייל להשתמש בהם עם Azure לשליחת אימיילים

ישנם מספר שירותי אימייל בענן זמינים לשימוש. כמה מהשמות המובהקים הם SendGrid, MailJet, ו־MailGun. בין איזה שירות אימייל שתבחר, שימוש בהם לשליחת אימיילים מתוך Azure דומה; כתובת שרת ופתחה עבור SMTP וכתובת נקודת קצה של API עבור REST.

SendGrid הוא דוגמה לשירות אימייל צד שלישי המשמש במאמר זה. שירותי אימייל נוספים שמשמשים כדוגמאות הם סליל SMTP של Office 365 ו- Microsoft Graph API.

נושא קשור: איזה שירות אימייל של Azure לבחור עבור 2021

שימוש ב-SendGrid

SendGrid הוא כנראה האפשרות הפופולרית ביותר לשילוח דואר אלקטרוני מ-Azure. Azure ו-SendGrid כל כך פופולריים מכיוון שבעבר הייתה תוכנית חינמית עם הגבלה של 25,000 דואר אלקטרוני לחודש ללקוחות Azure.

אף על פי שהתוכנית החינמית אינה מוצעת עוד בפורטל Azure, כפי שוודא על ידי Microsoft, עדיין ניתן להירשם למינוי חינמי עם הגבלת 100 דואר אלקטרוני ליום. לאחר מכן תהיה לך גישה לשירות ה-SMTP של SendGrid או ל- API האימייל כדי לשלוח דואר אלקטרוני מיישום או מ-VM של Azure.

יצירת חשבון SendGrid

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

Signing up for a free SendGrid account

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

Entering your account information

כאשר אתה מתחבר לראשונה ל-SendGrid, ייתכן שתקבל שגיאה שאומרת "אינך מורשה לגשת ל-SendGrid; נא ליצור קשר עם התמיכה." כאשר זה קורה, פתח כרטיס עם תמיכת SendGrid. עשויים להיות צורך לשאול שאלות אימות לפני שישוחרר גישתך.

תתבקש להפעיל אימות דו־גורמי בעת התחברותך הראשונה. וודא שאתה עוקב אחר ההוראות בדיוק.

יצירת זהות שולח ב-SendGrid

לאחר יצירת החשבון ב-SendGrid, השלב הבא הוא לאמת את זהות השולח. קיימות שתי אפשרויות; לאמת שולח יחיד (לדוגמה, [email protected]) או לאמת כל דומיין (לדוגמה, domain.com).

בדוגמה זו, תיצור זהות שולח יחידה שתשמש ככתובת השולח שלך. רק כתובת השולח המאומתת תאושר לשלוח הודעות דרך שירות ה-SendGrid. עקוב אחר ההוראות למטה כדי ליצור את זהות השולח היחידה.

  1. על הדף ברוך הבא, לחץ על הכפתור צור שולח יחיד.
Creating a single sender

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

Providing the sender details

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

Viewing the sender address verification status

3. כדי לאמת את השולח, יש למצוא את הדוא"ל שנשלח אל כתובת השולח, דומה לתמונה למטה. לאחר מכן, יש ללחוץ על כפתור אמת שולח יחיד.

Verifying the Single Sender address

כתובת השולח תוכתב ככתובת מאומתת. אתה אמור לראות דף דומה למטה, המאשר שהאימות של השולח הושלם.

Confirming that the sender address verification is complete

יצירת מפתח API של SendGrid

לאחר יצירת כתובת השולח היחידה, יהיה ניתן ליצור ממשק ליצירת מפתחות API. יש לחשוב על מפתח API של SendGrid כסיסמה. בלעדיו, הקוד שלך לא יוכל לאמת עם שירות חשיפת ה-SMTP של SendGrid. יש לעקוב אחר השלבים הבאים כדי ליצור מפתח API חדש.

  1. בתפריט הצד השמאלי, יש ללחוץ על הגדרות > מפתחות API. לאחר מכן, יש ללחוץ על כפתור צור מפתח API בפינה הימנית העליונה של הדף.
Creating a new SendGrid API key

2. יופיע הפריט המוקפץ צור מפתח API. עליך להזין את שם המפתח שאתה יוצר. יש לבחור שם שמקובל, כמו "מפתח בדיקה של Azure". בנוסף, מטעמי פשטות, יש לבחור גישה מלאה כרשות. לבסוף, יש ללחוץ על כפתור צור וצפה.

Naming the API key and choosing permissions

3. המפתח API החדש מוצג ליד. עכשיו יש להעתיק ולשמור את הערך של המפתח, מכיוון שהוא לא יוצג שוב. לאחר ההעתקה של המפתח, יש ללחוץ על סיום.

Saving the new SendGrid API key

שליחת דוא"ל מ-Azure באמצעות שירות הסלילה של SMTP של SendGrid

אתה כעת מחזיק ברכיבים הנדרשים (חשבון, שולח, ומפתח) כדי להשתמש ב-SendGrid לשליחת דואר אלקטרוני מ-Azure. זה הזמן לבדוק אם שירות ה-relay SMTP של SendGrid עובד. במקטע זה, תשתמש ב-PowerShell כדי לשלוח דואר אלקטרוני מ-VM של Azure.

לפני שאתה מפעיל קוד, עליך לדעת את הדרישות הבאות.

  • כתובת שרת ה-SMTP של SendGrid היא smtp.sendgrid.net.
  • שם המשתמש המשמש לאימות SMTP הוא תמיד apikey.
  • הסיסמה שיש להשתמש היא ערך מפתח ה-API שיצרת ב-SendGrid.
  • אל תשתמש בפורט 25. במקום זאת, השתמש בפורט 587.
  • רק כתובת השולח שאומתה ב-SendGrid היא תקפה לשימוש כשולח של הדואר שלך. בדוגמה זו, השולח המורשה הוא [email protected].

התסריט למטה ישלח דואר אלקטרוני דרך ה-SendGrid SMTP relay. העתק את הקוד למטה ושנה את הערכים של $sendGridApiKey, From, To, ו-Body. לאחר מכן, הפעל את הקוד בסשן ה-PowerShell שלך. יש להתייחס להערות כדי להבין מה כל שורת קוד עושה.

הגדר את מפתח ה- API שלך כאן
$sendGridApiKey = 'SG...........P258'

$SendGridEmail = @{
	השתמש בכתובת השולח המאומתת שלך.
	From = '[email protected]'
	ציין את נמען האימייל. כל כתובת אימייל תקפה אמורה לעבוד.
	To = '[email protected]'
	עדכן זאת עם נושא האימייל שברצונך להשתמש בו.
	Subject = 'This is a test message from Azure via SendGrid'
	עדכן זאת עם גוף האימייל או ההודעה שברצונך לשלוח.
	Body = 'This is a test message from Azure via SendGrid'
	
	אל תשנה דבר מתחת לשורה זו
	SmtpServer = 'smtp.sendgrid.net'
	Port = 587
	UseSSL = $true
	Credential = New-Object PSCredential 'apikey', (ConvertTo-SecureString $sendGridApiKey -AsPlainText -Force)	
}

שלח את האימייל
Send-MailMessage @SendGridEmail

הדמו שמטה מראה איך הרצת הקוד שבמעלה ב-PowerShell נראית בזמן אמת.

Sending an Email from Azure using SendGrid SMTP Relay

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

Confirming the SMTP test message was delivered

קשר: Send-MailMessage: הדרך בפוורשל לשליחת אימייל

שליחת אימייל מ-Azure באמצעות פעולת SendGrid API

דרך נוספת להשתמש ב-SendGrid עם Azure לשליחת אימיילים היא באמצעות ממשק ה- API של SendGrid V3. במקום לתקשר עם SendGrid באמצעות SMTP, השימוש ב- API תקשר באמצעות HTTP. הבקשה ב- HTTP נשלחת לכתובת ה- API של SendGrid.

הסקריפט של PowerShell בדוגמה למטה משתמש בפקודת Invoke-RestMethod כדי לשלוח את בקשת האימייל מ-Azure ל-SendGrid. העתיקו את הקוד ושנו את ערכי המשתנים $sendGridApiKey, $fromAddress, $toAddress, $mailSubject ו-$mailMessage.

כאשר תסיימו לעדכן את המשתנים, הריצו את הקוד ב-PowerShell.

Set your API Key here
 $sendGridApiKey = 'SG………..P258'
 Set the sender and recipient addresses
 $fromAddress = "[email protected]"
 $toAddress = "[email protected]"
 Set the mail subject
 $mailSubject = "This is a test message from Azure via SendGrid API"
 Set the mail message
 $mailMessage = "This is a test message from Azure via SendGrid API"
 DO NOT CHANGE ANYTHING BELOW THIS LINE
 Compose the Mail Body
 $mailbody = @{
   personalizations = @(
     @{
       to      = @(
         @{
           email = $toAddress
         }
       )
       subject = $mailSubject
     }
   )
   from             = @{
     email = $fromAddress
   }
   content          = @(
     @{
       type  = "text/plain"
       value = $mailMessage
     }
   )
 } | ConvertTo-Json -Depth 10
 $headers = @{'Authorization' = "Bearer $($sendGridApiKey)" }
 $mailApiUri = 'https://api.sendgrid.com/v3/mail/send'
 Send the email
 Invoke-RestMethod -Method Post -Uri $mailApiUri -Body $mailbody -Headers $headers -ContentType application/json

לאחר הרצת הקוד ב-PowerShell למעלה, בדקו בתיבת הדואר של הנמען ואשרו שקיבל את ההודעה הבדיקה. הדוגמה למטה מציגה הודעת בדיקה שהגיעה בהצלחה מ-Azure דרך ממשק ה- SendGrid API.

Confirming the API test message was delivered

אם ברצונכם ללמוד עוד על ממשק ה- SendGrid Web API, בקרו בעמוד ה- V3 Mail Send API .

שימוש באימות SMTP של Office 365

אפשרות נוספת לשליחת אימיילים מ-Azure היא להשתמש בשירות ה- SMTP relay של Office 365. זה בתנאי שבארגון שלך כבר קיים מינוי ל-Exchange Online. בדיוק כמו בשימוש ב-SendGrid כמארח SMTP חכם, שימוש ב-SMTP relay של Office 365 דורש אימות ושימוש בפתחת 587 בלבד.

לפני שתשתמשו ב-SMTP relay של Office 365, עליכם לדעת את התנאים הבאים כדי שהוא יעבוד.

  • כתובת השולח חייבת להיות אובייקט תקף של נמען Exchange Online כגון תיבת דואר או משתמש דואר. אבל, אם רצונכם לאחסן קבצי אישור קבלה לא נמסרו, השתמשו בתיבת דואר במקום.
  • המשתמש באימות חייב לקבל רישיון תקף של Exchange Online. רק משתמשים רשומים ב-Exchange Online רשאים להשתמש ב-SMTP relay של Office 365.
  • נניח שהמשתמש המאומת שונה מהשולח. במקרה כזה, יש להקצות למשתמש ההרשאה לשליחה בשם לחשבון השולח.
  • שיטת האימות המשמשת היא בסיסית (תקן ישן). זה אומר שאם אימות בסיסי של SMTP מושבת בארגון שלך או כאשר Microsoft מסיימת סופית תמיכה באימות בסיסי, אימות SMTP לא יעבוד יותר.
  • כתובת שרת השליחה של SMTP היא smtp.office365.com, ומספר הפורט הוא 587.

קשור: איך לשלוח דואר אלקטרוני עם Office 365 Direct Send ו-PowerShell

יצירת כתובת שולח ב-Office 365

בדוגמה זו, השולח והמשתמש המאומת הם נפרדים. ודא שאתה מתחבר ל-Exchange Online PowerShell תחילה. לאחר התחברות, עקוב אחר השלבים הבאים.

צור תיק שולף באמצעות הפקודה למטה. שנה את הערכים הנכונים שלך ב--Name וב--PrimarySMTPAddress.

New-Mailbox -Shared -Name 'SMTP Mailer 365' -PrimarySMTPAddress '[email protected]'

על התיק שולף להיות נוצר ויחזור תוצאה דומה לזו למטה.

Creating a new shared mailbox as the sender

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

Add-RecipientPermission -Identity '[email protected]' -Trustee '[email protected]' -AccessRights SendAs -Confirm:$false

לאחר ביצוע הפקודה למעלה, עליך לקבל תוצאה דומה לזו למטה.

Assigning Send As permission

שליחת דואר אלקטרוני מתוך Azure באמצעות המרת SMTP של Office 365

לאחר יצירת כתובת השולח והקצאת הרשאת שליחה כ-, השלב הבא הוא לבדוק את משלוח הדואר האלקטרוני באמצעות PowerShell והמרת SMTP של Office 365.

הקוד למטה מאומת באמצעות [email protected]. הכתובת [email protected] מופיעה כשולח. ודא שאתה מקצה את הערכים הנכונים שלך לפני הרצת הקוד.

# ספק את פרטי האימות שלך של SMTP
$username = '[email protected]'
$password = '*************'

# ספק את כתובת האימייל של השולח והמקבל
$fromAddress = '[email protected]'
$toAddress = '[email protected]'

# ציין את נושא האימייל ואת ההודעה
$mailSubject = 'This is a test message from Azure via Office 365 SMTP Relay'
$mailMessage = 'This is a test message from Azure via Office 365 SMTP Relay'

# אל תשנה דבר למטה למעלה מהשורה זו
$Office365RelayEmail = @{
	From = $fromAddress
	To = $toAddress
	Subject = $mailSubject
	Body = $mailMessage	
	SmtpServer = 'smtp.office365.com'
	Port = 587
	UseSSL = $true
	Credential = New-Object PSCredential $username, (ConvertTo-SecureString $password -AsPlainText -Force)	
}

# שלח את האימייל
Send-MailMessage @Office365RelayEmail

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

עכשיו הגיע הזמן לבדוק את תיבת הדואר של המקבל. אשר כי הודעת הבדיקה התקבלה.

Confirming the Office 365 SMTP relay test message was delivered

שימוש ב- Microsoft Graph API לשליחת דואר אלקטרוני מ-Azure

שימוש ב-Office 365 SMTP relay, הדרך המאובטחת והמומלצת יותר היא להשתמש ב-Microsoft Graph API. עם Microsoft Graph API, ניתן לשלוח דואר אלקטרוני מכל תיקיה בארגון שלך באמצעות שיחות REST API.

כדי להשתמש ב-Microsoft Graph API לשליחת דואר, נדרש אפליקציה רשומה ב-Azure AD. על האפליקציה הרשומה להיות מוקצת עם הרשאת API של Mail.Send. הקטעים הבאים יראו לך איך להגדיר את Microsoft Graph API ולהשתמש בו לשליחת דואר אלקטרוני.

קשור: שימוש ב-Microsoft Graph API עם PowerShell

רישום אפליקציה חדשה ב-Azure Active Directory

בסעיף זה, תרשום אפליקציה חדשה באתר ה-Active Directory של Azure. האפליקציה החדשה תפעל כזהות אימות עבור Microsoft Graph. התחבר ל-פורטל של Azure אם עדיין לא נכנסת.

  1. נווט לתיקייה של Azure Active Directory —> רישום אפליקציות. לאחר מכן, לחץ על רישום חדש.
Creating a new app registration

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

3. מתחת לסוגי חשבונות נתמכים, בחר חשבונות בספרייה הארגונית הזו בלבד. הקלד את HTTP://localhost ככתובת ה-הפנייה URI. לבסוף, לחץ על הלחצן רשום.

Registering an application

4. המתן להשלמת ההרשמה. התהליך לוקח רק מספר שניות. אל תשכח לרשום את מזהה האפליקציה (הלקוח) ואת מזהה הספרייה (השוכר). תצטרך להשתמש בהם מאוחר יותר.

Saving the Application ID and Directory values

יצירת מפתח סודי ללקוח

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

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

  1. עבור אל אישורים וסודות, ולאחר מכן לחץ על סוד לקוח חדש.
  2. הזן את התיאור עבור מפתח הסוד לקוח, כמו key1.
  3. בחר מתי מפתח הסוד יפוג, ולחץ על הוסף. בדוגמה למטה, מפתח הסוד פג בעוד שנה.
Adding a new client secret key

תראה את המפתח החדש מופיע מתחת לקטע סודות לקוח. זהו הזמן היחיד שתראה את ערך המפתח, אז שמור עותק.

Viewing the client secret key value

עכשיו שיש לך את מזהה האפליקציה והסוד, השלב הבא הוא להקצות את ההרשאות הדרושות של Microsoft Graph API. בלעדי הקצאת הרשאות, האפליקציה יכולה לאמת אך לא תהיה לה סמכות לביצוע פעולות, כמו לשלוח דואר אלקטרוני.

כדי להתחיל בהקצאת הרשאות, עקוב אחר השלבים הבאים.

  1. לחץ על הרשאות API בתפריט מצד שמאל.

2. לאחר מכן, בדף הרשאות מוגדרות, לחץ על הכפתור הוסף הרשאה.

Adding API permission

3. בתפריט הצפיפות בקש הרשאות API, לחץ כדי לבחור API של Microsoft Graph.

Selecting Microsoft Graph API

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

5. בתיבת החיפוש, הקלד Mail.Send כדי לחפש אותה. בתוצאה, לחץ כדי לסמן את ההרשאה Mail.Send. לבסוף, לחץ על הוסף הרשאות.

Assigning mail.send permission

6. תשים לב שמצב ההרשאה הוא "לא ניתנה ל<שם הארגון>. בנקודה זו, אתה או מנהל גלובלי חייבים לתת קבלה ראשונית ליישום. לתת הרשאה, לחץ על הענק הסכמת מנהל ל<ארגון>.

Granting Admin consent

אז מצב ההרשאה ל-API משתנה ל "ניתנה עבור <שם הארגון>.".

Confirming the API permission status

קבלת טוקן גישה

בקשות שנשלחות ל-Microsoft Graph API דורשות טוקן גישה. בנקודה זו, יש לך כבר את מזהה היישום שלך, המפתח הסודי ומזהה השוכר. שלושת חלקי המידע הללו הם מה שנדרש כדי לקבל טוקן גישה.

הסקריפט של PowerShell למטה שולח בקשת טוקן גישה לנקודת הקצה של Microsoft Graph API. עליך לעדכן את $client_id, $client_secret ו־$tenant_id לערכים הנכונים שלך תחילה. לאחר מכן, העתק והדבק את הקוד ב-PowerShell כדי לבקש את טוקן הגישה.

# החלף עם זיהוי היישום שלך
$client_id = 'APPLICATION ID'
# החלף עם המפתח הסודי שלך
$client_secret = 'SECRET KEY'
# החלף עם זיהוי השוכר שלך
$tenant_id = 'TENANT ID'

# אל תשנה כלום מתחת לשורה זו
$request = @{
        Method = 'POST'
        URI    = "https://login.microsoftonline.com/$tenant_id/oauth2/v2.0/token"
        body   = @{
            grant_type    = "client_credentials"
            scope         = "https://graph.microsoft.com/.default"
            client_id     = $client_id
            client_secret = $client_secret
        }
    }
# קבל את הטוקן
$token = (Invoke-RestMethod @request).access_token
# צפה בערך הטוקן
$token

הדגמה למטה מראה את התסריט של PowerShell שלמעלה בפעולה. שים לב שהטוקן המבוקש נשמר במשתנה $token.

Requesting access token

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

שליחת דוא"ל מתוך Azure באמצעות Microsoft Graph API

אתה מוכן כעת להשתמש ב-Microsoft Graph API עם Azure כדי ל

# ספק את כתובת האימייל של השולח והמקבל
$fromAddress = 'SENDER ADDRESS HERE'
$toAddress = 'RECIPIENT ADDRESS HERE'

# ציין את נושא האימייל ואת ההודעה
$mailSubject = 'This is a test message from Azure via Microsoft Graph API'
$mailMessage = 'This is a test message from Azure via Microsoft Graph API'

# אל תשנה דבר מתחת לשורה זו
# בנה את בקשת ה- Microsoft Graph API
$params = @{
  "URI"         = "https://graph.microsoft.com/v1.0/users/$fromAddress/sendMail"
  "Headers"     = @{
    "Authorization" = ("Bearer {0}" -F $token)
  }
  "Method"      = "POST"
  "ContentType" = 'application/json'
  "Body" = (@{
    "message" = @{
      "subject" = $mailSubject
      "body"    = @{
        "contentType" = 'Text'
        "content"     = $mailMessage
      }
      "toRecipients" = @(
        @{
          "emailAddress" = @{
            "address" = $toAddress
          }
        }
      )
    }
  }) | ConvertTo-JSON -Depth 10
}

# שלח את ההודעה
Invoke-RestMethod @params -Verbose


Source:
https://adamtheautomator.com/azure-send-email/