SMTP सर्वर के माध्यम से ईमेल संदेश भेजने के लिए, आप PowerShell कमांडलेट Send-MailMessage का उपयोग कर सकते हैं। आप इस बिल्ट-इन कमांडलेट का उपयोग PowerShell वर्जन 2.0 और नए में ईमेल भेजने के लिए कर सकते हैं (पहले आप ईमेल भेजने के लिए .Net System.Net.Mail क्लास का उपयोग कर सकते थे)। इस लेख में हम दिखाएंगे कि PowerShell स्क्रिप्ट से ईमेल भेजने के लिए Send-MailMessage का उपयोग कैसे करें।
कमांडलेट का सिंटैक्स प्राप्त करने के लिए, यह कमांड चलाएं:
get-help Send-MailMessage
Send-MailMessage [-To][-Subject] [[-Body] ] [[-SmtpServer] ] [-Attachments ] [-Bcc ] [-BodyAsHtml] [-Cc ] [-Credential ] [-DeliveryNotificationOption {None | OnSuccess | OnFailure | Delay | Never}] [-Encoding ] -From [-Port ] [-Priority {Normal | Low | High}] [-UseSsl] [ ] The Send-MailMessage cmdlet sends an email message from within Windows PowerShell.
यहां मुख्य ऑप्शन हैं:
- From सेंडर एड्रेस है (यदि SMTP सर्वर सेंडर के एड्रेस की जांच नहीं करता और अनाम रूप से ईमेल भेजने की अनुमति देता है, तो आपको असली SMTP एड्रेस प्रदान करने की आवश्यकता नहीं है। आप किसी भी ईमेल एड्रेस की ओर से ईमेल संदेश भेज सकते हैं);
- To — प्राप्तकर्ता ईमेल एड्रेस;
- SMTPServer — SMTP सर्वर का एड्रेस जिसके माध्यम से आप ईमेल भेजना चाहते हैं।
यदि आप $PSEmailServer एनवायरनमेंट वेरिएबल में मेल सर्वर एड्रेस सेट करते हैं, तो आपको Send-MailMessage कमांडलेट में SMTP सर्वर एड्रेस स्पेसिफाई करने की आवश्यकता नहीं है।
निम्न सरल PowerShell कमांड निर्दिष्ट विषय और बॉडी के साथ कई प्राप्तकर्ताओं को ईमेल भेजेगी।
Send-MailMessage -From 'ps-script@woshub.com' -To 'serveradmin@woshub.com','helpdesk@woshub.com' -Subject "Test Email Alert" -Body "This is email body text" –SmtpServer 'smtp.woshub.com'
कमांडलेट के गुणों को एडिट करना आसान बनाने के लिए, ईमेल भेजने की कमांड को इस प्रकार दर्शाया जा सकता है:
Send-MailMessage `
-SmtpServer smtp.woshub.com `
-To 'serveradmin@woshub.com','helpdesk@woshub.com' `
-From 'ps-script@woshub.com' `
-Subject "Test" `
-Body "Sending email using PowerShell" `
-Encoding 'UTF8'
ध्यान दें कि पिछली कमांड में हमने ईमेल के लिए UTF8 एन्कोडिंग अतिरिक्त रूप से सेट की है। अन्यथा, यदि ईमेल विषय या बॉडी में नॉन-ANSI कैरेक्टर हैं, तो वे गलत तरीके से प्रदर्शित होंगे।
डिफ़ॉल्ट रूप से, Windows PowerShell में ANSI और ASCII एन्कोडिंग उपयोग की जाती हैं। यदि आपने अपने PS वर्जन को PowerShell Core में अपडेट किया है, तो ध्यान रखें कि यह वर्जन डिफ़ॉल्ट रूप से UTF-8 एन्कोडिंग का उपयोग करता है।
डिफ़ॉल्ट रूप से, Send-MailMessage कमांडलेट मानक SMTP पोर्ट TCP 25 के माध्यम से ईमेल भेजने का प्रयास करता है। यदि आपका SMTP सर्वर केवल एन्क्रिप्टेड प्रोटोकॉल का उपयोग करके ईमेल भेजने की अनुमति देता है, तो आप पोर्ट नंबर (आमतौर पर 465 या 587) और UseSsl ऑप्शन स्पेसिफाई कर सकते हैं:
-SmtpServer 'smtp.woshub.com' -Port 465 –UseSsl
नीचे दी गई तालिका लोकप्रिय सार्वजनिक ईमेल प्रोवाइडर के SMTP सर्वर पैरामीटर दिखाती है जिनका उपयोग आप PowerShell से संदेश भेजने के लिए कर सकते हैं (ध्यान दें कि आपको अकाउंट इंटरफेस में SMTP के माध्यम से ईमेल भेजने की अनुमति देनी होगी):
| Name | SMTP Server Address | Port | Encryption Type |
| Gmail | smtp.gmail.com | 587, 25, 465 | TLS, TLS, SSL |
| Office 365 | smtp.office365.com | 587 | TLS |
| Outlook.com | smtp-mail.outlook.com | 587 | TLS |
| Yahoo | smtp.mail.yahoo.com | 587 | TLS |
| iCloud mail | smtp.mail.me.com | 587 | TLS |
| AOL | smtp.aol.com | 465 | SSL |
यदि SMTP सर्वर अनाम रूप से ईमेल भेजने पर रोक लगाता है (रिले अस्वीकृत), तो आपको यह एरर दिखाई देगा:
5.7.1 Client was not authenticated.
तब आप –Credential ऑप्शन का उपयोग करके SMTP सर्वर पर ऑथेंटिकेट कर सकते हैं।
आप ऑथेंटिकेट करने के लिए यूजर क्रेडेंशियल इंटरैक्टिवली अनुरोध कर सकते हैं:
Send-MailMessage …… -Credential (Get-Credential)
आप वेरिएबल में ऑथेंटिकेशन के लिए उपयोग किए जाने वाले अकाउंट को भी स्पेसिफाई कर सकते हैं:
$cred = Get-Credential
Send-MailMessage ... -Credential $cred
यदि आप PowerShell स्क्रिप्ट में सीधे SMTP सर्वर से कनेक्ट करने के लिए पासवर्ड सेव करना चाहते हैं, तो इस सिंटैक्स का उपयोग करें:
$mypasswd = ConvertTo-SecureString "smP@ssdw0rrd2" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ("user1@woshub.com", $mypasswd)
Send-MailMessage ... –Credential $mycreds
PowerShell स्क्रिप्ट में सेव्ड क्रेडेंशियल को सुरक्षित रूप से उपयोग करने पर लेख देखें।
यदि आप अपने ईमेल में अटैचमेंट जोड़ना चाहते हैं, तो –Attachments ऑप्शन का उपयोग करें। नीचे दिए गए उदाहरण में, हम HTML फॉर्मेट में ईमेल भेजेंगे और लोकल डिस्क से file1.txt और install.log अटैच करेंगे। हम Gmail SMTP सर्वर का उपयोग करेंगे (पहले आपको Gmail में ऐप पासवर्ड बनाना होगा और SMTP ऑथेंटिकेशन के लिए अपने Gmail पासवर्ड के बजाय इसका उपयोग करना होगा):
$MailMessage = @{
To = "admin@woshub.com"
Bcc = "manager@woshub.com", "manager2@woshub.com"
From = "smtpsender1@gmail.com"
Subject = "DC Server Report"
Body = "Welcome!
Generated: $(Get-Date -Format g)
"
Smtpserver = "smtp.gmail.com"
Port = 587
UseSsl = $true
BodyAsHtml = $true
Encoding = "UTF8"
Attachment = "C:\Logs\file1.txt", "C:\Logs\install.log"
}
Send-MailMessage @MailMessage -Credential $cred
यहां बताया गया है कि Gmail इंटरफेस में अटैचमेंट के साथ HTML फॉर्मेट में ईमेल कैसा दिखता है।
आप -DeliveryNotificationOption का उपयोग करके ईमेल के लिए डिलीवरी नोटिफिकेशन (रीड रिसिप्ट) कॉन्फिगर कर सकते हैं। डिलीवरी नोटिफिकेशन आपको सूचित करने की अनुमति देता है यदि प्राप्तकर्ता को ईमेल प्राप्त होता है।
उपलब्ध नोटिफिकेशन प्रकार हैं:
- OnSuccess (सफल डिलीवरी पर सूचित करें)
- OnFailure (असफल डिलीवरी पर सूचित करें)
- Delay (डिलीवरी में देरी होने पर सूचित करें)