mailing maken

Status
Niet open voor verdere reacties.

hanswe

Gebruiker
Lid geworden
7 okt 2009
Berichten
25
Ik heb een tekstdokument en een query bestand met mail adressen in acces.
Weet iemand hoe ik van deze gegevens een mailing kan maken zonder dat de ene persoon kan zien aan wie deze mailing nog meer verzonden is. Het gaat om meer dan 10.000 mail adressen (nieuwskrant porselein) en is handmatig niet te doen.
 
Je kunt bijvoorbeeld een knop maken op een formulier, waarmee je een Recordset op basis van de query opent, en vervolgens voor elk record in de query een Outlook mail verstuurt.
Er zijn regelmatig vragen over mailen vanuit Outlook, dus er staan wel een paar voorbeelden op het forum. Als je niks kan vinden, kan ik er wel een voor je maken. Dan is het wel handig om de SQL van de query te posten voor de veldnamen en zo. En de naam van de nieuwsbrief die mee moet als attachment.
 
Dokument als attachment

In een attachment zit nou net het probleem. Deze mailing gaat over de gehele wereld en in zeer veel landen is een attachment een probleem. De nieuwsbrief moet daarom als een tekstmail.
 
Dat had je er niet bijgezegd... Je wilt dus een volledige tekst opbouwen in HTML?
 
HTML text

Je hebt volkomen gelijk dat ik het niet vermeld had.
Ik weet niet of een mailtje ook opgebouwd is uit HTML tekst, maar ik wil de nieuwsbrief (overigens geheel in platte tekst zonder foto's of dergelijke) alsof het een normaal tekst mail is.
Er zitten namelijk ook mensen tussen waar de mail via sateliet gaan en daar telt elke byte als 1.
 
Als het alleen tekst is, wordt het iets eenvoudiger, maar we moeten dan toch wel wat meer weten over hoe de tekst wordt samengesteld. Heb je bijvoorbeeld alles in één memoveld staan? En welke Access versie gebruik je dan?
 
Het is wel tekst langer dan 256 tekens maar ik kan het uit een memoveld, kladblok, word of deregelijke halen.
Ik gebruik Office 2007 laatste versie dus ook Access 2007.
 
@hanswe: Klopt het dat de indruk wordt gewekt dat het hier om spam gaat?
 
Spam vraag

Nee dat klopt niet. Ik heb een wereldwijde verzamelaars website voor een bepaald merk porselein.
Hiervoor is een noviteiten blaadje wat geregeld wordt verstuurd als de mensen dat willen (op het moment ongeveer 32.000 aanvragen). Deze mensen zitten op vele uithoeken van de wereld en bijvoorbeeld mensen in het hartje van Australie zijn wat internet aangewezen op een sateliet ontvangs waar ze per seconde voor betalen. Dat is de reden waarom er platte tekst moet verzonden worden en geen plaatjes want dan duurt de ontvangst te lang.
Maar verschillende mail providers zien attachments als spam en wordt geblokkeerd terwijl de mensen er om vragen vooraf. Een tweede probleem is dat het verzonden wordt vanuit de verzamelaars website www finlandporcelain info en er daardoor geen duidelijke verzender is wat ook vaak door providers gezien wordt als spam. Een derde probleem is dat de meeste ontvangers digibeten zijn (65+) en niet weten hoe je een spamfilter kan mededelen dat dit geen spam is.
 
Laatst bewerkt:
Bedankt voor je toelichting.
 
Ik zal vanavond een simpel voorbeeldje proberen te posten.
 
En zoals beloofd, hier een stukje code dat zou moeten werken.
Met dit voorbeeld gebruik je een lost tekstbestand, dus je hoeft de tekst voor de mailing niet in Access te maken. Je kunt daarvoor elke tekstverwerker gebruiken die je wilt. Lijkt mij wel zo handig...

Code:
Dim db As DAO.Database
Dim rsMail As DAO.Recordset
Dim objOutlook As Outlook.Application
Dim objMail As Outlook.MailItem
Dim sEmailVeld As String
Dim sOnderwerp As String
Dim sBodyFile As String
Dim sQueryNaam As String
Dim fso As FileSystemObject
Dim objBody As TextStream
Dim sTekst As String

Set fso = New FileSystemObject
sQueryNaam = "Typ hier de naam van de query die je wilt gebruiken" 
sEmailVeld = "Typ hier de naam van het Emailveld dat je gebruikt voor de mailing"

' Stap 1: het onderwerp toewijzen.
sOnderwerp$ = Me.Onderwerp
' Gebruik onderstaande code als je het onderwerp via een Dialoogvenster wilt vullen.
''sOnderwerp$ = InputBox$("Typ hier het onderwerp van de mailing.", "Onderwerpregel is verplicht!")

' Als er geen onderwerp is, dan stoppen....
If sOnderwerp$ = "" Then
    MsgBox "Geen onderwerp, dan ook geen mail..." & vbNewLine & vbNewLine & "We kappen er mee...", vbCritical, "E-Mail Merger"
    Exit Sub
End If

' Vervolgens gebruiken we de tekst uit een tekstbestand als input voor het tekstdeel van de mail.
' Het tekstbestand kun je bijvoorbeeld via een dialoogvenster opzoeken in in het tekstvak zetten.
sBodyFile$ = Me.TekstBestand
' Gebruik onderstaande code als je het pad naar het bestand via een Dialoogvenster wilt vullen.
''sBodyFile$ = InputBox$("Geef het pad op naar het tekstbestand dat je wilt gebruiken als tekst.", "We Need A Body!")

' Als er geen Tekst is, dan stoppen....
If sBodyFile$ = "" Then
    MsgBox "Geen tekstbestand, dan ook geen mail..." & vbNewLine & vbNewLine & _
         "We kappen er echt mee...", vbCritical, "I Ain't Got No-Body!"
    Exit Sub
End If

' Controleer eerst of het bestand wel bestaat...
If fso.FileExists(sBodyFile$) = False Then
    MsgBox "Ik kan het bestand niet vinden... " & vbNewLine & vbNewLine & _
           "Quitting...", vbCritical, "I Ain't Got No-Body!"
    Exit Sub
End If

' We hebben een bestand; laten we de tekst dus maar gebruiken!
Set objBody = fso.OpenTextFile(sBodyFile, ForReading, False, TristateUseDefault)
' ... en die wordt dan in een variabele gezet.
sTekst = objBody.ReadAll
' en dan kan het tekstbestand weer dicht.
objBody.Close

' Volgende stap is een Outlook connectie maken.
Set objOutlook = New Outlook.Application

' En de database openen met de records uit de query of tabel
Set db = CurrentDb()
Set rsMail = db.OpenRecordset(QueryNaam)
''Set rsMail = db.OpenRecordset("MyEmailAddresses")

' En dan nu: door de records wandelen, en voor elk adres een mailtje sturen...
Do Until rsMail.EOF
    ' Alle ingrediënten instellen...
    ' Te beginnen met het Emailveld. Dit heb je meegegeven in de functie-aanroep.
    objMail.To = rsMail(sEmailVeld)
    objMail.Subject = sOnderwerp$
    objMail.Body = sTekst
    ' Als je een bijlage mee wilt sturen, dan kun je één van de volgende regels gebruiken.
    ' objMail.Attachments.Add "c:\dbgout1.txt", olByValue, 1, "Zichtbare Naam 1"
    ' objMail.Attachments.Add "c:\dbgout2.txt", olByValue, 1, "Zichtbare Naam 2"
    ' Korte uitleg:
    ' "c:\myfile.txt" = het bestand dat mee moet.
    ' olByVaue = Hoe wordt het bestand bijgevoegd.
    ' olByValue is Document als bijlage, olByReference maakt een Snelkoppeling.
    ' De snelkoppeling werkt alleen als het bestand beschikbaar is (lokaal of op netwerk)
    ' 1 = zet de bijlage vooraan in de mail. Wordt vaak genegeerd door mailprogramma's
    ' "Zichtbare Naam 1" = Maakt de naam van de bijlage meer beschrijvend;
    ' i.p.v. "c:\dbgout1.txt" dus: "Rapport 4e Kwartaal"
    ' En hiermee wordt de mail verstuurd!
    objMail.Send
    ' Als je de mail wilt zien, voordat je hem verstuurt, gebruik dan de volgende regel:
    'objMail.Display
    ' En dan naar het volgende record...
    rsMail.MoveNext
Loop

'Als laatste: alle variabelen opruimen.
Set objMail = Nothing

'Als je Outlook wilt afsluiten na het zenden, dan de volgende regel activeren.
'objOutlook.Quit
Set objOutlook = Nothing

rsMail.Close
Set rsMail = Nothing
db.Close
Set db = Nothing

End Sub
Er zit veel commentaar tussen, dat je eventueel weg kunt halen als je de code snapt, en als hij werkt. Ik heb hem zelf overigens niet uitgetest; hij komt uit een voorbeeldje dat ik heb gevonden. Hij is ook niet getest met 2007. Maar ik zie niet waarom hij niet zou werken, er gebeuren geen dingen die niet zouden moeten of die ik niet snap.
Voor de duidelijkheid nog een plaatje met de bibliotheken die je moet laden.
 

Bijlagen

  • Verwijzingen Email.jpg
    Verwijzingen Email.jpg
    64 KB · Weergaven: 69
Laatst bewerkt:
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan