Het automatisch verzenden van facturen per e-mail

E-mail is een ideaal middel om facturen te verzenden. Het verzenden van een digitale factuur (als beveiligd PDF-bestand) werkt snel, en is ook nog eens financieel aantrekkelijk gezien de besparingen op papier, enveloppen, afdrukkosten, portokosten en de wandeling naar de brievenbus. Een PDF-bestand kan worden gelezen en geprint met de gratis Adobe Acrobat Reader (download: https://get.adobe.com/nl/reader/).

Een beveiligd PDF-bestand is gemakkelijk zelf te maken met gratis programma's zoals PDFCreator (download: www.pdfforge.org/pdfcreator). Zorg er wel voor dat de factuur niet zomaar aan te passen is door het bestand te beveiligen met een wachtwoord. Beveilig hiervoor het PDF-bestand met een geheime sleutel en beperk de mogelijkheden tot het afdrukken van het bestand. Het maken van zo'n factuur in PDF-formaat is net zo makkelijk als het printen van een pagina: selecteer bij de afdrukopties van het programma waarin de factuur wordt gemaakt (bijvoorbeeld Word) de PDF-printer in plaats van de standaard printer. Geef vervolgens aan waar en onder welke naam het PDF-bestand opgeslagen moet worden. Nadat zo'n factuur in PDF-formaat is gemaakt, kan deze als bijlage worden toegevoegd aan een e-mail.

Het verzenden van e-mail automatiseren m.b.v. VBA

Het versturen van e-mail kan met de programmeertaal VBA (Visual Basic for Applications onder Excel) worden geautomatiseerd. Met deze taal kunnen macro’s worden opgenomen en uitgevoerd binnen de verschillende Office-pakketten van Microsoft. Deze functie wordt vanuit Excel geopend via Extra, Macro, Visual Basic Editor.

Voor VBA-gebruikers nog een tip voor het geautomatiseerd verzenden van e-mail door middel van een VBA-macro: met onderstaande basiscode is het mogelijk vanuit Excel e-mailberichten automatisch te versturen (enige ervaring met de programmeertaal VBA is wel vereist).

Macro voor het automatisch versturen van een simpele e-mail

Met behulp van de in VOORBEELD 1 beschreven VBA-code kan een macro worden uitgevoerd voor het versturen van een simpele e-mail. De regels voor de CC- en BCC-velden kunnen eventueel worden weglaten. Zoals gebruikelijk in een programmeertaal kan voor het invullen van de verschillende velden ook gebruik worden gemaakt van zelf gedefinieerde variabelen.

De code uit het voorbeeld is gemakkelijk naar de VBA-editor te kopiëren. Om gebruik te kunnen maken van de aansturing van Outlook binnen Excel is het wel noodzakelijk dat binnen de VBA-editor de Outlook-verwijzingen worden geactiveerd (Extra, Verwijzingen, activeer de optie Microsoft Office Outlook-weergavebesturing). Zonder de activering toont VBA bij de uitvoering van de macro's een foutmelding!

VOORBEELD 1:

Sub VerstuurEmail()
   
Dim objOl As Outlook.Application
   
Dim objMail As Object

   
Set objOl = Outlook.Application
'Start Outlook
   
Set objMail = objOl.CreateItem(olMailItem)
   
'Maakt e-mailbericht aan. olMailItem kan ook worden
   
'vervangen door 0 (code voor e-mailitem)

    '////////////////////////////////////////////////////
    'Dit stukje is voor Outlook 2007 voor het vastleggen
    'van de afzender van een e-mailbericht. Hiervoor moet
    'in VBA wel worden verwezen (Extra, Verwijzingen) naar
    'minimaal Microsoft Outlook 12 Object Library.
    Dim objAccount As Outlook.Account
   
For Each objAccount In objOl.Session.Accounts
       
If objAccount.DisplayName = "Naam Outlook-account" Then
           
Set objMail.SendUsingAccount = objAccount
       
End If
    Next
   
Set objAccount = Nothing
    '////////////////////////////////////////////////////
    'Gebruik eventueel deze optie in oudere versies van Outlook
    'waarbij een e-mail wordt verzonden namens een ander e-mailadres.
    objMail.SentOnBehalfOfName = "Naam verzender <verzender@emailadres.nl>"
    '////////////////////////////////////////////////////

    With objMail
        .To = "to@emailadres.nl"
'Deze moet worden aangepast
        .CC = "cc@emailadres.nl"
'Deze moet worden aangepast of weggelaten
        .BCC = "bcc@emailadres.nl"
'Moet ook worden aangepast of weggelaten
        'Het is helaas niet mogelijk het FROM-veld aan te passen
        'Zie bovenstaande oplossing voor Outlook 2007.
        .Subject = "Onderwerp e-mail"
        .Body = "Hier plaatst u de inhoud van het bericht"
       
'.HTMLBody = "<HTML><P>TEST</P></HTML>"
        .NoAging =
True
        .Attachments.Add "C:\WINDOWS\WIN.INI"
'De locatie van de bijlage
       
'.Display 'Laat e-mail zien voordat hij wordt verzonden
       
'.Save 'Voorkomt de vraag om op te slaan, slaat op in Postvak In
        .Send
'Verzenden van e-mailbericht
   
End With

   
Set objMail = Nothing
    objOl.Quit
   
Set objOl = Nothing
End Sub

Een aantal aandachtspunten

Afzender aanpassen

Het e-mailadres van de afzender kan niet zomaar worden ingesteld, daarom wordt elk bericht verzonden met de standaard in Outlook ingestelde e-mailaccount. Vanaf Outlook 2007 kan een e-mailbericht worden gekoppeld aan een van de in Outlook ingestelde e-mailaccounts. Dit kan plaats vinden bij de creatie van een e-mailbericht met de VBA-code in Excel zoals in bovenstaand voorbeeld is weergegeven (SendUsingAccount, hiervoor is minimaal Microsoft Outlook 12 Object Library benodigd, in te stellen in VBA via Extra, Verwijzingen). Het aanpassen van de te gebruiken e-mailaccount is ook mogelijk met de VBA-code in Outlook voor het versturen van de in concept geplaatste e-mailberichten zoals in VOORBEELD 3 is weergegeven.

TIP: In oudere versies van Outlook kan eventueel de variabele SentOnBehalfOfName worden ingesteld (er kan ook volstaan worden met alleen het e-mailadres). Deze methode heeft echter als nadeel dat de e-mail nog steeds wordt verzonden met de in Outlook als standaard ingestelde e-mailaccount.

SEND, DISPLAY en SAVE

Er kan gekozen worden tussen Send (direct verzenden), Display (eerst weergeven) en Save (opslaan). In VOORBEELD 1 werkt het opslaan (Save) niet correct, de e-mail wordt namelijk opgeslagen in Postvak In in plaats van in Postvak Uit of in Concepten. In VOORBEELD 2 is dit probleem opgelost.

BODY en HTMLBODY

Keuze uit platte tekst (Body) en opgemaakte tekst (HTMLBody).

Attachment toevoegen

Zoals in VOORBEELD 1 weergegeven, is het toevoegen van een bijlage aan een e-mailbericht vrij simpel. Wordt er geen gebruik gemaakt van een attachment dan kan die regel worden weggelaten.

Bevestiging voor toegang tot Outlook

Bij het verzenden vraagt Outlook om een bevestiging waarbij het programma 5 seconden stil staat en om een bevestiging vraagt. Het is niet eenvoudig hieraan te ontkomen (er zijn overigens wel oplossingen voor). De e-mail kan wel zonder problemen in de map Concepten worden geplaatst om deze later met een aparte macro binnen Outlook te verzenden. Zie daarvoor de code uit VOORBEELD 2.

Macro voor het automatisch opslaan van e-mail in de map Concepten

De code uit VOORBEELD 1 vraagt bij elk e-mailbericht om een bevestiging. Moeten er meerdere e-mailberichten worden verstuurd, dan werkt dat niet handig. Het is echter wel mogelijk e-mail klaar te zetten in de map Concepten zonder dat er om een bevestiging wordt gevraagd. Deze code is iets ingewikkelder, zie hiervoor VOORBEELD 2.

VOORBEELD 2:

Sub BewaarEmailInConcepten()
   
Dim objOl As Outlook.Application
   
Dim objNamespace As Outlook.Namespace
   
Dim objMAPIFolder As Outlook.MAPIFolder
   
Dim objMail As Object

   
Set objOl = Outlook.Application
'Start Outlook
   
On Error Resume Next
   
Set objNamespace = objOl.GetNamespace(Type:="MAPI")
   
If Err <> 0 Then
       
Set objOl = New Outlook.Application
'Zo nee: start Outlook
       
Set objNamespace = objOl.GetNamespace(Type:="MAPI")
   
End If
   
Set objMAPIFolder = objNamespace.GetDefaultFolder(16)
 
   'Folder voor Concepten wordt geselecteerd

   
Set objMail = objOl.CreateItem(olMailItem)
'Maakt e-mailbericht
   
'olMailItem kunt u ook vervangen door 0 (de code voor een e-mailbericht)

    '////////////////////////////////////////////////////
    'Dit stukje is voor Outlook 2007 voor het vastleggen
    'van de afzender van een e-mailbericht. Hiervoor moet
    'in VBA wel worden verwezen (Extra, Verwijzingen) naar
    'minimaal Microsoft Outlook 12 Object Library.
    Dim objAccount As Outlook.Account
   
For Each objAccount In objOl.Session.Accounts
       
If objAccount.DisplayName = "Naam Outlook-account" Then
           
Set objMail.SendUsingAccount = objAccount
       
End If
    Next
   
Set objAccount = Nothing
    '////////////////////////////////////////////////////
    'Gebruik eventueel deze optie in oudere versies van Outlook
    'waarbij een e-mail wordt verzonden namens een ander e-mailadres.
    objMail.SentOnBehalfOfName = "Naam verzender <verzender@emailadres.nl>"
    '////////////////////////////////////////////////////

    With objMail
        .To = "to@emailadres.nl"
'Deze moet worden aangepast
        .CC = "cc@emailadres.nl"
'Deze moet worden aangepast of weglaten
        .BCC = "bcc@emailadres.nl"
'Deze moet worden aangepast of weglaten
       
'Het is helaas niet mogelijk het FROM-veld aan te passen
        'Zie bovenstaande oplossing voor Outlook 2007.
        .Subject = "Onderwerp e-mail"
       
'.Body = "Hier plaatst u de inhoud van het bericht"
        .HTMLBody = "<HTML><P>TEST</P></HTML>"
        .NoAging =
True
        .Attachments.Add "C:\WINDOWS\WIN.INI"
'De locatie van de bijlage
       
'.Display 'Laat e-mail zien voordat hij verzonden wordt
        .Save
'Voorkomt de vraag om op te slaan, slaat nu op in Concepten
       
'.Send 'Verzenden van e-mailbericht
   
End With

   
Set objMail = Nothing
    objOl.Quit
   
Set objMAPIFolder = Nothing
   
Set objNamespace = Nothing
   
Set objOl = Nothing
End Sub

Macro voor het automatisch versturen van alle concept e-mail

De code in VOORBEELD 3 kan worden gebruikt voor het automatisch versturen van alle e-mail uit de map Concepten. Deze macro moet binnen Outlook worden uitgevoerd. De macro kan aan een knop in de menubalk worden toegewezen zodat deze altijd binnen handbereik is!

VOORBEELD 3:

Sub AlleEmailVerzenden()
   
With Outlook.Application.GetNamespace("Mapi").GetDefaultFolder(16)
       
Do While .Items.Count > 0
            .Items(1).Send
       
Loop
    End With

End Sub

Facturen in PDF-formaat maken en aan een e-mail toevoegen

Ook het aanmaken van een factuur in PDF-formaat en deze met behulp van de Attachments.Add-functie toevoegen aan een in VBA aangemaakt e-mailbericht, kan worden geautomatiseerd. De daarvoor benodigde code is afhankelijk van de gebruikte PDF-printer (zoals de gratis PDFCreator (download: www.pdfforge.org/pdfcreator)). Begin met het in VBA-code opnemen van een printopdracht van de factuur om een PDF-bestand aan te maken. Vervolgens kan de code in de editor worden bewerkt zodat de printopdracht met behulp van een VBA-macro met automatisch verstuurde voorgeprogrammeerde keyboard-aanslagen kan worden afgerond. Het toevoegen van het aangemaakte PDF-bestand aan het e-mailbericht is vervolgens met de Attachments.Add-functie niet moeilijk meer.

Het afdrukken kan met de VBA-opdrachten SendKeys en Application.Wait worden gerealiseerd. Gebruik de help-functie om meer te weten te komen over deze opdrachten. Stel de PDF-printer zo in dat er zo weinig mogelijk toetsaanslagen noodzakelijk zijn. Het is ook mogelijk een door Excel random gegenereerde beveiligingscode voor het PDF-bestand in te voeren en deze met de SendKeys-opdracht in te voeren. Nogmaals, hiervoor is enige VBA-ervaring nodig, maar met een beetje knutselen moet het lukken. Veel succes...!

Deze pagina is het vervolg op de pagina over het versturen van e-mail en het voorkomen van spam.

 
 
 
 

© 2001-2017 - - SchoonePC - Rotterdam - The Netherlands