একটি SMTP সার্ভারের মাধ্যমে ইমেল বার্তা পাঠাতে, আপনি Send-MailMessage ব্যবহার করতে পারেন PowerShell cmdlet. আপনি PowerShell সংস্করণ 2.0 এবং নতুন সংস্করণে ইমেল পাঠাতে এই অন্তর্নির্মিত cmdlet ব্যবহার করতে পারেন (আগে আপনি .Net System.Net.Mail
ব্যবহার করতে পারেন ইমেল পাঠানোর ক্লাস)। এই নিবন্ধে আমরা দেখাব কিভাবে Send-MailMessage
ব্যবহার করতে হয় পাওয়ারশেল স্ক্রিপ্ট থেকে ইমেল পাঠাতে।
cmdlet এর সিনট্যাক্স পেতে, এই কমান্ডটি চালান:
get-help Send-MailMessage
Send-MailMessage [-To] <String[]> [-Subject] <String> [[-Body] <String>] [[-SmtpServer] <String>] [-Attachments <String[]>] [-Bcc <String[]>] [-BodyAsHtml] [-Cc <String[]>] [-Credential <PSCredential>] [-DeliveryNotificationOption {None | OnSuccess | OnFailure | Delay | Never}] [-Encoding <Encoding>] -From <String> [-Port <Int32>] [-Priority {Normal | Low | High}] [-UseSsl] [<CommonParameters>] The Send-MailMessage cmdlet sends an email message from within Windows PowerShell.
এখানে প্রধান বিকল্প আছে:
- থেকে এটি একটি প্রেরকের ঠিকানা (যদি SMTP সার্ভার প্রেরকের ঠিকানা চেক না করে এবং বেনামে ইমেল পাঠানোর অনুমতি দেয়, তাহলে আপনাকে সত্যিকারের smtp ঠিকানা প্রদান করতে হবে না। আপনি যেকোনো ইমেল ঠিকানার পক্ষ থেকে ইমেল বার্তা পাঠাতে পারেন);
- প্রতি – প্রাপকের ইমেল ঠিকানা;
- SMTPS সার্ভার – SMTP সার্ভারের ঠিকানা যার মাধ্যমে আপনি ইমেল পাঠাতে চান।
$PSEmailServer
-এ মেল সার্ভারের ঠিকানা সেট করেন পরিবেশ পরিবর্তনশীল, আপনাকে Send-MailMessage cmdlet-এ SMTP সার্ভার ঠিকানা নির্দিষ্ট করতে হবে না। নিম্নলিখিত সাধারণ PowerShell কমান্ডটি একাধিক প্রাপককে নির্দিষ্ট বিষয় এবং বডি সহ একটি ইমেল পাঠাবে।
Send-MailMessage -From '[email protected]' -To '[email protected]','[email protected]' -Subject "Test Email Alert" -Body "This is email body text" –SmtpServer 'smtp.woshub.com'
একটি cmdlet এর বৈশিষ্ট্যগুলি সম্পাদনা করা সহজ করার জন্য, ইমেল পাঠান কমান্ডটি নিম্নরূপ উপস্থাপন করা যেতে পারে:
Send-MailMessage `
-SmtpServer smtp.woshub.com `
-To '[email protected]','[email protected]' `
-From '[email protected]' `
-Subject "Test" `
-Body "Sending email using PowerShell" `
-Encoding 'UTF8'
মনে রাখবেন যে শেষ কমান্ডে আমরা ইমেলের জন্য অতিরিক্তভাবে UTF8 এনকোডিং সেট করেছি। অন্যথায়, যদি ইমেলের বিষয় বা বডিতে ANSI অক্ষর থাকে, তাহলে সেগুলি ভুলভাবে প্রদর্শিত হবে৷
ডিফল্টরূপে, ANSI এবং ASCII এনকোডিংগুলি Windows PowerShell-এ ব্যবহৃত হয়। আপনি যদি আপনার PS সংস্করণটিকে PowerShell কোরে আপডেট করে থাকেন, তাহলে মনে রাখবেন যে এই সংস্করণটি ইতিমধ্যেই ডিফল্টরূপে UTF-8 এনকোডিং ব্যবহার করে।ডিফল্টরূপে, Send-MailMessage cmdlet স্ট্যান্ডার্ড SMTP পোর্ট TCP 25 এর মাধ্যমে একটি ইমেল পাঠানোর চেষ্টা করে। যদি আপনার SMTP সার্ভার শুধুমাত্র একটি এনক্রিপ্ট করা প্রোটোকল ব্যবহার করে ইমেল পাঠাতে দেয়, তাহলে আপনি পোর্ট নম্বর নির্দিষ্ট করতে পারেন (প্রায়শই এটি 465 বা 587 হয় ) এবং UseSsl বিকল্প:
-SmtpServer 'smtp.woshub.com' -Port 465 –UseSsl
নাম | SMTP সার্ভারের ঠিকানা | পোর্ট | এনক্রিপশনের ধরন |
Gmail | smtp.gmail.com | 587 ২৫ 465 | TLS TLS SSL |
অফিস 365 | smtp.office365.com | 587 | TLS |
Outlook.com | smtp-mail.outlook.com | 587 | TLS |
ইয়াহু | smtp.mail.yahoo.com | 587 | TLS |
iCloud মেল | 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 ("[email protected]", $mypasswd)
Send-MailMessage ... –Credential $mycreds
আপনি যদি আপনার ইমেলে একটি সংযুক্তি যোগ করতে চান, তাহলে –Attachments
ব্যবহার করুন বিকল্প নীচের উদাহরণে, আমরা HTML ফর্ম্যাটে একটি ইমেল পাঠাব এবং স্থানীয় ডিস্ক থেকে file1.txt এবং install.log সংযুক্ত করব। আমরা Gmail SMTP সার্ভার ব্যবহার করব (প্রথমে আপনাকে Gmail এ একটি অ্যাপ পাসওয়ার্ড তৈরি করতে হবে এবং আপনার Gmail পাসওয়ার্ডের পরিবর্তে smtp প্রমাণীকরণের জন্য এটি ব্যবহার করতে হবে):
$MailMessage = @{
To = "[email protected]"
Bcc = "[email protected]", "[email protected]"
From = "[email protected]"
Subject = "DC Server Report"
Body = "<h1>Welcome!</h1> <p><strong>Generated:</strong> $(Get-Date -Format g)</p>”
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
এখানে সংযুক্তি সহ HTML বিন্যাসে ইমেলটি Gmail ইন্টারফেসে কেমন দেখায়।
আপনি -DeliveryNotificationOption
ব্যবহার করে একটি ইমেলের জন্য একটি ডেলিভারি বিজ্ঞপ্তি (রসিদ পড়ুন) কনফিগার করতে পারেন . একটি ডেলিভারি বিজ্ঞপ্তি আপনাকে অবহিত করার অনুমতি দেয় যদি প্রাপক একটি ইমেল পায়।
উপলব্ধ বিজ্ঞপ্তি প্রকারগুলি হল:
- অন সাকসেস (ডেলিভারি সফল হলে অবহিত করুন)
- অব্যর্থতা (ডেলিভারি ব্যর্থ হলে অবহিত করুন)
- বিলম্ব (ডেলিভারিতে দেরি হলে অবহিত করুন)