Wekelijkse e-mail met bijlage versturen automatiseren

Status
Niet open voor verdere reacties.

Welies

Gebruiker
Lid geworden
9 dec 2010
Berichten
128
Hallo allen!

Graag wil ik het repeterend versturen van een wekelijkse e-mail automatiseren, met als doel de handelingen zoveel als mogelijk te minimaliseren.

De case:
  • Wekelijkse worden er 3 mailberichten verstuurd naar 3 partijen (3 vaste mailadressen, laten we ze voor het gemak even 'mailadres1', 'mailadres2' en 'mailadres3' noemen)
  • Bij elke mail wordt 1 BCC adres opgenomen (altijd dezelfde)
  • In elke mail worden 4 .zip bestanden ('zip1', 'zip2', 'zip3', en 'zip4') meegestuurd die op een vast netwerkpad ('locatie') is opgeslagen. De .zip bestanden hebben per partij een aparte naam waaraan te herkennen is bij welke mail ze horen. Aan de bestandsnaam wordt wel een datum kenmerk meegegeven. Dus voor partij 1 worden de bestanden 'zip1-partij1-20210801', 'zip1-partij1-20210802', 'zip1-partij1-20210803' en 'zip1-partij1-20210804' meegestuurd, etc.

Is dit bv. middels VBA te automatiseren of misschien via een andere weg?

Hoop dat ik het hiermee duidelijk heb kunnen omschrijven. Zo niet, hoor ik het graag!
 
Dat kan makkelijk via Excel VBA.
Een Excel document kan je dan wekelijks zijn werk laten doen middels de Windows Task Scheduler.
 
Dank voor je reactie edmoor. Mijn logische vervolgvraag is dan: welk VBA script is hiervoor te fabriceren, daar heb ik geen kennis van. Of moet dit in een ander topic geplaatst worden?
 
Hoe dat script er dan uit moet zien is helemaal afhankelijk van je document.
Plaats er dus een voorbeeld van.
Daarnaast, gebruik je Outlook om te mailen of een ander product?
 
Laatst bewerkt:
Gezien dat de vraag in het Outlook forum staat, lijkt het mij duidelijk welk mail pakket er gebruikt wordt :). Hooguit is de versie nog interessant. Het hele vraagstuk kan ook uiteraard volledig vanuit Outlook worden geautomatiseerd; daar is geen Excel voor nodig.
 
Da's waar natuurlijk :)
Als je een goede manier hebt om vanuit Outlook te schedulen hou ik me ook aanbevolen.
Er vanuit gaande dat Outlook niet standaard aan staat.
Als dat wel zo is dan is het geen probleem uiteraard.
Dat moet TS kunnen beantwoorden.
 
Ah.. dat bevestigt mijn gedachten; vond het al vreemd dat de inhoud van het Excel bestand relevant zou zijn. Het wordt immers alleen als bijlage verstuurd.

@OctaFish: het betreft Outlook 2010
 
Excel is eenvoudig te gebruiken in de Windows Task Scheduler, vandaar dat ik die noemde.
Dan kan het wekelijks volledig automatisch.
Maar wellicht dat OctaFish ook een manier heeft om dat in Outlook zelf te doen.

Leg ook even uit wat je bedoelt met repeterend.
Eenmaal per week automatisch?
En op welk tijdstip?

Of mag het ook zodra je Outlook start?
 
De bestanden worden op zondag klaargezet op de netwerklocatie, op maandag wordt de mail verstuurd (dus inderdaad 1x per week, automatisch). Bij voorkeur op een vast tijdstip op de maandagochtend.
 
Dus dat kan dan worden gedaan zodra je Outlook start?
 
Outlook zal aan moeten staan.
Iets of iemand moet dat doen.
Vanaf dat moment kan Outlook dan een opgegeven tijdstip afwachten om die mail te versturen.
 
Prima, gaan we.
In de Outlook VBA omgeving, dit in ThisOutloookSession:
Code:
Private Sub Application_Quit()
    If TimerID <> 0 Then Call DeactivateTimer [COLOR="#008000"]'Timer uitschakelen[/COLOR]
End Sub

Private Sub Application_Startup()
    [COLOR="#008000"]'MsgBox "Timer activeren."[/COLOR]
    Call ActivateTimer(1) [COLOR="#008000"]'Timer aanroep iedere minuut.[/COLOR]
End Sub

In een module die je noemt: mTimedMail
Code:
Sub SendMail()
    Dim mOntv As String
    Dim mOBCC As String
    Dim mOndw As String
    Dim mBody As String
    
    Dim Zip1 As String
    Dim Zip2 As String
    Dim Zip3 As String
    Dim Zip4 As String
    
[COLOR="#008000"]    'MsgBox "Zend mail"
    'Exit Sub[/COLOR]
    
    Zip1 = "C:\Mailzips\zip1-partij1-20210801.zip"
    Zip2 = "C:\Mailzips\zip1-partij1-20210802.zip"
    Zip3 = "C:\Mailzips\zip1-partij1-20210803.zip"
    Zip4 = "C:\Mailzips\zip1-partij1-20210804.zip"
    
    Dim TimedMail As MailItem
    Set TimedMail = Application.CreateItem(olMailItem)
    
    mOntv = "ontv1@mail.com;ontv2@mail.com;ontv3@mail.com"
    mOBCC = "BCCOntvanger@mail.com"
    mOndw = "Wekelijkse email"
    mBody = "De body tekst"
    
    With TimedMail
        .To = mOntv
        .Importance = olImportanceHigh
        .BCC = mOBCC
        .Subject = mOndw
        .Body = mBody
        .BodyFormat = olFormatHTML
        .Attachments.Add Zip1
        .Attachments.Add Zip2
        .Attachments.Add Zip3
        .Attachments.Add Zip4
        .Display [COLOR="#008000"]'Of .Send[/COLOR]
    End With
    
    DeactivateTimer
    
End Sub

De gegevens voor de mail dien je zelf aan te passen.

In een module die je noemt: mTimer
Code:
#If WIN7 Then
    Declare PtrSafe Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerfunc As LongPtr) As Long
    Declare PtrSafe Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As LongPtr) As Long
#Else
    Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerfunc As LongPtr) As Long
    Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As LongPtr) As Long
#End If

Public TimerID As Long [COLOR="#008000"]'Timer ID[/COLOR]

Public Sub ActivateTimer(ByVal nMinutes As Long)
    nMinutes = nMinutes * 1000 * 60             [COLOR="#008000"]'Timer miliseconden naar minuten converteren[/COLOR]
    If TimerID <> 0 Then Call DeactivateTimer  [COLOR="#008000"] 'Als de Timer al loopt deze eerst stoppen[/COLOR]
    TimerID = SetTimer(0, 0, nMinutes, AddressOf TriggerTimer)
    If TimerID = 0 Then
        MsgBox "Timer niet gestart."
    End If
End Sub

Public Sub DeactivateTimer()
    Dim lSuccess As Long
    lSuccess = KillTimer(0, TimerID)
    If lSuccess = 0 Then
        MsgBox "Timer niet gestopt"
    Else
        TimerID = 0
    End If
End Sub

Public Sub TriggerTimer(ByVal hwnd As Long, ByVal uMsg As Long, ByVal idevent As Long, ByVal Systime As Long)
    [COLOR="#008000"]'Mail versturen iedere Maandag om 09:00[/COLOR]
    If Format(Date, "dd") = "02" Then
       If Format(Time, "hh:mm") = "09:00" Then
            SendMail
        End If
    End If
End Sub

Dag en tijd kan je eventueel aanpassen.
Sluit Outlook en kies voor het opslaan van het VBA project.
Start Outlook weer en de timer gaat lopen.
Iedere minuut wordt er dan gekeken of het maandag 09:00 is.
Zoja, dan wordt de mail verstuurd en de timer gestopt zodat het diezelfde minuut niet nog eens wordt gedaan.
Het werkt voor zowel de 32- als de 64-bit installatie van Office.
 
Laatst bewerkt:
Ik kan het bericht niet meer wijzigen maar ik zag een fout.
Het moet zo zijn:
Code:
#If WIN7 Then
    Declare PtrSafe Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerfunc As LongPtr) As Long
    Declare PtrSafe Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As LongPtr) As Long
#Else
    Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerfunc As Long) As Long
    Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
#End If
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan