[VB6]MIME over SMTP

Pagina: 1
Acties:

  • Ciqniz
  • Registratie: Oktober 2002
  • Laatst online: 07-09-2023

Ciqniz

On the move...

Topicstarter
Het volgende probeer ik voor elkaar te krijgen:

- Verbinding maken met een SMTP-server via Winsock [check]
- Versturen van een e-mail via SMTP@Winsock [check]
- Ontvangen van een e-mail via elk willekeurig e-mail programma (tijdens het testen op deze PC OutlookXP) [check]

Geen probleem dus. Feilloos.
Dan ga ik een stap verder. De e-mail moet opgemaakt worden (m.b.v. MIME uiteraard), en moet via dezelfde manier worden verzonden.
Het verzenden gaat uiteraard gewoon weer perfect, echter het ontvangen gaat niet goed. Ik krijg in Outlook de complete source (dus inclusief MIME-headers) te zien.

De source van mijn mail ziet er als volgt uit:

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
From: xxx<a@b.c>
Reply-To: <a@b.c>
MIME-Version: 1.0
Content-Type: multipart/related; type="multipart/alternative"; boundary="--=nextpart"
X-Sender: xxx<a@b.c>
X-Mailer: xyz
X-Priority: 3
Return-Path: <a@b.c>
See attachment for run-details (header)
--=nextpart
Content-Type: multipart/alternative; boundary="--=nextpart2"
--=nextpart2
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

See attachment for run-details (plain)

--nextpart2
Content-Type: text/html;
    charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><BODY>
See attachment for run-details (html)
</BODY></HTML>

--=nextpart2--

--=nextpart
Content-Type: text/plain; name="run.csv"
Content-Transfer-Encoding: quoted-printable
Content-ID <run.csv>

bla,bla,bla,bla,bla,bla
bla,bla,bla,bla,bla,bla

--=nextpart--


Dit alles in een variabele gestopt (mMessage, zul je zometeen weer terugzien). Uiteraard niet letterlijk zoals hierboven, de opmaak is VB-Proof (Chr(34) ipv ", vbCrLf, etc.)

vbCrLf heb ik op de juiste plaatsen gezet, evenals de volgorde van de headers. Ik heb een plain-text gedeelte en een HTML-gedeelte. Tevens ook nog een attachment (run.csv: plain-text).

So far so good, dacht ik zo.
Dan maak ik verbinding, en vervolgens zeg ik het volgende tegen de SMTP-server:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
mConnectionString(0) = "HELO abc"
mConnectionString(1) = "MAIL FROM:a@b.c"
mConnectionString(2) = "RCPT TO:x@y.z"
mConnectionString(3) = "DATA"
mConnectionString(4) = "BCC:"
mConnectionString(5) = "CCC:"
mConnectionString(6) = "SUBJECT:Raw-data"
mConnectionString(7) = "TO:Control-Manager"
mConnectionString(8) = "FROM:x" & vbCrLf
mConnectionString(9) = mMessage & vbCrLf & "."
mConnectionString(10) = "QUIT"


Daarbij heb ik een correcte fouten-afhandeling (er wordt gewacht op de juiste boodschappen van de SMTP-server, bij errors geeft hij de error en stopt hij met het verzenden van data naar de SMTP-server.
Dit werkt dus niet, ik krijg in OutlookXP letterlijk de source van de e-mail (incl. headers dus) te zien.

Na wat zoeken kwam ik op het idee om de body niet op blaat(9) te zetten, maar bij blaat(3), na "DATA" dus. Ook dit werkt niet.

Kennelijk mis ik voldoende kennis over het SMTP protocol, want hier lijkt het mij mis te gaan. Heeft iemand enig idee hoe met MIME headers om te gaan als je direct de SMTP-server aanspreekt?

Verwijderd

In je code zie ik heel veel inconsistente mime separators:

--Nextpart2
--=nextpart2
--=nextpart2--

Die moete cht overal hetzelfde zijn anders kan Outlook er geen koek van bakken. Wat je anders doet: probeer een mail in outlook express te ontvangen, sleur die mail vanuit het lijstvenster naar je bureaublad en open dit bestand (.EML) met notepad.

Dan kun je zien hoe het hoort (copy/paste dit desnoods in je code om te kijken of dat dan wel werkt).

Suc6

  • Ciqniz
  • Registratie: Oktober 2002
  • Laatst online: 07-09-2023

Ciqniz

On the move...

Topicstarter
Volgens het volgende topic: [rml][ php] MIME mail - wat doe ik fout?[/rml] doe ik het wel goed, in mijn code in dit topic staat een foutje (--nextpart2 ipv --=nextpart2) maar dit is in de werkelijke code niet het geval. Ik heb het ook met een enkele boundary geprobeerd om het bericht op te splitsen, maar ook dit helpt niet. Het lijkt alsof de complete MIME gewoon genegeerd wordt, want hij zou toch wel iets moeten doen...

  • Ciqniz
  • Registratie: Oktober 2002
  • Laatst online: 07-09-2023

Ciqniz

On the move...

Topicstarter
Ook het volgende wordt niet geaccepteerd:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
From: "abc" <a@b.c>
To: Control-Manager <x@y.z>
Subject: raw data
MIME-Version: 1.0
Content-Type:multipart/mixed;boundary= "nextpart";
Content-Transfer-Encoding: 7bit
Should not see this data
--nextpart
Content-Type: text/html;
Content-Transfer-Encoding: quoted-printable

<H1>TEST</H1>

--nextpart
Content-Type: text/plain; name="run.csv"
Content-Transfer-Encoding: quoted-printable
Content-ID: <run.csv>

bla,bla,bla,bla,bla
bla,bla,bla,bla,bla

--nextpart--


Zover ik weet gewoon valide MIME... Ook bronnen van mailtjes van OE worden niet geaccepteerd. (Uiteraard niet helemaal letterlijk overgenomen, maar wel grotendeels).

  • Ciqniz
  • Registratie: Oktober 2002
  • Laatst online: 07-09-2023

Ciqniz

On the move...

Topicstarter
OK, ik heb het zelf uiteindelijk opgelost.
Dus voor mensen die eventueel met hetzelfde probleem zitten, hier is de oplossing:

De fout die ik maakte zat niet in mijn benadering van MIME maar van SMTP!
Tijdens het versturen van de data naar de SMTP-server gaf ik na het commando DATA óók de commando's BCC, CCC, SUBJECT, TO en FROM. Omdat deze commando's ontvangen werden wordt het MIME verder genegeerd en gewoon weergegeven als de body van de mail. Indien je na DATA (+crlf) je body plaats in MIME-formaat en eindigt met een nieuwe lijn en een punt (crlf + .), wordt de MIME wel gewoon geaccepteerd. Gevolg is dus dat ik nu heel simpel HTML-mail kan versturen via Winsock inclusief attachments!

Een maand of 2 maanden geleden schrok het mij nog verschrikkelijk af dat MIME en SMTP gebeuren, en zocht ik naar kant-en-klare (uiteraard gratis) componenten geschikt voor gebruik in VB. Maar ik ben nu echt vóór het zelf coden van MIME en SMTP (het is simpel zodra je de basics snapt).