[MS Access] mail versturen via outlook express

Pagina: 1
Acties:
  • 328 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • Niek_
  • Registratie: Februari 2002
  • Laatst online: 16-05 19:38
Ik heb een hele boel kunnen vinden op Google en in de search, blijkbaar is het een veel besproken onderwerp. Toch (tenminste, dat denk ik) heb ik de oplossing voor mijn 'probleem' niet kunnen vinden:

Ik heb een tabel met daarin gewoon 1 veld met op elke regel een e-mail adres. Nu heb ik een opdracht knop (gewoon op een formulier gegooid, formulier doet verder niks) die het volgende doet:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Knop1_Click()
DoCmd.SendObject _
    , _
    , _
    , _
    , _
    , _
    "info@test.nl", _
    "Blaat! (onderwerp)!", _
    , _
    True


    
End Sub


Het mail adres wordt nu als bcc ingevoegd. Dit is ook wat ik wil bereiken. Het enige wat ik nu nog voor elkaar wil krijgen is dat de mail adressen (ipv ze in de code te zetten) uit een tabel worden gehaald en ingevoegd worden in de bcc.

Ik zal dus waarschijnlijk in plaats van info@test.nl een soort code neer moeten zetten die de mail adressen uit de tabel pakt en deze scheid met een ; (toch?)

Hier loop ik dus tegen een probleem aan. De tabel heet tblMail en het veld met de adressen heet email. Ik heb dus echt geen idee wat voor een code ik hier neer moet zetten zodat én de mail adressen erin gezet worden én ze gescheiden worden met een ;


Mocht je een site weten waar dit duidelijk (weet wel wat van Access maar zeker niet alles) uitgelegd wordt dan houd ik me natuurlijk ook aabevolen... :)

[ Voor 4% gewijzigd door Niek_ op 28-04-2004 10:26 ]


Acties:
  • 0 Henk 'm!

  • Niek_
  • Registratie: Februari 2002
  • Laatst online: 16-05 19:38
......ben ik dus verder gegaan met prutsen...werkt het niet meer (!) geen idee hoe ik het dus gedaan had en ja, ook niks opgeslagen.... Heeft iemand een paar goede tips?

Oa, waar ik die code precies moet plakken. Doe het nu als volgt. Ik open een formulier in de ontwerpweergave en kies vanaf de werkset de 'opdrachtknop'. Dan kies ik bij eigenschappen van de knop de optie 'gebeurtenis opbouwen'. In het volgende scherm gooi ik de code neer. Probleem is alleen dat dit nu ook niet meer werk.... (?) Iemand een idee?

Heb de code van http://www.peterssoftware.com/c_emfa.htm

Acties:
  • 0 Henk 'm!

  • Boss
  • Registratie: September 1999
  • Laatst online: 00:19

Boss

+1 Overgewaardeerd

Je kan al die e-mail adressen toch gewoon in een string achter elkaar laten plakken?
Dus gewoon een recordset object aanmaken (evt met filter) alle records doorlopen en dan strAdressen = strAdressen & ";" & rst!email ofzo?

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Acties:
  • 0 Henk 'm!

  • Niek_
  • Registratie: Februari 2002
  • Laatst online: 16-05 19:38
Boss schreef op 28 april 2004 @ 14:44:
Je kan al die e-mail adressen toch gewoon in een string achter elkaar laten plakken?
Dus gewoon een recordset object aanmaken (evt met filter) alle records doorlopen en dan strAdressen = strAdressen & ";" & rst!email ofzo?
@ Boss, zou je dit misschien iets verder kunnen uitleggen? Lijkt erop dat je inderdaad bedoelt wat ik wil bereiken.

Acties:
  • 0 Henk 'm!

  • Boss
  • Registratie: September 1999
  • Laatst online: 00:19

Boss

+1 Overgewaardeerd

(dubbelpost ipv edit, zie ik net. zie bericht hieronder!)

[ Voor 96% gewijzigd door Boss op 29-04-2004 11:48 ]

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Acties:
  • 0 Henk 'm!

  • Boss
  • Registratie: September 1999
  • Laatst online: 00:19

Boss

+1 Overgewaardeerd

Boss schreef op 28 april 2004 @ 22:33:
Gegevens:
A. Je hebt een zooi e-mail adressen in een tabel staan.
B. In het 'aan' veld van een e-mail bericht kan je meerdere geadresseerden opgeven door de e-mail adressen te scheiden met een ;

Dan maak je dus een string met arrin alle e-mail adressen, bijvoorbeeld:
code:
1
strEmail = "jan@test.nl;piet@mooi.nl;klaas@home.nl"

Vervolgens kan je bij DoCmd.SendObject voor het e-mail adres de variabele strEmail opgeven.

De volgende stap is om strEmail automatisch te laten vullen aan de hand van alle adressen in je tabel.
Ik zou zeggen: knip & plak & edit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
Dim rst as Recordset
Dim strEmail as String

strEmail = ""
Set rst = CurrentDB.OpenRecordset("SELECT [email] FROM tblAdressen WHERE [email] like '*'")
If Not rst.RecordCount = 0 then
  rst.movefirst
  while not rst.eof
    strEmail = strEmail & ";" & rst!email
    rst.MoveNext
  Wend
End If
Overigens kan je vanuit MS Word ook gepersonaliseerde e-mail sturen, zeg maar een mail-merge naar e-mail. Dan kan je dus eventueel iedereen bij zijn voornaam aanspreken in de e-mail, mits je die gegevens hebt. Gaat hetzelfde als gewoon mailmergen, maar dan kiezen voor e-mail en gegevens uit de access db laten halen.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Acties:
  • 0 Henk 'm!

  • Niek_
  • Registratie: Februari 2002
  • Laatst online: 16-05 19:38
Alvast bedankt, ik ga ff prutsen, eens kijken of ik er wat leuks uit krijg ;)

Acties:
  • 0 Henk 'm!

  • Niek_
  • Registratie: Februari 2002
  • Laatst online: 16-05 19:38
Boss schreef op 28 april 2004 @ 22:33:
Ok. Ik heb dus de volgende drie codes:
* voor de opdrachtknop:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Knop1_Click()
DoCmd.SendObject _
    , _
    , _
    , _
    , _
    , _
    "info@test.nl", _
    "Blaat! (onderwerp)!", _
    , _
    True


    
End Sub



* de string
code:
1
strEmail = "jan@test.nl;piet@mooi.nl;klaas@home.nl"


*om de string te vullen met de e-mail adressen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
Dim rst as Recordset
Dim strEmail as String

strEmail = ""
Set rst = CurrentDB.OpenRecordset("SELECT [email] FROM tblAdressen WHERE [email] like '*'")
If Not rst.RecordCount = 0 then
  rst.movefirst
  while not rst.eof
    strEmail = strEmail & ";" & rst!email
    rst.MoveNext
  Wend
End If


Ook heb ik in de tabel 'tbladressen' de kolom 'email'. Hieruit moeten de adressen gehaald worden.
En nu komt de onnozele n00b vraag... Weet wel iets van access maar heb (tot nu toe) nog nooit met strings en 'echte' opdrachten gewerkt. Gebruikte eigenlijk altijd de voorgebakken opdrachten. Ik weet nu dus niet precies waar ik welke code moet plakken.

Dacht zelf het volgende:
bij de modules een nieuwe module maken deze sendmail noemen en de laatste code (om de string te vullen) in het opdrachtvenster plakken.
bij de macro's een nieuwe maken die de module sendmail uitvoerd
in formulier opdrachtknop invoegen en.....tja. ik 'moet' dan van access een opdracht kiezen maar nu raak ik het spoor een beetje bijster. Heeft iemand een duwtje in de goede richting voor mij?

Acties:
  • 0 Henk 'm!

  • TheXception
  • Registratie: December 2003
  • Niet online
Volgens mij is alleen een module voldoende.
Die Macro heb je volgens mij niet nodig.
Als je in de code (gebeurtenisprocedure) achter je e-mail knop de module die je hebt gemaakt aanroept, dan ben je er volgens mij al.

Waarom zou je die macro nog nodig hebben?

"It's better to burn out, than to fade away"


Acties:
  • 0 Henk 'm!

  • Niek_
  • Registratie: Februari 2002
  • Laatst online: 16-05 19:38
TheXception schreef op 29 april 2004 @ 10:47:
Volgens mij is alleen een module voldoende.
Die Macro heb je volgens mij niet nodig.
Als je in de code (gebeurtenisprocedure) achter je e-mail knop de module die je hebt gemaakt aanroept, dan ben je er volgens mij al.

Waarom zou je die macro nog nodig hebben?
Tja, heb ik eigenlijk ook geen idee van....macro geschrapt :)

kan je zien hoe goed ik ben met modules en macro's....

Acties:
  • 0 Henk 'm!

  • TheXception
  • Registratie: December 2003
  • Niet online
Ik weet niet wat voor object je wilt verzenden.
Zelf heb ik een module gemaakt om een rapportje te mailen vanaf het form. (In gebruik alleen geen vaste email-adressen, maar nu weet je als het goed is al hoe dat werkt)

Code ziet er dan ongeveer zo uit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Public Function EmailSturen()
On Error Resume Next 

Dim stDocName As String
Dim stTekst As String

stDocName = "RAPPORTNAAM"
stTekst = "VERZIN EEN LEUKE TEKST"
strError = "U heeft het verzenden van de het rapport geannuleerd."

DoCmd.OpenReport stDocName, acPreview, , "[XID]=" & [Form_FORMNAAM]![XID]
DoCmd.SendObject acSendReport, stDocName, acFormatRTF, , , , [Form_FORMNAAM]![XID], stTekst
DoCmd.Close acReport, stDocName

End Function


Dan is het voldoende om in de gebeurtenisprocedure alleen nog deze functie aan te roepen.

Als je alleen maar e-mail wil verzenden zonder bijlage in het bericht wordt het natuurlijk nog vele malen simpeler dan dit hierboven... ;)
Dan kun je het hele OpenReport gedeelte weglaten.

[ Voor 9% gewijzigd door TheXception op 29-04-2004 15:36 ]

"It's better to burn out, than to fade away"


Acties:
  • 0 Henk 'm!

  • Niek_
  • Registratie: Februari 2002
  • Laatst online: 16-05 19:38
Zo, tis al weer een tijdje terug maar ik denk toch dat dit topic goed is voor m'n (vervolg-)vraag.

Op zich gaat het allemaal goed op de manier zoals we het hierboven doen. De mail-adressen worden bij bcc ingevoerd en de mailing wordt verstuurd.

Ik krijg echter reacties van mensen dat ze de mailing niet ontvangen. Op het moment dat ik apart en alleen naar hun de mailing verstuur komt hij wel aan.

Ik wil dus nu proberen om dit naar iedereen te doen. Iedereen krijgt z'n 'eigen' mailtje. Volgens mij is dit best met access te doen icm een script wat er voor zorgt dat het mailtje ook echt verzonden wordt.

De inhoud van het mailtje is voor iedereen gelijk, hier hoeft dus niets aan te veranderen. Het enige wat ik nu voor elkaar moet krijgen is dat alle adressen hun eigen mailtje krijgen ipv. alle adressen in bcc.

Iemand een idee hoe ik dit zou moeten aanpakken?

[ Voor 4% gewijzigd door Niek_ op 03-06-2004 08:53 ]


Acties:
  • 0 Henk 'm!

  • Niek_
  • Registratie: Februari 2002
  • Laatst online: 16-05 19:38
Even kort samenvatten:

- Outlook Express openen
- Nieuw bericht kiezen
- E-mail adres uit Access invoegen
- Onderwerp invoegen (altijd hetzelfde)
- Versturen (inhoud v/d mail is niet nodig, heb een standaard briefpapier ingesteld)
- en vervolgens weer opnieuw beginnen maar dan het volgende mail-adres uit Access gebruiken.

Heb veel gehoord over het SendObject commando, ben nu de help van access nog eens aan het doorlezen, eens kijken of ik eruit kom, tips zijn altijd welkom!!

[ Voor 21% gewijzigd door Niek_ op 03-06-2004 09:51 ]


Acties:
  • 0 Henk 'm!

  • TheXception
  • Registratie: December 2003
  • Niet online
Niek_ schreef op 03 juni 2004 @ 08:53:
Ik krijg echter reacties van mensen dat ze de mailing niet ontvangen. Op het moment dat ik apart en alleen naar hun de mailing verstuur komt hij wel aan.
[..]
Ik wil dus nu proberen om dit naar iedereen te doen. Iedereen krijgt z'n 'eigen' mailtje. Volgens mij is dit best met access te doen icm een script wat er voor zorgt dat het mailtje ook echt verzonden wordt.
Ik snap dat je het op een andere manier wilt proberen omdat deze blijkbaar niet werkt, maar is het niet handig om de oorzaak te achterhalen? Het lijkt er namelijk op, dat het ophalen van de e-mailadressen niet correct werkt.
Het is een omweg om iedereen een los mailtje te sturen. Hoe vul je de e-mail adressen? Met een Query?

Kijk anders eens wat ie doet als je de mail niet automatisch laat verzenden, maar eerst opent om te bewerken (dus even het criterium "Bericht bewerken" veranderen in de sendobject-methode). Dan kun je zien welke e-mail adressen hij vult..

[ Voor 3% gewijzigd door TheXception op 03-06-2004 11:08 ]

"It's better to burn out, than to fade away"


Acties:
  • 0 Henk 'm!

  • Niek_
  • Registratie: Februari 2002
  • Laatst online: 16-05 19:38
Het verzenden gaat op zich wel goed. Alle mail adressen worden gescheiden door een ; in het bcc vak gezet, dit gaat helemaal goed.

Probleem zit hem in virus/spam-filters. Die gooien die mailtjes met tig adressen in bcc er blijkbaar uit ofzo. Dit wil ik dus omzeilen door iedereen een 'persoonlijk' mailtje te sturen.

Heb hem al zo gemaakt dat hij eerst wordt geopend om nog bewerkt te worden, hier heb ik ookgecontrolleerd of alle mail adressen erin zitten. :)

waren wel goede ideeen, daar niet van, maar helaas, het is niet de oplossing

Acties:
  • 0 Henk 'm!

  • TheXception
  • Registratie: December 2003
  • Niet online
Niek_ schreef op 03 juni 2004 @ 11:15:
Probleem zit hem in virus/spam-filters. Die gooien die mailtjes met tig adressen in bcc er blijkbaar uit ofzo. Dit wil ik dus omzeilen door iedereen een 'persoonlijk' mailtje te sturen
Tja... dat had je er niet bij gezegd.

Volgens mij moet je dan iets gaan doen met een Do...Loop (Instructie), je lijst met e-mail adressen daarbij doorlopen en stoppen bij EOF.

wie weet ben je daar ook al mee bezig geweest, maar dat staat er niet bij :9 .

"It's better to burn out, than to fade away"


Acties:
  • 0 Henk 'm!

  • Niek_
  • Registratie: Februari 2002
  • Laatst online: 16-05 19:38
sjees, wat een tijd, net klaar met werken...

Maarre, nee, daar was ik nog niet mee bezig geweest. Heb je wat meer info? (Stoppen bij EOF, wat bedoel je daar mee?) :?

Acties:
  • 0 Henk 'm!

  • TheXception
  • Registratie: December 2003
  • Niet online
Niek_ schreef op 04 juni 2004 @ 03:41:
(Stoppen bij EOF, wat bedoel je daar mee?) :?
Was mijn ietwat onhandige manier om aan te geven dat je een loop moet maken die stopt bij End Of File

Ik dacht dus aan zoiets.. (geloof dat de code netter kan hoor, maar 't werk iig wel bij mij)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 Public Function EmailSturen()
On Error Resume Next

Dim stDocName As String
Dim stTekst As String
Dim rst As Recordset
Dim strAdressen As Field
Dim strWaarde
Dim StrList As String

stDocName = "RAPPORT"
stTekst = "tekst"
Set rst = CurrentDb.OpenRecordset("select EMAILADRES from tblEMAILADRES")
StrList = ""
strWaarde = ""

rst.MoveLast
rst.MoveFirst
'Vul de email
Do Until rst.EOF
strWaarde = rst.Fields("emailadres")
StrList = strWaarde
DoCmd.OpenReport stDocName, acPreview, , "[ID]=" [ID]
DoCmd.SendObject acSendReport, stDocName, acFormatRTF, StrList, , , "TEKST VOOR ONDERWERP", , False
DoCmd.Close acReport, stDocName
rst.MoveNext

Loop

End Function

Zoals je ziet, verstuur ik documentjes, maar code een beetje aanpassen en voila

"It's better to burn out, than to fade away"


Acties:
  • 0 Henk 'm!

  • Pyrowired
  • Registratie: Februari 2004
  • Laatst online: 05-01 16:00
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
             Dim EmailAdresjes()
              Dim Voornaam()
             Dim Achternaam()
            Dim rst As New ADODB.Recordset
            Dim IntI As Integer
            Dim tabelletje 
            tabelletje = "tabelnaam"

' eerst een matrix van alle e-mail adressen maken
            rst.Open tabelletje, CurrentProject.Connection, adOpenKeyset, adLockReadOnly
            rst.MoveFirst
   
            Do While rst.EOF = False
                ReDim Preserve EmailAdresjes(IntI)
                emailadresjes(IntI) = rst("emailAdresVeld")
                 Redim preserve Voornaam(intI)
                voornaam(inti)=rst("voornaam")
                  redim preserve achternaam(inti)
                 achternaam(inti) = rst("achternaam")
                rst.MoveNext
                IntI = IntI + 1
            Loop
            rst.Close

' Na het vullen gaan we verder met het openen van het rapport/formulier whatever
dim StdDocName
StdDocName = "Naam rapport"
docmd.openreport StdDocName, acpreview 

' Als laatste gaan we het rapport naar alle mensen sturen met een persoonlijke aanhef

dim IntJ
IntJ = 0
do while IntJ < ubound(EmailAdresjes)
DoCmd.SendObject acSendReport, stDocName, acFormatRTF , emailAdresjes(IntJ), , , "Het Onderwerp Hier" _
, "Beste " & voornaam(intj) & " " & achternaam(intj) & _
"," & VbCrLf & VbCrLf & "Bijgaand het beloofde rapport." & vbcrlf & vbcrlf "Groeten", False
IntJ = IntJ + 1
loop

[ Voor 8% gewijzigd door Pyrowired op 04-06-2004 15:14 ]

Zolang de zon schijnt, blijf ik binnen.


Acties:
  • 0 Henk 'm!

  • Boss
  • Registratie: September 1999
  • Laatst online: 00:19

Boss

+1 Overgewaardeerd

Alleen ben ik er bij een klant achtergekomen dat DoCmd.SendObject fouten kan geven bij lange mailtjes, kijk dus uit hiermee.

een oplossing is om de complete DoCmd.SendObject te vervangen in een nieuwe klassemodule. Beetje lastig, maar anders kan je echt fouten krijgen. Om de een of andere reden werkt het gewoon anders niet met lange berichten en/of grote attachements (waarbij een standaard Access rapport dus al een fout kan geven.)

Ik ben er lang mee bezig geweest, en heb uiteindelijk hier de oplossing gevonden. http://support.microsoft.com/default.aspx?kbid=260819

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Acties:
  • 0 Henk 'm!

  • Niek_
  • Registratie: Februari 2002
  • Laatst online: 16-05 19:38
Ik hoef nier perse een bijlage bij het mailtje te doen. Ik heb stuur de info als volgt mee:

ik maak een briefpapier aan met daarin een link naar een plaatje wat op internet staat. Dat plaatje bevat alle informatie die ik aan de mensen wil sturen. (uitnodiging voor opening enz.)

Op het moment dat ik dus een mailtje stuur met dat briefpapier dan krijgen ze de juiste info. Ik hoef dus niks in het bericht te typen en/of als bijlage toe te voegen.

Hierdoor heb ik dus geen gedoe met attachements. :)

Acties:
  • 0 Henk 'm!

  • Boss
  • Registratie: September 1999
  • Laatst online: 00:19

Boss

+1 Overgewaardeerd

Waarom gebruik je dan nog deze omslachtige methode via Access? Dan kan je toch beter gewoon een mailmerge doen vanuit Word?

Met een mailmerge kan je ook e-mail berichten verzenden...

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Acties:
  • 0 Henk 'm!

  • Niek_
  • Registratie: Februari 2002
  • Laatst online: 16-05 19:38
Ik zal even een voorbeeld posten:
Afbeeldingslocatie: http://home.planet.nl/~metzeawj/preuverie/mailing/hoefslag.jpg

Het hele plaatje is in Word gemaakt en vervolgens omgezet naar jpg. Ik zat namelijk met het attachement probleem. Als ik dit plaatje als attachement bijvoeg dan zie je hem niet gelijk als je het mailtje opent. Ik wil graag dat als mensen het mailtje openen ze in het berichtvenster de 'reclame' gelijk zien.

Ik heb dat dus opgelost door een briefpapier te gebruiken met daarin de link naar bovenstaand plaatje. Hoe zou jij het oplossen dan, toch via een mailmerge?

Acties:
  • 0 Henk 'm!

  • Boss
  • Registratie: September 1999
  • Laatst online: 00:19

Boss

+1 Overgewaardeerd

Ja... een html mail maken met dit plaatje erin en dan hoppa... versturen maar!

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.

Pagina: 1