SMTP সার্ভারের মাধ্যমে ইমেইল মেসেজ পাঠাতে আপনি Send-MailMessage পাওয়ারশেল কমান্ডলেট ব্যবহার করতে পারেন। এই বিল্ট-ইন কমান্ডলেটটি পাওয়ারশেল ভার্সন ২.০ এবং নতুনতর ভার্সনে ইমেইল পাঠাতে ব্যবহার করা যায় (এখানোর আগে .Net System.Net.Mail ক্লাস ব্যবহার করা হতো)। এই আর্টিকেলে আমরা দেখবো কিভাবে 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 সার্ভার অ্যাড্রেস স্পেসিফাই করতে হবে না।
নিচের সাধারণ পাওয়ারশেল কমান্ড নির্দিষ্ট সাবজেক্ট ও বডি সহ একাধিক প্রাপকে ইমেইল পাঠাবে:
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 এনকোডিং সেট করেছি। অন্যথায়, যদি ইমেইল সাবজেক্ট বা বডি-এ non-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 সার্ভার প্যারামিটার দেখানো হলো, যেগুলো আপনি পাওয়ারশেল থেকে মেসেজ পাঠাতে ব্যবহার করতে পারেন (মনে রাখবেন, একাউন্ট ইন্টারফেসে SMTP-এর মাধ্যমে ইমেইল পাঠানোর অনুমতি দিতে হবে):
| নাম | SMTP সার্ভার অ্যাড্রেস | পোর্ট | এনক্রিপশন টাইপ |
|---|---|---|---|
| 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
যদি আপনি পাওয়ারশেল স্ক্রিপ্টে সরাসরি SMTP সার্ভারে কানেক্ট করার পাসওয়ার্ড সংরক্ষণ করতে চান, তবে এই সিনট্যাক্স ব্যবহার করুন:
$mypasswd = ConvertTo-SecureString "smP@ssdw0rrd2" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ("user1@woshub.com", $mypasswd)
Send-MailMessage ... –Credential $mycreds
পাওয়ারশেল স্ক্রিপ্টে সেভড ক্রেডেনশিয়াল নিরাপদে ব্যবহার করার আর্টিকেল দেখুন।
ইমেইলে অ্যাটাচমেন্ট যোগ করতে –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 (ডেলিভারি দেরি হলে নোটিফাই)