MS Access Veritabanları, VBA ve SQL Kullanımı

Microsoft Access'e dair herşey...

Access Raporunu Form İçerisinden Mail Olarak Göndermek-4

PRATİK BİLGİLER

MS Access Raporunu Form İçerisinden Mail Olarak Göndermek (4.Bölüm)

Merhaba Arkadaşlar,
Form içerisinden mail gönderme konusunu bu makalemizle sonlandırmış olacağız..
access raporları

Bu makalemizde Mail Gönder butonu arkasındaki koddan bahsedeceğimizi geçen makalemizde söylemiştik. Şimdi bu kodu tek tek açıklayalım.
Öncelikle kod içerisinde kullanılan değişkenlerimizi tanımlıyoruz.


Option Compare Database
Option Explicit

    Dim objOutlook As Outlook.Application
    Dim olNs As Outlook.Namespace
    Dim objOutlookMsg As Outlook.MailItem
    Dim objOutlookRecip As Outlook.Recipient
    Dim objOutlookAttach As Outlook.Attachment
    Dim MailKonusu As String
    Dim MailMesaj As String
    Dim MailAdres As String
.......
.......

Konu, Mesaj ve Adreste boşluk kontrolü yapıyoruz, bunlardan herhangi biri boş ise Mesaj kutusu ile uyarıyoruz, değilse kodun çalışması devam ediyor.


Option Compare Database
Option Explicit

………..

If IsNull(Me.txtMailAdresi) Or IsNull Me.txtMailKonusu)_ 
Or IsNull (Me.txtMesaj) Then
Msgbox "Boş alanları tamamlayınız!",vbOkOnly,"Dikkat"
Else
MailAdres = Me.txtMailAdresi
MailKonusu = Me.txtMailKonusu
MailMesaj = Me.txtMesaj

…………

Mail göndermek için gerekli olan değişkenlerimizi tanımladık. Şimdi göndereceğimiz raporlarımızı tanımlıyoruz.


Option Compare Database
Option Explicit

………..
DoCmd.OutputTo acOutputReport, "AccessRaporunİsmi",_ "PDFFormat(*.pdf)", "PDFDosyasınınKonumu", False
DoCmd.OutputTo acOutputReport, "AccessRaporunİsmi",_ "PDFFormat(*.pdf)", "PDFDosyasınınKonumu", False
…………

PDF Dosyasının Konumuna  örnek: "D:\personel" 
Sondaki False seçeneği PDF dosyası  oluşturulduktan sonra dosyanın açılmayacağını ifade eder. True değerini eklerseniz PDF dosyası oluştuktan sonra açılır. Devam edelim...


Option Compare Database
Option Explicit
………..
 'Outlookda işlem yapacağız.
 SetobjOutlook=CreateObject("Outlook.Application")   
 Set olNs = objOutlook.GetNamespace("MAPI")olNs.Logon
…………

Yeri gelmişken Outlook kullanacağımızı MS Access'e bildirmemiz gerekiyor. Bunun için VBA penceresinde Tools -> Referans bölümünden,
Microsoft Outlook XX,0 Object Library referansını seçmemiz gerekiyor. Bunuda tanımladıktan sonra kodumuzu yazmaya devam ediyoruz.


Option Compare Database
Option Explicit
………..
' Mesajı Oluşturalım
Set objOutlookMsg = objOutlook.CreateItem(olMailItem)
With objOutlookMsg

' Mail adresini ekliyoruz.
Set objOutlookRecip = .Recipients.Add("Alıcının Mail Adresi Yazılacak")
objOutlookRecip.Type = olTo

'Alıcının adresini formdan aldırmak istiyoruz o halde;

Set objOutlookRecip = .Recipients.Add("Alıcının Mail Adresi Yazılacak")
'Yerine,
Set objOutlookRecip = .Recipients.Add(Me.txtMailAdresi)

' Diğer Alanların Doldurulması
.Subject = "İrsaliye ve Hata Listesi Raporları"
'Yerine,
.Subject = Me.txtMailKonusu
.Body = "Personel ve Ücretler raporu ektedir.." & vbCrLf & vbCrLf

'Yerine,
.Body = Me.txtMesaj & vbCrLf & vbCrLf
.Importance = olImportanceHigh

'Şimdi de sıra raporlarımızı mailimize eklemeye geldi.
' Gönderilecek ekleri tanımlıyoruz.
.Attachments.Add ("D:\personel.pdf")
.Attachments.Add ("D:\ucret.pdf")

' Alıcı adını çözümlüyoruz, bir yanlışlık var mı yok mu kontrol ediyoruz.
For Each objOutlookRecip In .Recipients
objOutlookRecip.Resolve
Next

' Mesajı göndermeden önce görünsün mü? Onu ayarlıyoruz.
If DisplayMsg Then
.Display
Else
.Save
.Send
End If
End With

olNs.Logoff
Set objOutlook = Nothing
…………

Evet arkadaşlar, butonumuzun arkasında çalışacak kodu tamamlamış bulunuyoruz. Şimdi düzenlenmiş kodu vereyim; Butonumuzun ismi cmdMailGonder olsun. Click olayına,


Option Compare Database
Option Explicit

Private Sub cmdMailGonder_Click()

' Değişkenlerimizi tanımlıyoruz.
Dim objOutlook As Outlook.Application
Dim olNs As Outlook.Namespace
Dim objOutlookMsg As Outlook.MailItem
Dim objOutlookRecip As Outlook.Recipient
Dim objOutlookAttach As Outlook.Attachment
Dim MailKonusu As String
Dim MailMesaj As String
Dim MailAdres As String

' Boşluk Kontrolü
If IsNull(Me.txtMailAdresi) Or IsNull(Me.txtMailKonusu) Or IsNull(Me.txtMesaj) Then
MsgBox "Boş alanları tamamlayınız!", vbOKOnly, "Dikkat"
MailAdres = Me.txtMailAdresi
MailKonusu = Me.txtMailKonusu
MailMesaj = Me.txtMesaj
DoCmd.OutputTo acOutputReport, "personel", "PDFFormat(*.pdf)", "D:\personel.pdf", False
DoCmd.OutputTo acOutputReport, "ucretler", "PDFFormat(*.pdf)", "D:\ucretler.pdf", False

' Outlookda işlem yapacağız.
Set objOutlook = CreateObject("Outlook.Application")
Set olNs = objOutlook.GetNamespace("MAPI")
olNs.Logon

' Mesajı Oluşturalım
Set objOutlookMsg = objOutlook.CreateItem(olMailItem)
With objOutlookMsg

' Mail adresini ekliyoruz.
Set objOutlookRecip = .Recipients.Add(MailAdres)
objOutlookRecip.Type = olTo

' Diğer Alanların Doldurulması
.Subject = MailKonusu
.Body = MailMesaj & vbCrLf & vbCrLf
.Importance = olImportanceHigh

' Gönderilecek ekleri tanımlıyoruz.
.Attachments.Add ("D:\personel.pdf")
.Attachments.Add ("D:\ucretler.pdf")

' Alıcı adını çözümle
For Each objOutlookRecip In .Recipients
objOutlookRecip.Resolve
Next

' Mesajı göndermeden önce görünsün mü? Onu ayarlıyoruz.
If Me.onayGoster Then
.Display
Else
.Save
.Send
End If
End With
olNs.Logoff
Set objOutlook = Nothing
End Sub

Eğer Pencere onay kutusu işaretli değilse, doğrudan gönderilir. Bu durumda mail gönderilmeden bilgiler üzerinde değişiklik yapmanız mümkün olmaz.

Son olarak en basit haliyle bir alt yordam veriyorum. Bu altyordamı bir butonun Click olayına yazabilirsiniz.

Önemli Hatırlatma: Aşağıdaki modülü kullanmadan önce VBA- Referanslarından Microsoft Outlook XX Object Library kütüphanesini seçtiğinizden emin olunuz.


Option Compare Database
Option Explicit

Sub EMailRaporGonder()

Dim oApp As New Outlook.Application
Dim oEmail As Outlook.MailItem
Dim EklenecekDosya As String
Dim GununTarihi As String

'Raporu tarih damgalı db ile aynı klasörde dışa aktar.
GununTarihi = Format(Date, "ddmmyyyy")
EklenecekDosya = Application.CurrentProject.Path & "\" & RaporAdi & "_" & GununTarihi & ".pdf"
DoCmd.OutputTo acReport, "r_personel", acFormatPDF, EklenecekDosya, False

'Oluşturulan raporun sonuçlarını e-mail ile gönderin.
Set oEmail = oApp.CreateItem(olMailItem)
With oEmail
    .Recipients.Add "Gönderilecek Kişinin Mail Adresi"
    .Subject = "Stok Raporları"
    .Body = "Test Sonucu"
    .Attachments.Add EklenecekDosya
    .Send
End With

MsgBox "Email Gönderildi!", vbInformation, "E-Mail Durumu"

End Sub


Şimdi de mail metnini HTML formatında gönderelim. Bunun içinde aşağıdaki kodu uygulayabilirsiniz.


Option Compare Database
Option Explicit

Sub HTMLFormatlıGonder()

Dim onrMail As Outlook.MailItem

Dim onrOutlApp As Outlook.Application

Dim ekle As Outlook.Attachment

    Set onrOutlApp = New Outlook.Application

    Set onrMail = onrOutlApp.CreateItem(olMailItem)

        With onrMail

            .To = "gonderilecekmailadresi"

            .Subject = "HTML olarak Mail Gönderme"

            .BodyFormat = olFormatHTML

            .HTMLBody = "<HTML><BODY><span style=""color:#80BFFF"">Yazı Tipi Rengi</span style=""color:#80BFFF""> <br>Bu <b>Kalın Yazı</b> burada.</br> <br><u>Bu yazı ise altı çizili</u></br><br><p style='font-family:calibri;Yazı Tipi Boyutu:30'>Font size</br></BODY></HTML>"

        Set ekle = .Attachments.Add("resminadresi.jpg")

            .Send

        End With

onrOutlApp.Quit

Set onrMail = Nothing

Set onrOutlApp = Nothing

End Sub


Şimdilik, Hoşcakalın...




Yorum Gönder

0 Yorumlar