এই আর্টিকেলে আপনাকে দেখানো হবে কিভাবে তারিখের ভিত্তিতে এক্সেল থেকে স্বয়ংক্রিয়ভাবে ইমেইল পাঠানো যায়। সাধারণত Outlook বা Gmail- থেকে ইমেইল পাঠানো সহজ, কিন্তু নির্দিষ্ট সময় বা তারিখে ইমেইল পাঠাতে চাইলে মাইক্রোসফট এক্সেল খুব কার্যকর হতে পারে।
ডাটাসেটে কিছু ইমেইল ঠিকানা আছে (সব ডামি ঠিকানা ছাড়া admin@wsxdn.com, যা আমার। আমি আমার ঠিকানা ব্যবহার করছি যাতে পদ্ধতিগুলো কাজ করে কিনা দেখাতে পারি।)
তারিখ ভিত্তিক স্বয়ংক্রিয় ইমেইল পাঠানোর ৩টি পদ্ধতি
১. এক্সেল VBA ব্যবহার করে নির্দিষ্ট তারিখে স্বয়ংক্রিয় ইমেইল পাঠানো
Microsoft Visual Basic for Application (VBA) ব্যবহার করে তারিখের ভিত্তিতে স্বয়ংক্রিয়ভাবে ইমেইল পাঠানো যায়। আপনি ইমেইল পাঠাতে চাওয়া তারিখগুলোর একটি তালিকা बनाতে পারেন। নিচের প্রক্রিয়া অনুসরণ করুন।
ধাপসমূহ:
- Developer > Visual Basic এ যান।
- VBA উইন্ডো খুলবে। Insert > Module সিলেক্ট করুন।
- VBA মডিউলে নিচের কোড লিখুন:
Sub SendEmail01()
Dim Range_Select As Range
Dim Date_Range As Range
Dim Cell_Address As String
Dim Subject, Email_From, Email_To, Cc, Bcc, Email_Text As String
Dim Email_Obj, Single_Mail As Object
On Error Resume Next
Cell_Address = ActiveWindow.RangeSelection.Address
Set Range_Select = Application.InputBox("Select a range:", "Message Box", Cell_Address, , , , , 8)
If Range_Select Is Nothing Then Exit Sub
For Each Date_Range In Range_Select
If Date_Range.Value = Date Then
Subject = Application.InputBox("Subject: ", "Message", , , , , , 2)
Email_From = Application.InputBox("Send from: ", "Message Box", , , , , , 2)
Email_To = Application.InputBox("Send to: ", "Message Box", , , , , , 2)
If Email_To = "" Then Exit Sub
Cc = Application.InputBox("CC: ", "Message Box", , , , , , 2)
Bcc = Application.InputBox("BCC: ", "Message Box", , , , , , 2)
Email_Text = Application.InputBox("Message Body: ", "Message Box", , , , , , 2)
Set Email_Obj = CreateObject("Outlook.Application")
Set Single_Mail = Email_Obj.CreateItem(0)
With Single_Mail
.Subject = Subject
.To = Email_To
.Cc = Cc
.Bcc = Bcc
.Body = Email_Text
.send
End With
End If
Next
End Sub
কোড ব্যাখ্যা
- প্রথমে لازم ভেরিয়েবল ডিক্লেয়ার করা হয়েছে: Range_Select এবং Date_Range as Range; Cell_Address, Subject, Email_From, Email_To, Cc, Bcc, Email_Text as String; Email_Obj এবং Single_Mail as Object।
- তারপর Range_Select কে একটি InputBox-এ সেট করা হয়েছে যেখানে একটি মেসেজ বক্সের মাধ্যমে সেল রেঞ্জ সিলেক্ট করা যায়।
- পরে VBA IF Statement-এ Value ব্যবহার করা হয়েছে এবং Subject, Email_From এবং Email_To-কে InputBox-এ সেট করা হয়েছে।
- যদি কোনো ইমেইল ঠিকানা না থাকে (Email_To= “”), তবে Sub Procedure এক্সিট করবে। অন্যথায় আরও ভেরিয়েবল নতুন IF Statement-এ রাখা হয়েছে। Cc এবং Bcc ইমেইলের Carbon Copy এবং Blind Carbon Copy বোঝায়।
- তারপর Outlook Application Object তৈরি করা হয়েছে যা Email_Obj-এর মাধ্যমে ডিফাইন করা হয়েছে। এছাড়া Single_Mail ব্যবহার করে Email_Obj-এর জন্য একটি item তৈরি করা হয়েছে।
- শেষে With Statement দিয়ে Subject, Email_To, Cc, Bcc, Email_Text ইমেইলের আবশ্যক অংশ হিসেবে ডিফাইন করা হয়েছে। এখানে .Send কমান্ডও আছে।
- এখন আপনার শীটে ফিরে SendEmail01 নামক Macro রান করুন।
- এক্সিকিউট করার পর একটি Message Box আসবে তারিখের রেঞ্জ সিলেক্ট করতে বলবে। রেঞ্জ সিলেক্ট করে OK করুন।
- তারপর আবার একটি Message Box আসবে। সাবজেক্ট লিখে OK করুন।
- আপনি একটি চেইন Message Box দেখবেন যা ইমেইল পাঠাতে لازم তথ্য চাইবে। ছবিগুলো অনুসরণ করুন।
- আপনার ইমেইল ঠিকানা দিন।
- যেখানে ইমেইল পাঠাবেন সেটির ঠিকানা দিন।
- CC প্রাপকের ঠিকানা দিন।
- BCC প্রাপক দিন (যদি চান)। আমি কিছুই দিনি।
- আপনার মেসেজ টাইপ করুন।
- শেষ Message Box-এর পর Microsoft Outlook-এর একটি ওয়ার্নিং বক্স আসতে পারে। Allow ক্লিক করুন।
এই অপারেশন আপনার দেওয়া ঠিকানাগুলোতে ইমেইল পাঠাবে।
২. পরবর্তী তারিখগুলোর ভিত্তিতে এক্সেল থেকে স্বয়ংক্রিয় ইমেইল পাঠানো
এই সেকশনে আমরা আগামী বা ভবিষ্যৎ তারিখগুলোর ভিত্তিতে ইমেইল পাঠাব। ধরুন আপনি কাউকে ৩ দিন বা ৭ দিন আগে ইমেইল পাঠাতে চান। নিচে এ ব্যাপার আলোচনা করা হলো।
ধাপসমূহ:
- প্রথমে Section 1-এ যান VBA মডিউল খোলার পদ্ধতি জানতে।
- VBA মডিউলে নিচের কোড লিখুন:
Public Sub SendEmail02()
Dim Date_Range As Range
Dim Mail_Recipient As Range
Dim Email_Text As Range
Dim Outlook_App_Create As Object
Dim Mail_Item As Object
Dim Last_Row As Long
Dim VB_CR_LF, Email_Body, Date_Range_Value, Send_Value, Subject As String
Dim i As Long
On Error Resume Next
Set Date_Range = Application.InputBox("Please choose the date range:", "Message Box", , , , , , 8)
If Date_Range Is Nothing Then Exit Sub
Set Mail_Recipient = Application.InputBox("Please select the Email addresses:", "Message Box", , , , , , 8)
If Mail_Recipient Is Nothing Then Exit Sub
Set Email_Text = Application.InputBox("Select the Email Text:", "Message Box", , , , , , 8)
If Email_Text Is Nothing Then Exit Sub
Last_Row = Date_Range.Rows.Count
Set Date_Range = Date_Range(1)
Set Mail_Recipient = Mail_Recipient(1)
Set Email_Text = Email_Text(1)
Set Outlook_App_Create = CreateObject("Outlook.Application")
For i = 1 To Last_Row
Date_Range_Value = ""
Date_Range_Value = Date_Range.Offset(i - 1).Value
If Date_Range_Value <> "" Then
If CDate(Date_Range_Value) - Date <= 7 And CDate(Date_Range_Value) - Date > 0 Then
Send_Value = Mail_Recipient.Offset(i - 1).Value
Subject = Email_Text.Offset(i - 1).Value & " on " & Date_Range_Value
VB_CR_LF = "
"
Email_Body = ""
Email_Body = Email_Body & "Dear " & Send_Value & VB_CR_LF
Email_Body = Email_Body & "Text : " & Email_Text.Offset(i - 1).Value & VB_CR_LF
Email_Body = Email_Body & ""
Set Mail_Item = Outlook_App_Create.CreateItem(0)
With Mail_Item
.Subject = Subject
.To = Send_Value
.HTMLBody = Email_Body
.Display
End With
Set Mail_Item = Nothing
End If
End If
Next
Set Outlook_App_Create = Nothing
End Sub
কোড ব্যাখ্যা
- প্রথমে لازم ভেরিয়েবল ডিক্লেয়ার: Date_Range, Mail_Recipient এবং Email_Text as Range; Outlook_App_Create এবং Mail_Item as Object; Last_Row এবং i as Long; VB_CR_LF (Visual Basic Carriage Return Line Feed), Email_Body, Date_Range_Value, Send_Value, Subject as String।
- Date_Range কে InputBox-এ সেট করা হয়েছে যেখানে মেসেজ বক্সের মাধ্যমে তারিখের রেঞ্জ সিলেক্ট করা যায়। If Statement দিয়ে Sub Procedure টারমিনেট করা হয়েছে যদি Date_Range Nothing হয়।
- Mail_Recipient এবং Email_Text-কেও InputBox-এ সেট করা হয়েছে।
- Outlook Application Object তৈরি করা হয়েছে Outlook_App_Create-এর মাধ্যমে।
- একটি তারিখ ইন্টারভাল אינ্ট্রোডিউস করা হয়েছে। কোডে সময়কাল ৭ দিন। ধরুন আপনি কাউকে আজ থেকে ৭ দিন পর কোনো ইভেন্ট বা শুভেচ্ছা মনে করাতে চান। আজ যদি ১৯ মে হয়, তবে ২০ থেকে ২৬ মে এর মধ্যে থাকা ইমেইলগুলো প্রাপক পাবে। বাহিরের ইমেইল পাবেন না।
- Email_Body ফরম্যাট করার কমান্ড এবং With Statement-এ ইমেইলের আবশ্যক অংশ ডিফাইন করা হয়েছে।
- এখানে .Display কমান্ড ব্যবহার করা হয়েছে যাতে আউটলুক ড্রাফট খুলে দেয় এবং আমরা চেক করতে পারি। আপনি .Send ব্যবহার করতে পারেন যদি ড্রাফট দেখতে না চান। এই দুটো কমান্ড একসাথে ব্যবহার করবেন না।
- শীটে ফিরে SendEmail02 ম্যাক্রো রান করুন।
- এক্সিকিউট করার পর message box আসবে date range সিলেক্ট করতে। সিলেক্ট করে OK করুন।
- তারপর আরেকটি message box আসবে Email address range সিলেক্ট করতে। সিলেক্ট করে OK করুন।
- পরে text messages এর range সিলেক্ট করতে বলবে। সিলেক্ট করে OK করুন।
- আপনি ২১ মে থেকে ২৪ মে পর্যন্ত Email ড্রাফট দেখবেন। এখানে admin@wsxdn.com একটা আসল Email ID, তাই এখানে ইমেইল পাঠিয়েছি উদাহরণ দেখানোর জন্য। আপনি CC প্রাপক দিতে পারেন।
- আপনার Emails চেক করুন। এটি Spam বক্সেও যেতে পারে। সব জায়গা চেক করুন।
৩. একক ঠিকানায় তারিখ ভিত্তিক স্বয়ংক্রিয় ইমেইল পাঠানো
আমরা একক ঠিকানায় তারিখ ভিত্তিক স্বয়ংক্রিয় ইমেইল পাঠাতে পারি। আপনি ইমেইল পাঠাতে চাওয়া তারিখগুলোর তালিকা बनाতে পারেন। এই সেকশনে শুধু তারিখ নিয়ে কাজ করব।
ধাপসমূহ:
- Section 1-এ যান VBA মডিউল খোলার পদ্ধতি জানতে।
- VBA মডিউলে নিচের কোড লিখুন:
Option Explicit
Sub SendEmail03()
Dim Date_Range As Range
Dim rng As Range
Set Date_Range = Range("B5:B10")
For Each rng In Date_Range
If rng.Value = Date Then
Dim Subject, Send_From, Send_To, Cc, Bcc, Body As String
Dim Email_Obj, Single_Mail As Variant
Subject = "Hello there!"
Send_From = "admin@wsxdn.com"
Send_To = "admin@wsxdn.com"
Cc = "admin@wsxdn.com"
Bcc = ""
Body = "Hope you are enjoying the article"
On Error GoTo debugs
Set Email_Obj = CreateObject("Outlook.Application")
Set Single_Mail = Email_Obj.CreateItem(0)
With Single_Mail
.Subject = Subject
.To = Send_To
.Cc = Cc
.Bcc = Bcc
.Body = Body
.send
End With
End If
Next
Exit Sub
debugs:
If Err.Description <> "" Then MsgBox Err.Description
End Sub
কোড ব্যাখ্যা
- প্রথমে لازم ভেরিয়েবল ডিক্লেয়ার: rng এবং Date_Range as Range।
- তারপর Date_Range-এর জন্য রেঞ্জ ডিফাইন করা হয়েছে।
- পরে VBA IF Statement-এ Value ব্যবহার করা হয়েছে এবং Subject, Send_From, Send_To, Cc, Bcc এবং Body কে String-এ সেট করা হয়েছে। এছাড়া Email_Obj এবং Single_Mail কে Variant হিসেবে সেট করা হয়েছে।
- Subject, Send_From, Send_To, Cc এবং Bcc-র টেক্সট ভ্যালু সেট করা হয়েছে।
- পরে Outlook Application Object তৈরি করা হয়েছে Email_Obj-এর মাধ্যমে। Single_Mail ব্যবহার করে Email_Obj-এর জন্য item তৈরি করা হয়েছে।
- With Statement দিয়ে Subject, Send_To, Cc, Bcc, Body ইমেইলের অংশ হিসেবে ডিফাইন করা হয়েছে। এখানে .Send কমান্ডও আছে।
- শীটে ফিরে SendEmail01 ম্যাক্রো রান করুন (নোট: কোডে নাম SendEmail03 কিন্তু টেক্সটে SendEmail01 বলা হয়েছে, সঠিক নাম SendEmail03)।
- তারপর Microsoft Outlook-এর একটি warning box আসতে পারে। Allow ক্লিক করুন।
এই অপারেশন আপনার দেওয়া ঠিকানাগুলোতে ইমেইল পাঠাবে।
প্র্যাকটিস সেকশন
এই সেকশনে আর্টিকেলে ব্যবহৃত ডাটাসেট দেওয়া হলো যাতে আপনি নিজে প্র্যাকটিস করতে পারেন।
স্মরণ রাখার বিষয়গুলো
VBA কোডগুলো রান করার আগে আপনার Outlook একাউন্টে লগইন করা থাকতে হবে।
উপসংহার
সারসংক্ষেপে, আপনি শিখেছেন কিভাবে তারিখের ভিত্তিতে এক্সেল থেকে স্বয়ংক্রিয়ভাবে ইমেইল পাঠানো যায়। আপনার আরও ভালো আইডিয়া বা ফিডব্যাক থাকলে কমেন্ট বক্সে শেয়ার করুন। এটি আমার আগামী আর্টিকেলগুলো সমৃদ্ধ করতে সাহায্য করবে।
সম্পর্কিত আর্টিকেলসমূহ
- [Solved]: Share Workbook Not Showing in Excel (সহজ ধাপাবলি)
- এক্সেল লিস্ট থেকে ইমেইল পাঠানো (২টি ইফেক্টিভ পদ্ধতি)
- ইমেইল দিয়ে এডিটেবল এক্সেল স্প্রেডশীট পাঠানো (৩টি কুইক মেথড)
- এক্সেল থেকে ইমেইল পাঠানোর ম্যাক্রো (৫টি উপযুক্ত উদাহরণ)
- বডি সহ এক্সেল থেকে ইমেইল পাঠানোর ম্যাক্রো (৩টি ইউজফুল কেস)
- এক্সেল ম্যাক্রো: সেলের ঠিকানায় ইমেইল পাঠানো (২টি সহজ পদ্ধতি)