Excel listesiyle, zaman ayarlı toplu mail gönder

Excel listesi üzerinde kayıtlı olan mail adreslerine, konu ve içerik bilgisiyle, zamanı geldiğinde bilgisayarımızın otomatik olarak mail göndermesini istiyoruz. Öncelikle; Excel listemizde üç zorunlu alanı dolduruyoruz. 
(E-posta adresi, Konu, Açıklama) sonra Excel dosyasını farklı kaydet, makro içeren "xlsm" uzantılı olarak kaydediyoruz. Çalışma dosyasının sheet (sayfa1) adını "mail" olarak düzenleyin. (Kod bu isme göre) Mail sekmesi üzerinde mouse ile sağ klik "Kod Görüntüle" seçeneğine tıklayın.

Aşağıdaki kodu kopyalayın.
Sub Mail()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim successCount As Long

    ' Hangi sayfada çalışacağını belirtin (Varsayılan olarak Aktif Sayfa)
    Set ws = ThisWorkbook.Sheets("Mail") ' Sayfa adını buraya yazın

    ' Son kullanılan satırı bulun
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    ' Outlook uygulamasını oluşturun
    Set OutApp = CreateObject("Outlook.Application")

    ' Başlangıçta başarılı gönderilen e-posta sayısını sıfırla
    successCount = 0

    ' Her bir satır için e-posta gönder
    For i = 2 To lastRow
        ' Yeni e-posta öğesi oluşturun
        Set OutMail = OutApp.CreateItem(0)

        With OutMail
            ' Alıcı adresini A sütunundan alın
            .To = ws.Cells(i, 1).Value
            ' Konuyu B sütunundan alın
            .Subject = ws.Cells(i, 2).Value
            ' İçeriği C sütunundan alın
            .Body = ws.Cells(i, 3).Value

            ' E-posta gönderme işlemi başarılıysa sayacı artır
            On Error Resume Next
            .Send
            If Err.Number = 0 Then successCount = successCount + 1
            On Error GoTo 0
        End With
    Next i

    ' Tüm e-postalar gönderildikten sonra tek bir mesaj kutusu göster
    MsgBox successCount & " e-posta gönderildi.", vbInformation, Application.UserName

End Sub

Kopyalan kodu, Açılan "Kod Görüntüle" penceresinin sol tarafına Sayfa1(Mail) satırına çift tıklayın, sağ tarafta yer alan boş çerçeveye "Ctrl+V" ile yapıştırın. (Aşağıdaki kod, Mail sayfasında kayıtlı mail adreslerinin gönderilmesi sağlar.)

"Kod Görüntüle" penceresinin sol tarafındaki "Bu çalışma kitabı" çift tıklayın ve aşağıdaki kodu sayfanın sağ tarafına yapıştırın. (Aşağıdaki kod, Mail sayfasında yer alan kodun açılışta çalışmasını sağlar) kaydet ikonuna basarak tüm pencere ve dosyayı kapatın.
Private Sub Workbook_Open()
Sayfa1.Mail
End Sub

Excel makro dosyamızın tam adını öğrenip kopyalayalım. (sağ klik, özellikler, Güvenlik sekmesinden kopyala)

Görev zamanlıyıcı (Task Scheduler) çalıştıralım Win+R tuşlarına bastıktan sonra "taskschd.msc" yazın, Tamam.

Görev zamanlıyıcı açıldıktan sonra, Eylem sekmesinden, "Temel Görev Oluştur" seçeneğine tıklayın.

Görev adı yazılır. (Mail) "Sonraki" butonuna basın.

Görevin ne zaman başlayacağı (periyodu) seçilir, "Sonraki" butonuna basın.

(Tarih-Saat) seçilir, "Sonraki" butonuna basın.

Programı başlat tıklanır, "Sonraki" butonuna basın.

Excel makro dosyasının yolu yapıştırın/yazın, "Sonraki" butonuna basın.

"Son" butonuna basarak işlemi tamamlayın.

Görev oluştu, uygulamayı kapatın. Zamanı gelince belirtilen dosya, bu görevle çalışacaktır.

Zaman geldiğinde, Görev zamanlayıcı Excel makro dosyasını açar. Açılırken kodu çalıştır iç koduyla mail gönderimi başlar. Mail gönderimi bitince, Mesaj penceresi belirir. "Tamam" butonuna basarak mesajı ardından da dosyayı kapatın.

Outlook uygulamamızı açtığımızda, belirtilen saatte maillerinde ulaştığını görebilmekteyiz.


Zaman ayarlı, mail gönder. Ek dosya ile...
İhtiyaçlar doğrultusunda, Excel listesine göre mail gönderme çalışması güncellendi. Aşağıdaki çalışma sayfasında, dosya eklenmesi için, Excel "D Sütun" D2 den itibaren, dosya yolunu yazabilir/kopyalayıp yapıştırabilirsiniz. 

Dosya yolu yazılmış ise, ilgili klasörden dosyayı ek yaparak, "E-posta adresi" "A Sütun" A2 den itibaren yazılı olan mail adreslerine mail gönderimi yapmaktadır.

Ek herhangi bir dosya yok ise, "ilgili satıra dosya yolu eklenmemişse" üst kısımdaki çalışma gibi, "Konu, Açıklama" bilgilerini doldurarak mevcut tanımlı posta adresiniz kanalıyla mail gönderir.

Çalışma sayfası "Mail-EkDosya.xlsm" formatında kayıt hali, aşağıdaki gibidir. Sekme Adı "Mail" yapıldıktan sonra, Sağ klik "Kod görüntüle" tıklayın.

"Sayfa1 (Mail)" seçeneğine tıklayın; Sağ taraftaki pencereye, aşağıdaki kodu yapıştırın.

Kod:
Sub Mail()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim successCount As Long
    Dim filePath As String

    ' Hangi sayfada çalışacağını belirtin (Varsayılan olarak Aktif Sayfa)
    Set ws = ThisWorkbook.Sheets("Mail") ' Sayfa adını buraya yazın

    ' Son kullanılan satırı bulun
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    ' Outlook uygulamasını oluşturun
    Set OutApp = CreateObject("Outlook.Application")

    ' Başlangıçta başarılı gönderilen e-posta sayısını sıfırla
    successCount = 0

    ' Her bir satır için e-posta gönder
    For i = 2 To lastRow
        ' Yeni e-posta öğesi oluşturun
        Set OutMail = OutApp.CreateItem(0)

        With OutMail
            ' Alıcı adresini A sütunundan alın
            .To = ws.Cells(i, 1).Value
            ' Konuyu B sütunundan alın
            .Subject = ws.Cells(i, 2).Value
            ' İçeriği C sütunundan alın
            .Body = ws.Cells(i, 3).Value

            ' Ek dosya yolunu D sütunundan alın
            filePath = ws.Cells(i, 4).Value
            If filePath <> "" Then
                .Attachments.Add filePath
            End If

            ' E-posta gönderme işlemi başarılıysa sayacı artır
            On Error Resume Next
            .Send
            If Err.Number = 0 Then successCount = successCount + 1
            On Error GoTo 0
        End With
    Next i

    ' Tüm e-postalar gönderildikten sonra tek bir mesaj kutusu göster
    MsgBox successCount & " e-posta gönderildi.", vbInformation, Application.UserName

    ' Outlook uygulamasını serbest bırakın
    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub

"BuÇalışmaKitabı" seçeneğine tıklayın; Sağ taraftaki pencereye, aşağıdaki kodu yapıştırın. Kaydet ikonuna basın, ardından çarpıya basarak sayfayı kapatın. Excel dosyasını da veri girişlerinizi tamamladıktan sonra kaydederek kapatın.


Kod:
Private Sub Workbook_Open()
Sayfa1.Mail
End Sub

Excel dosyası açıldığında veya yukarıda anlatılan "Görev zamanlayıcı (Task Scheduler) çalıştırılarak zaman kurulmasıyla, "Mail-EkDosya.xlsm" dosyasını kaydettiğiniz yolun içinde gösterilmesiyle, zamanı geldiğinde dosya açılacak, dosya açılınca otomatik olarak mail gönderimi gerçekleşecektir.

Mail geldiği anda "Ek dosya yolu belirtilenler", görünümler aşağıdaki gibidir.

Mail geldiği anda "Ek dosya yolu belirtilmeyen, Hücrenin boş olması, Ek olmadan mail gönderir.

Kod girilmiş halde hazır durumdaki dosya GoogleDrive adresine kaydedilerek paylaşıma açılmıştır. Dosyayı indirdikten sonra, RAR dosyasından Winrar ile çıkarıp, kaydedin. "E-posta adresi, Konu, Açıklama ve Dosya yolu" değiştirerek kullanabilirsiniz. İndirmek için Tıklayın.