[vb] Email verzenden met Winsock

Pagina: 1
Acties:

  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 08:33
Ik heb enig onderzoek gedaan naar het verzenden van email vanuit VB6. Het versturen van emails dmv winsock gaat succesvol. Ik heb hier alleen een paar vragen nog over die ik niet via google ed heb kunnen vinden:
- Hoe kan ik een email naar meerdere geadresseerden versturen?
- Kan ik dmv winsock een HTML-email versturen?
- Kan ik een attachment met de mail meesturen?

Voor het eerste punt kan ik als alternatief de emailadressen in een loop zetten en voor elk adres een aparte mail versturen, maar is natuurlijk niet efficient.

Ik weet dat er verschillende componenten beschikbaar zijn voor het versturen van mails binnen VB6, maar onze de besluitvorming bij mijn werkgever gaat niet zo snel (ambtenaren). ;) Daarom probeer ik de oplossing bij het gebruik van Winsock te zoeken.

[ Voor 24% gewijzigd door TweakersOnly op 20-07-2003 17:44 ]


Verwijderd

je maakt verbinding met een smtp-server ?? (kan ik niet uit je verhaal opmaken)

  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 08:33
Verwijderd schreef op 20 July 2003 @ 17:43:
je maakt verbinding met een smtp-server ?? (kan ik niet uit je verhaal opmaken)
Yeps. :)

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 12-07 11:54
VB, mail, meerdere adressen, html mail

klinkt wel heel erg als een virus

Verwijderd

ok :)

+Meerdere geadresseerden:
na MAIL FROM: <jouwadres> naar de server gestuurd te hebben en een ok ontvangen te hebben zeg je:

RCPT TO: <ontvanger>

je hoeft dit gewoon een aantal keren te herhalen.


attachments en html-mail hebben een beetje met elkaar te maken. het magische woord is: mime.

voor zowel het html-gedeelte en de attachment geldt dat je een multiparted message hebt.
de html-part heeft als content-type: text/html
de attahcment heeft een content-type afhankelijk van de attachment en nog de regel:
Content-disposition: attachment

dit komt misschien allemaal een beetje onduidelijk over maar je moet maar eens zoeken naar mime op google. het helpt ook om (als je outlook hebt tenminste) de source van messages te bekijken. (eigenschappen van een bericht->details->bron van bericht)


edit: ter verduidelijking een voorbeeld-opbouw:
MIME-version: 1.0
Content-type: multipart/mixed; boundary="<NextPart>"

This is a multi-part message in MIME format.

--<NextPart>
Content-Type: text/plain; charset=iso-8859-1; format=flowed


<hier de plain-text-versie>

--<NextPart>
Content-Type: text/html; charset=iso-8859-1

<html>hier een html-gedeelte</html>

--<NextPart>
Content-Type: application/<filetype>;
name="<bestandsnaam>"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="<bestandsnaam>"

<gecodeerde inhoud van de attachment>

--<NextPart>--
(nextpart is een random string :) om te voorkomen dat alles niet in de war gestuurd kan worden door verdere inhoud)

[ Voor 46% gewijzigd door Verwijderd op 20-07-2003 18:02 ]


  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 08:33
stekkel schreef op 20 July 2003 @ 17:47:
VB, mail, meerdere adressen, html mail

klinkt wel heel erg als een virus
Ik kan je geruststellen, 't wordt geen virus. :) Het programma leest iedere nacht een aantal logbestanden uit. In deze bestanden wordt een x-aantal fouten geregistreerd. Ik wil n.a.v. de logbestandene een email versturen met als inhoud in tabelvorm het aantal geregistreerde fouten per dag. Hiervoor heb ik dus html-mail voor nodig. Het emailbericht moet naar een 5-tal personen worden gestuurd. Daarom wil ik graag multiple-recipients functionaliteiten.

Omdat het slechts gaat om een beperkte groep geadreseerden heb ik de opmerking geplaatst dat ik hier ook eventueel een loopje voor kan gebruiken.

  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 08:33
Het is me gelukt om een email met attachment en in html-formaat te sturen. Het lukt me echter niet om de mail naar meerdere gebruikers te sturen. Zie de onderstaande code

Visual Basic:
1
2
3
4
5
6
dim i as integer
i = 0
while (i <= ubound(arrEmailadressen))
    winsock1.SendData "RCPT TO:" & arrEmailadressen(i) & vbCrLf
    i = i + 1
wend


De mail wordt alleen naar de eerste persoon gestuurd. De overige personen ontvangen geen mail. Wat heb ik verkeerd gedaan?

Verwijderd

TweakersOnly schreef op 21 July 2003 @ 11:04:
Het is me gelukt om een email met attachment en in html-formaat te sturen. Het lukt me echter niet om de mail naar meerdere gebruikers te sturen. Zie de onderstaande code

Visual Basic:
1
2
3
4
5
6
dim i as integer
i = 0
while (i <= ubound(arrEmailadressen))
    winsock1.SendData "RCPT TO:" & arrEmailadressen(i) & vbCrLf
    i = i + 1
wend


De mail wordt alleen naar de eerste persoon gestuurd. De overige personen ontvangen geen mail. Wat heb ik verkeerd gedaan?
laat je je programma eens ubound(arrEmailadressen) en de emailadressen apart debug.print-en. het zou wel goed moeten zijn volgensmij...

uit de rfc:
RCPT
RCPT <SP> TO:<forward-path> <CRLF>

This command gives a forward-path identifying one recipient. If accepted, the receiver-SMTP returns a 250 OK reply, and stores the forward-path. If the recipient is unknown the receiver-SMTP returns a 550 Failure reply. This second step of the procedure can be repeated any number of times. The <forward-path> can contain more than just a mailbox. The <forward-path> is a source routing list of hosts and the destination mailbox. The first host in the <forward-path> should be the host receiving this command.

  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 08:33
Ik heb de code nu aangepast voor de debug.print, maar het werkt nog steeds niet.

Visual Basic:
1
2
3
4
5
6
7
dim i as integer
i = 0
while (i <= ubound(arrEmailadressen))
    winsock1.SendData "RCPT TO:" & arrEmailadressen(i) & vbCrLf
    Debug.print "RCPT TO:" & arrEmailadressen(i)
    i = i + 1
wend


Als ik met winsock1.getData het antwoord van de server opvraag, krijg ik ook alleen het eerste emailadres te zien.

  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

doe eens gewoon debug.print ubound(arrEmailadressen), en dan pas de while-lus. Klopt je array namelijk wel?

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 08:33
MUBA schreef op 21 juli 2003 @ 12:28:
doe eens gewoon debug.print ubound(arrEmailadressen), en dan pas de while-lus. Klopt je array namelijk wel?
De array klopt i.i.g. Er zitten 3 items in de array, uboud(arrEmailadresen) is derhalve 2. De while loop haalt de verschillende emailadresen ook uit de array.
Het probleem ligt 'm duidelijk bij de connectie naar de mailserver.

  • hammerhead
  • Registratie: April 2000
  • Laatst online: 21-08 18:06
En als je heteens probeert door handmatig een verbinding naar dezelfde mailserver op te zetten met telnet en gewoon even de stappen zelf in te tikken (dus met 3x rcpt to:..)

Werkt het dan wel om een bericht naar drie personen te sturen?

Aviation is proof that given the will, we have the capacity to achieve the impossible.
--Eddie Rickenbacker


Verwijderd

winsock1.getData binnen de loop gezet ?
hij moet voor elk adres dat jij em geeft 250 OK terug geven

Verwijderd

als je nou als rcpt to: stuurt:

email@adres.com,email2@adres.com,email3@adres.com ...
the old fasioned way zegmaar.. ook het snelst

[edit] Als je ook even naar de smtp rfc kijkt (weet niet welk nummer :P) .. daar staat het hele protocol uitgespuugt in een hoop woorden

[ Voor 35% gewijzigd door Verwijderd op 21-07-2003 13:28 ]


  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 08:33
Verwijderd schreef op 21 juli 2003 @ 13:20:
winsock1.getData binnen de loop gezet ?
hij moet voor elk adres dat jij em geeft 250 OK terug geven
Ik heb de regel idd binnen de loop gezet en krijg voor elk adres ook de code 250 terug van de server.

BTW. Ik zie trouwens dat alle emailadressen als een BCC worden beschouwd. Als ik het emailbericht bekijk dan zijn er geen geadresseerden, alleen BCC-adressen.

  • hammerhead
  • Registratie: April 2000
  • Laatst online: 21-08 18:06
TweakersOnly schreef op 21 July 2003 @ 14:05:
[...]
BTW. Ik zie trouwens dat alle emailadressen als een BCC worden beschouwd. Als ik het emailbericht bekijk dan zijn er geen geadresseerden, alleen BCC-adressen.
Dan moet je de headers van je bericht ook nog even dezelfde adressen zetten bij To:

Een email client krijgt niets van de RCPT TO: regels te zien, die zijn echt alleen maar voor de server.

Aviation is proof that given the will, we have the capacity to achieve the impossible.
--Eddie Rickenbacker


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Hoewel het leuk is om zelf te maken in vb met Winsock, krijg je wel met een hoop dingen te maken die je moet afhandelen (foutmeldingen van de server etc) en ondervangen. Andere mailservers hebben soms andere (afwijkende) interfaces (die dus soms niet 100% aan de SMTP/POP3 specs voldoen). Ik ben er zelf niet echt kapot van om dit via winsock te doen.

Waarom gebruik je geen gratis mail componentje zoals Dundas dat bijvoorbeeld biedt? Dit kan alles (en méér) wat je wil...

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 08:33
ff een update ... :)

Ik heb hte programmaatje zover aan de gang gekregen dat ik met behulp van de winsock een html-based email kan verzenden. Ik zit echter met een klein probleempje. De emails worden succesvol versturen naar de door mij geselecteerde emailadressen. Wanneer de emails echter gelezen zijn de velden to, cc en bcc leeg. Voor de klant zou het fijn zijn als de emailadressen wel ingevuld zijn, op basis van deze adressen worden emails automatisch doorgesluist naar de verantwoordelijke personen.

Via google en diverse andere sites heb ik hier geen informatie over kunnen vinden. Weet iemand of en hoe ik dit kan realiseren?

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 07-07 11:51
TweakersOnly schreef op 02 september 2003 @ 18:06:
ff een update ... :)

Wanneer de emails echter gelezen zijn de velden to, cc en bcc leeg.
Het antwoord hierop is al langs gekomen:
Dan moet je de headers van je bericht ook nog even dezelfde adressen zetten bij To:

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


  • ATS
  • Registratie: September 2001
  • Laatst online: 12-02 13:46

ATS

Je moet echt eens wat RFC's gaan doorlezen over email als je dit persé zelf wilt implementeren. Je hebt kennelijk geen idee hoe een email gestructureerd hoort te zijn. Of gebruik, zoals al eerder gesuggereerd, een standaard component. Er zijn er vele. Waarom zou je het wiel opnieuw willen uitvinden? Zo'n component kan het opbouwen van de headers verzorgen, de communicatie met de server afhandelen (inclusief foutmeldingen die jij in je loopje gewoon negeert!), etc.
Overigens is BCC per definitie leeg/staat niet in de headers. Het heet niet voor niets Blind Carbon Copy.

[ Voor 13% gewijzigd door ATS op 03-09-2003 12:43 ]

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


  • pjonk
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Om ook even behulpzaam te zijn ;)
Er is een hele goeie VB site over winsock programming http://www.winsockvb.com

Hieronder vind je een tutorial over het verzenden van SMTP mail met winsock:
http://www.winsockvb.com/....php?article_id=20&page=1

It’s nice to be important but it’s more important to be nice


  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 15-08 11:47

Sponge

Serious Game Developer

Om ook even een kleine tip te geven, kijk eens naar For... NExt loops:

dim i as integer

code:
1
2
3
4
5
6
i = 0
while (i <= ubound(arrEmailadressen))
    winsock1.SendData "RCPT TO:" & arrEmailadressen(i) & vbCrLf
    Debug.print "RCPT TO:" & arrEmailadressen(i)
    i = i + 1
wend


zou gewoon
code:
1
2
3
4
5
dim i as long
for i = 1 to ubound(arrEmailadressen)
    winsock1.SendData "RCPT TO:" & arrEmailadressen(i) & vbCrLf
    Debug.print "RCPT TO:" & arrEmailadressen(i)
next


worden :)

  • Mickman
  • Registratie: Juni 2001
  • Laatst online: 29-03 18:11
41.6C.6D.61.72 schreef op 03 September 2003 @ 22:02:
Om ook even een kleine tip te geven, kijk eens naar For... NExt loops:

dim i as integer

code:
1
2
3
4
5
6
i = 0
while (i <= ubound(arrEmailadressen))
    winsock1.SendData "RCPT TO:" & arrEmailadressen(i) & vbCrLf
    Debug.print "RCPT TO:" & arrEmailadressen(i)
    i = i + 1
wend


zou gewoon
code:
1
2
3
4
5
dim i as long
for i = 0 to ubound(arrEmailadressen)
    winsock1.SendData "RCPT TO:" & arrEmailadressen(i) & vbCrLf
    Debug.print "RCPT TO:" & arrEmailadressen(i)
next


worden :)
zorg dan gelijk dat i in het 'for'-statement bij 0 begint, anders
slaat hij het eerste array element over.

[ Voor 23% gewijzigd door Mickman op 04-09-2003 10:06 ]

Pagina: 1