do keris: Sc0rp10n wyraźnie napisał, że chce to zrobić socketami, obsługując protokół SMTP na własną rękę, a nie przez windziarskie MAPI.
do sc0rp10n: Zainteresuj się formatem nagłówków maili, MIME i kodowaniem Base64. Poniżej masz przykład źródła maila z załącznikiem i którkie wyjaśnienie.
Date: Fri, 29 Oct 2004 02:41:56 +0200
From: Nadawca <[email protected]>
To: Odbiorca <[email protected]>
Subject: Temacik
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----------10F17245391BA9E5"
------------10F17245391BA9E5
Content-Type: text/plain; charset=ISO-8859-2
Content-Transfer-Encoding: 8bit
Zlookaj zał?cznik...
------------10F17245391BA9E5
Content-Type: text/plain; name="zal.txt"
Content-transfer-encoding: base64
Content-Disposition: attachment; filename="zal.txt"
QUJDREVGR0hJSktMTU5PUA==
------------10F17245391BA9E5--
Jak widzisz, wiadomość składa się z dwóch części, o czym świadczy nagłówek 'Content-Type: multipart/mixed
'. Części są od siebie oddzielone tzw. boundary, czyli sekwencją znaków która nie występuje w mailu w żadnym innym miejscu, oprócz linii oddzielających poszczególne sekcje maila. W poniższym kodzie taką sekwencją jest '----------10F17245391BA9E5
'.
Po każdym boundary następuje nagłówek MIME dla danej sekcji, oddzielony od jej zawartości jedną pustą linią.
Dla sekcji z treścią wiadomości mamy typ MIME 'text/plain
' wraz z kodowaniem znaków. Po jednej pustej linii widać treść wiadomości, czyli 'Zlookaj zał?cznik...</code>'. Nagłówek '<code>Content-transfer-encoding: 8bit
' mówi, że treść wiadomości zostanie przesłana bez zmian, jako 8-bitowe znaki ASCII.
Dla sekcji załącznika również podajesz typ MIME. W moim przypadku załączyłem plik tekstowy, więc tym MIME również jest 'text/plain
'. Nagłówek "Content-transfer-encoding: base64</code>" mówi, że ta część jest zakodowana algorytmem Base64. Najważniejszy jest jednak nagłówek '
Content-Disposition: attachment; filename="zal.txt"'. To właśnie on oznacza, że dana sekcja wiadomości ma być traktowana jako załącznik (<code>attachment
), i określa jego nazwę pliku.