Generen van eMail's

Inhoud


Inleiding

De aanleiding tot het genereren van eMails komt voort uit het judo programma . Het bleek dat het daarvoor gemaakte programma niet erg goed aansloot bij XP en al helemaal niet op Linux . Ik maakte daarin gebruik van de routine's uit MAPI . Om onder alle verschijnselen uit te komen heb ik maar eens gezocht hoe het fundmenteel moet werken .

Versturen van mail

De meeste mail wordt verstuurd via een SMTP server . Deze server doet feitelijk niets anders dan de gegeven mail doorsturen naar de server welke behoord bij het opgegeven eMail adres . Het formaat van een te versturen eMail is gedeffinieerd in een standaard genaamd RFC 2821 . Kort gezegd komt het er opneer een file te maken met de volgende inhoud : (zend dit naar je eigen mailserver:port b.v. 213.51.128.65:25)

identifikatie
helo ike
van wie afkomstig
mail from:<menno@fwn.rug.nl>
naar wie moet het gestuurd worden
rcpt to:<m.s.ter.haseborg@home.nl>
rcpt to:<nog.iemand@anders>
Begin data van de brief
data
inhoud brief
Hier volgt de inhoud van je briefje .
eindig altijd met een punt
.
Server afsluiten
quit

Het zenden van deze file naar een SMTP server is een stuur en response protocol . D.w.z. je stuurt 1 regel en wacht op antwoord van de server . Dit antwoord begint altijd met drie cyfers gevolgd door een spatie of minteken . Een spatie geeft aan dat dit de laatste regel van het antwoord is .

Voorbeeld :

Bevestinging verbinding
220-smtp4.home.nl ESMTP Fri, 29 Jul 2005 20:53:48 +0200
220-Het is niet toegestaan deze server te gebruiken voor
220-het versturen van spam, mass mails en ongewenste e-mail.
220 Lees hiervoor ook de voorwaardenen van uw abonnement.
helo ike
250 smtp4.home.nl Hello my_ip.gr.home.nl 
mail from:<menno@fwn.rug.nl>
250 OK
rcpt to:<m.s.ter.haseborg@home.nl>
250 Accepted
data
354 Enter message, ending with "." on a line by itself
.
250 OK id=1DyZzQ-0004iR-GA
quit
221 smtp4.home.nl closing connection

De reactie qua text kan verschillend zijn , dit is afhangelijk van de mailserver . Maar de nummers zijn en hun betekenis zijn voor iedere server het zelfde .

Het eerste programmaatje (MBODYF) doet dus niets anders dan een bestand (mailbody) waarin alle eMail adressen en brieven staan naar de mailserver sturen . De eerste regel van het bestand mailbody moet het IP adres van de mailserver bevatten . De antwoorden van de mailserver worden naar het beeld gestuurd (beter gezegd naar con: ofwel stdout) .


Maken van een brief

Ofschoon het formeel juist is jou belangrijke boodschap te zetten tussen de sleutel woorden data en de . is de kans groot dat de ontvangende partij het niet te lezen krijgt . Dit omdat de tegenwoordig alom geprezen SPAM filters het bericht als spam beschouwen en het dientegevolge weggooien of in een of andere spambox zetten . Welke je meestal nooit leest .

Men heeft daarom een standaard (RFC 1521) bedacht hoe je bericht eruit moet zien . Deze standaard is niet bedacht om SPAM tegentehouden maar om allelei dingentjes met je bericht te kunnen meesturen , zoals foto's muziek en andere bijlage . Het is gegeven aan je (ontvangende) mailprogramma wat er mee wordt gedaan .

Je bericht moet minimaal bestaan uit twee delen teweten aan aanhef en een inhoud . Beide delen worden gescheiden door een lege regel . De aanhef moet bevatten afz , ontvanger en onderwerp .

Aanhef
from:menno@fwn.rug.nl
to:geadresseerde@alhier
subject: waar gaat dit over

Je bericht
Aan de lezer

'T ja waar gaat dit eigenlijk over ?

Groeten Ike

Het veld from: zal duidelijk zijn en wordt gebruikt voor het 'beantworden' .
Het veld to: wordt gebruikt voor 'allen beantwoorden' en 'doorsturen' .
Je kunt hier de adressen van alle ontvangers (gescheiden door een ;) inzetten maar je kunt er ook onzin inzetten .
Het subject: geeft het onderwerp aan .
Vergeet niet daarna een legeregel tegeven alsvorens je je proza invoerd . En denk erom dat je niet perongeluk een punt als eerste en enigste teken in een regel zet . Want dat wordt beschouwd als einde bericht !

Goed de punt blijft voor sommigen een probleem maar ook kunnen nog geen bijlage worden meegegeven . Hiertoe de volgende uitbreiding .

We voorzien het bericht van een MIME indeling :

Aanhef
from:menno@fwn.rug.nl
to:geadresseerde@alhier
subject: waar gaat dit over
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="simple_boundary"
Niet direct telezen bericht
Dit kun je niet in je mailprogramma lezen
Alleen als je de bron opvraagd kun je dit zien .
--simple_boundary
Je bericht
Content-Type: text/plain

Aan de lezer

'T ja waar gaat dit eigenlijk over ?

Groeten Ike
--simple_boundary
Bijlage 1 (doc file)
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Disposition: attachment;filename="spr.doc"

0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP
EAAAKwAAAAEAAAD+////AAAAACgAAAD///////
--simple_boundary
Bijlage 2 en laatste (rekenblad)
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Disposition: attachment;filename="geld.xls"

0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP
EAA(deze regels zijn max 76 +2 lang)//
--simple_boundary--

De waarde die je geeft aan boundary is willekeurig als de combinatie --waarde niet voorkomt in het bestand . Dit wordt gebruikt als een vorm van EndOfRecord . De laatste in het bestand is --waarde-- (soort EndOfFile).

De bijlagen geeft ik een algemeen type mee octet-stream dit werkt meestal overal wel . Een mail programma gebruikt vaak de bestand .ext om de toepassing te koppelen .

Waarom de bijlagen in een base64 (RFC 1522) code ? Dit daar het versturen van bineare data bij de mailserver problemen kan geven (verschil tussen helo en ehlo ). Om alle ellende uit de weg te gaan adviseer ik de bijlagen te coderen (dit geeft een 7 bits ascii code) . Het nadeel van base64 code is dat het bericht 30% groter wordt .

De Disposition beschrijft wat het is (attachment) en hoe het bij de ontvanger moet gaan heten (filename=).


Genereren van mail

Hiertoe heb ik een (deel)programma makemail gemaakt . Dit heeft opgrond van historische reden een mogelijk een mail te maken zonder bijlagen en een functie die een mail maakt welke wel of geen bijlagen heeft . De reden hiervan is dat de mail zonder bijlagen korter is en dus sneller . Dit daar ik de MIME beschrijvingen weg heb gelaten .

i = sendmail(set_of_Mailadressen,Onderwerp,brief) geen bijlagen .

i = sendfile(set_of_Mailadressen,Onderwerp,brief,set_of_Files) de bijlagen zijn de set_of_Files .

Als i = 0 dan is het goed verzonden . Iedere brief wordt afzonderlijk (direct) verstuurd , een andere mogelijk zou zijn om alle brieven in een (groot) bestand te schrijven en deze in een keer naar de mailserver te sturen .

Omdat ik meestal de mailserver adressen vergeet heb ik een makemail.ini gemaakt waarin de eerste regel je afzender eMailadres is en de volgende regels kunnen meerdere server IP:port adressen bevatten . Er mag maar een actief zijn dat is de eerste die niet uit gekommentariseerd is (-- in begin van een regel) .


Maken van mail's

Om de mail te kunnen maken heb je feitelijk drie bestanden nodig . Een die de adressen bevat en een die de brief bevat en een die mogelijk de bijlagen bevat . De manier waarop is heel erg afhangkelijk van je eigen omgeving . Ik heb daartoe twee voorbeelden .

Versturen van berichten naar scholen en verenigingen .

Een paar keer per jaar stuur ik ter informatie en ter kontrolle van mijn gegevens een briefje door het hele district . Daartoe is er een kort briefje welke gekoppeld wordt aan het adressen bestand welke ook in de district agenda wordt gebruikt .
De eerste regel van het briefje bevat : onderwerp eventueel gevolgd door de bijlagen gescheiden door een , .
DTC uitnodigingen,dtcuit06.doc,dtcinsch06.xls,dtccom06.doc

Aan : $

Beste Judovrienden,
 
Hierbij willen we jullie uitnodigen voor de districtteamcompetitie. 
Alle noodzakelijke informatie staat in de bijlagen. 
Wij zien jullie reactie graag voor 20 oktober tegemoet.
 
Met vriendelijke groet.
 
District teamcompetitie organisatiecommissie judo
 
Roelie Wesseling
Gerard Gelling
Anita Dinjens
Het programma leest deze gegevens maakt via makemail een bestand mailbody en stuurt deze door naar mbodyf welke het op zijn beurt stuurt naar de mailserver .

Versturen van brieven en kaartjes voor een judo tournooi .

Het judoprogramma geeft de mogelijkheid een eMail uitvoer temaken in HTML formaat . Het maakt daartoe voor iedere vereninging twee bestanden aan , een kaartjes en een brief bestand . Tevens een bestand waarin staat :
In de eerste regel staat de_naam_van_het_tournooi, ompouletype , ompouledatum . Gevold door :
naam_kaartje_bestand , naam_brief_bestand , verenigingsnaam , verenigingseMail
Tevens maak je een briefje waarin je verteld waarom het gaat :

   Geachte $
   
   Hierbij uw kaartjes en deelnemer brief
   
   Let op ompoulen $ $ !
   
   Groeten M.S.Ter Haseborg
De eerste regel uit het mail bestaand geeft de waarden aan de drie $ tekens . Het programma leest deze gegevens maakt via makemail een bestand mailbody en stuurt deze door naar mbodyf welke het op zijn beurt stuurt naar de mailserver .

Overzicht eMail struktuur .



Uitleiding

Er zijn evenveel variatie's als dat er mensen zijn .

Mocht je desalniettemin iets willen toevoegen dan schrijf mij een leuk stukje .

Menno . (30-07-2005)