Microsoft Office Excel ile nasıl toplu mail gönderilir?
Geçenlerde bir iş için excel listesindeki şahıslara otomatik olarak mail gönderilmesi gerekiyordu. Malum doğum günleri ve evlilik yıldönümleri gibi özel günlerde kişileri mail olarak da hatırlamak güzel bir jest oluyor.
Bunun için oturup değişik bir makro yazdım. Program excel sayfasında yer alan kişilerin doğum tarihleri ile evlilik tarihlerinin gün ve ay bilgilerine bakarak o anki gün ve ay bilgilerini karşılaştırıp eğer kişinin doğum günü ise doğum günü mesajı, evlilik yıldönümü ise evlilik kutlama mesajını otomatik olarak kişinin mailine gönderiyor.
Programda CDO mail eklentisi kullanılmıştır. Bilmeyenler için söyleyeyim excel de makro (VBA) alanına ALT+f11 tuşlarına basarak geçilir.
Excel hücre yapısında A sütunu kişi ADI, B sütunu Soyadı, C sütunu Doğum Tarihi, D sütunu Evlilik Tarihi, E sütunu ise e-mail adresidir.
Şimdi kodlara bakarsak;
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Private Sub Mail_Yolla(adres, dogum, evlilik, adsoyad)
If evlilik = 1 Then
dosya = “c:\mesajlar\evlilik.txt” ‘evlilik mesaj dosyası
baslik = “Mutlu Yıllar” ‘Evlilik mail başlığı
End If
If dogum = 1 Then
dosya = “c:\mesajlar\dogum.txt” ‘Doğum günü mesaj dosyası
baslik = “Uzun ve mutlu bir ömür dileklerimle” ‘Doğum günü mail başlığı
End If
mesajimiz = dosyaoku(dosya)
mesajimiz = Replace(mesajimiz, “<adsoyad>”, adsoyad) ‘<adsoyad> alanı ile kişi adı değiştiriliyor
On Error Resume Next
Dim tanimla, ayarla As Object, referans
Set tanimla = CreateObject(“CDO.Message”)
Set ayarla = CreateObject(“CDO.Configuration”)
ayarla.Load -1
Set referans = ayarla.Fields
With referans
.Item(“http://schemas.microsoft.com/cdo/configuration/smtpusessl“) = False
.Item(“http://schemas.microsoft.com/cdo/configuration/smtpauthenticate“) = 1
.Item(“http://schemas.microsoft.com/cdo/configuration/sendusername“) = “burak@sekercioglu.eu” ‘Gönderici mail adresi
.Item(“http://schemas.microsoft.com/cdo/configuration/sendpassword“) = “<mail adres şifresi>” Mail adresinizin şifresi.Item(“http://schemas.microsoft.com/cdo/configuration/smtpserver“) = “mail.sekercioglu.eu” ‘Giden Posta Sunucunuz
.Item(“http://schemas.microsoft.com/cdo/configuration/sendusing“) = 2
.Item(“http://schemas.microsoft.com/cdo/configuration/smtpserverport“) = 25
.Update
End With
With tanimla
Set .Configuration = ayarla
.To = adres
.CC = “”
.BCC = “”
.From = “””burak”” <burak@sekercioglu.eu>” ‘Kimden mail gidecekse
.Subject = baslik
.TextBody = mesajimiz
.Send
End With
If Err.Number = -2147220973 Then
MsgBox “Lütfen Firewall ayarlarınızı kontrol ediniz”, vbExclamation, “Mail Gönderilemedi”
Exit Sub
End If
MsgBox ” E-postanız gönderildi”, vbInformation, “www.sekercioglu.eu”
End SubFunction dosyaoku(dosya)
‘Hazır mesaj şablonlarını okuyan fonksiyon
‘text dosya içinde <adsoyad> olarak tanımlanan alana program otomatik olarak kişi adsoyad bilgisini yazar
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set ts = fso.OpenTextFile(dosya, ForReading)
While Not ts.AtEndOfStream
dosyaoku = dosyaoku & ts.ReadLine & vbCrLf
Wendts.Close
End FunctionSub kontrol()
sayfa = “sayfa1”
q = q + 1
satir = Worksheets(sayfa).Cells(q, 1).ValueDo While satir <> “”
q = q + 1
satir = Worksheets(sayfa).Cells(q, 1).Value
ad = Worksheets(sayfa).Cells(q, 1).Value
soyad = Worksheets(sayfa).Cells(q, 2).Value
dogum = Worksheets(sayfa).Cells(q, 3).Value
evlilik = Worksheets(sayfa).Cells(q, 4).Value
adres = Worksheets(sayfa).Cells(q, 5).Value
dogumay = Month(dogum)
dogumgun = Day(dogum)evlilikay = Month(evlilik)
evlilikgun = Day(evlilik)
adsoyad = ad & ” ” & soyadbugun = Day(Now)
buay = Month(Now)If bugun = dogumgun And buay = dogumay Then
dogum = 1
evlilik = 0
Mail_Yolla adres, dogum, evlilik, adsoyad
End IfIf bugun = evlilikgun And buay = evlilikay Then
dogum = 0
evlilik = 1
Mail_Yolla adres, dogum, evlilik, adsoyad
End If
Loop
End Sub
ayrıca c:\mesajlar klasörü içersinde 2 adet text dosya hazırlamanız gerekiyor. Bunlardan bir tanesinin ismi dogum.txt diğeri de evlilik.txt olmalıdır (program içersinde verilen dosya yoluna dikkat ediniz!
bu dosyaların içeriği ise aşağıdaki gibi olabilir
dogum.txt Dosyası Örneği;
Nice Mutlu senelere sevgili <adsoyad>
Umarım tüm dileklerin gerçekleşir ve sevdiklerinle birlikte mutlu ve huzurlu bir yıl geçirirsin.
Burak ŞEKERCİOĞLU
0312 123 45 67
göreceğiniz gibi yazı içersinde <adsoyad> olarak bir alan tanımladık. Programımız bu alanı algılayıp onun yerine A ve B sütunlarından alınan ADSOYAD verisini yerleştirecektir.
Program bu kadar.. Kaç kişiye kadar mail gönderebiliriz diye soracak olursanız. Program A sütununda boş satır görene kadar tüm satırları işleyecektir, herhangi bir sınırlama yoktur.
Ekleme: Eğer bu programcığı EXCHANGE SERVER kullanarak gönderim yapacaksanız o zaman kod içersinde yer alan
.Item(“http://schemas.microsoft.com/cdo/configuration/smtpusessl“) = False
.Item(“http://schemas.microsoft.com/cdo/configuration/smtpauthenticate“) = 1
satırlarını iptal ederek smtp server adresi yerine de EXCHANGE SERVER sunucu netbios isminizi yazmanız gerekmektedir.