Ik gebruik whatpulse om mijn toetsaanslagen te meten; eigenlijk puur voor de hobbie. Nu heb ik op mijn linux servertje een cronjob gemaakt. Elke nacht rond de klok van 04.00 draait een bash script en wordt mijn persoonlijke XML stats file gedownload en geparsed. Dit houdt in dat de inhoud hiervan in een stats tabelletje wordt gezet. Dit werkt goed en de gegevens druppelen netjes elke nacht binnen. D.m.v. de GD library i.c.m. jpGraph kan ik hier een leuk diagrammetje van maken. Alleen nu een heel praktisch probleem. Ik wil namelijk ook elke nacht na het parsen van de nieuwe gegevens mijzelf een email sturen met deze grafiek in dew body van het mailtje. Hoe doe ik dit? Het linux mail commando ondersteunt volgens mij geen mail met grafische objecten in de body, ofwel? Ik heb het plaatje het liefst niet echt als attachment. Moet ik met encoding o.i.d. in de weer?
Je kunt het omzetten naar een base64 afbeelding als je het niet echt als bijlage wilt toevoegen.
Plaatje ergens naar toe uploaden en het mailtje sturen als html mail met een <img src="http://linknaarplaatje"> in de body?
Ik probeer nu om het volledige mailtje te encoden en op die manier op te bouwen. Maar hoe kan ik nu precies zien hoe de opbouw van een mail eruit moetn zien? Je hebt boundaries, encoding, etc. Ligt dit ergens vast?
Verwijderd
RFC 822, 2045 en 2046smeerbartje schreef op maandag 25 augustus 2008 @ 20:48:
Ik probeer nu om het volledige mailtje te encoden en op die manier op te bouwen. Maar hoe kan ik nu precies zien hoe de opbouw van een mail eruit moetn zien? Je hebt boundaries, encoding, etc. Ligt dit ergens vast?
Je moet inderdaad de juiste headers meegeven, zodat de ontvangende mail client snapt dat dit HTML is en plaatjes, en dat ie dit moet parsen.
Kijk even naar dit voorbeeld (in PHP)
Oftwel, in bash:
Hierna kun je met base64 encoding inderdaad er ook nog een plaatje inzetten, ook al is het misschien makkelijker om dit bijvoorbeeld via een fileshare aan te bieden (neem even aan dat je al Samba / NFS hebt draaien).
Zet het plaatje op die share en plaats in je mailtje simpelweg een <img src=\\server\grafieken\vandaag.jpg>
Kijk even naar dit voorbeeld (in PHP)
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
40
41
42
43
44
| <?php // multiple recipients $to = 'aidan@example.com' . ', '; // note the comma $to .= 'wez@example.com'; // subject $subject = 'Birthday Reminders for August'; // message $message = ' <html> <head> <title>Birthday Reminders for August</title> </head> <body> <p>Here are the birthdays upcoming in August!</p> <table> <tr> <th>Person</th><th>Day</th><th>Month</th><th>Year</th> </tr> <tr> <td>Joe</td><td>3rd</td><td>August</td><td>1970</td> </tr> <tr> <td>Sally</td><td>17th</td><td>August</td><td>1973</td> </tr> </table> </body> </html> '; // To send HTML mail, the Content-type header must be set $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; // Additional headers $headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n"; $headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n"; $headers .= 'Cc: birthdayarchive@example.com' . "\r\n"; $headers .= 'Bcc: birthdaycheck@example.com' . "\r\n"; // Mail it mail($to, $subject, $message, $headers); ?> |
Oftwel, in bash:
code:
1
2
3
4
5
| echo "'MIME-Version: 1.0" >> /tmp/mailtje echo "Content-type: text/html; charset=iso-8859-1" >> /tmp/mailtje echo "<html><b>testje</b></html>" >> /tmp/mailtje cat /tmp/mailtje | mail -s "Een testmailtje" ikzelf@thuis.nl |
Hierna kun je met base64 encoding inderdaad er ook nog een plaatje inzetten, ook al is het misschien makkelijker om dit bijvoorbeeld via een fileshare aan te bieden (neem even aan dat je al Samba / NFS hebt draaien).
Zet het plaatje op die share en plaats in je mailtje simpelweg een <img src=\\server\grafieken\vandaag.jpg>
We are pentium of borg. Division is futile. You will be approximated.
Cool, thanks.. ik ga er vanavond mee aan de slag. Ik vind het mooier om het plaatje te embedden in het mailtje; puur gevoelsmatig
.
Op mijn Debian machine gebruik ik daarvoor mime-construct (uit de gelijknamige package). Kan je handig via commandline een mailtje in elkaar zetten met tekstbestanden, plaatjes en zo. To- en CC-lijsten opgeven en klaar. Bijzonder simpel (want ik kan er mee overweg) en handig.
He, die is leuk, die kende ik nog nietvanaalten schreef op dinsdag 26 augustus 2008 @ 12:50:
Op mijn Debian machine gebruik ik daarvoor mime-construct (uit de gelijknamige package). Kan je handig via commandline een mailtje in elkaar zetten met tekstbestanden, plaatjes en zo. To- en CC-lijsten opgeven en klaar. Bijzonder simpel (want ik kan er mee overweg) en handig.
http://search.cpan.org/~r...struct-1.9/mime-construct
We are pentium of borg. Division is futile. You will be approximated.
Maar hoe verstuur je hiermee een mailtje met een plaatje in de body dan? Volgens mij is het enkel mogelijk als attachment toch?vanaalten schreef op dinsdag 26 augustus 2008 @ 12:50:
Op mijn Debian machine gebruik ik daarvoor mime-construct (uit de gelijknamige package). Kan je handig via commandline een mailtje in elkaar zetten met tekstbestanden, plaatjes en zo. To- en CC-lijsten opgeven en klaar. Bijzonder simpel (want ik kan er mee overweg) en handig.
Hoe stel je je voor dat een "mailtje in de body" er precies uitziet, gewoon een stuk html met een plaatje erin? Dat plaatje lijkt mij dan gewoon een attachment
inline attachment?smeerbartje schreef op dinsdag 26 augustus 2008 @ 14:16:
[...]
Maar hoe verstuur je hiermee een mailtje met een plaatje in de body dan? Volgens mij is het enkel mogelijk als attachment toch?
Of de afbeelding omzetten naar base64 en dan weergeven als dit :blaataaps schreef op dinsdag 26 augustus 2008 @ 14:18:
Hoe stel je je voor dat een "mailtje in de body" er precies uitziet, gewoon een stuk html met een plaatje erin? Dat plaatje lijkt mij dan gewoon een attachment
HTML:
1
| <img src="data:image/png;base64,[base64code]"> |
Dit wordt ook veel gebruikt in email signatures.
Serieus? Werkt dit? Hoe vet!!super-muffin schreef op dinsdag 26 augustus 2008 @ 14:59:
[...]
Of de afbeelding omzetten naar base64 en dan weergeven als dit :
HTML:
1 <img src="data:image/png;base64,[base64code]">
Dit wordt ook veel gebruikt in email signatures.
Zojuist even wat geprobeerd, maar ik kom er niet uit. Ik heb een bestand genaamt "test.msg" met de volgende inhoud:
Als ik deze verstuur met "cat test.msg | mail -s "Een testmailtje" mijn@email.com", dan verschijnt het volgende emailtje in mij gmail account:

De email client ziet dus duidelijk niet dat het een html mail betreft. Wat kan ik hieraan doen? Op het moment dat de mail wel goed wordt geinterpreteerd als html, dan ga ik wel kijken naar het invoegen van een inline afbeelding zoals super-muggin hierboven zegt.
[edit]
Wat ik ook probeer, het mailtje wordt echt alleen maar gezien als text. Zie ook deze:
code:
1
2
3
| MIME-Version: 1.0 Content-type: text/html; charset=iso-8859-1 <html><b>testje</b></html> |
Als ik deze verstuur met "cat test.msg | mail -s "Een testmailtje" mijn@email.com", dan verschijnt het volgende emailtje in mij gmail account:

De email client ziet dus duidelijk niet dat het een html mail betreft. Wat kan ik hieraan doen? Op het moment dat de mail wel goed wordt geinterpreteerd als html, dan ga ik wel kijken naar het invoegen van een inline afbeelding zoals super-muggin hierboven zegt.
[edit]
Wat ik ook probeer, het mailtje wordt echt alleen maar gezien als text. Zie ook deze:

[ Voor 11% gewijzigd door smeerbartje op 26-08-2008 20:26 ]
Het blijft vreemd. Zojuist geprobeerd het volgende bestand te mailen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| From: Server Nijmegen <root@nijmegen.bladieblad.org>\n To: Mijn Naam <mijnaam@bladiebla.nl>\n Date: Mon, 26 Aug 2008 09:41:09 -0800 (PST)\n Subject: Formatted text mail\n MIME-Version: 1.0\n Content-Type: text/html;\n charset="iso-8859-1"\n Content-Transfer-Encoding: quoted-printable\n \n --boundary42\n Content-Type: text/enriched\n ... RFC 1896 text/enriched version of same message\n goes here <bold>here</bold>...\n --boundary42--\n |
Verwijderd
Met de content type moet je ook de boundary opgeven...smeerbartje schreef op woensdag 27 augustus 2008 @ 16:22:
Het blijft vreemd. Zojuist geprobeerd het volgende bestand te mailen.
code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 From: Server Nijmegen <root@nijmegen.bladieblad.org>\n To: Mijn Naam <mijnaam@bladiebla.nl>\n Date: Mon, 26 Aug 2008 09:41:09 -0800 (PST)\n Subject: Formatted text mail\n MIME-Version: 1.0\n Content-Type: text/html;\n charset="iso-8859-1"\n Content-Transfer-Encoding: quoted-printable\n \n --boundary42\n Content-Type: text/enriched\n ... RFC 1896 text/enriched version of same message\n goes here <bold>here</bold>...\n --boundary42--\n
Waarom kopieer je niet ergens een module/klasse vandaan die de MIME voor je aanmaakt?
Ik probeer met een bash scriptje de mails te versturen. Welke module (bedoel je een RPM?) zou ik hiervoor moeten gebruiken dan?Verwijderd schreef op woensdag 27 augustus 2008 @ 16:32:
[...]
Met de content type moet je ook de boundary opgeven...
Waarom kopieer je niet ergens een module/klasse vandaan die de MIME voor je aanmaakt?
Verwijderd
Ik dacht aan een module voor een script taal. Maar vanuit bash kan je een programma gebruiken zoals iemand hierboven al zei.. mime-construct. Je kan daarmee een multipart mime generen met je diagram er in.smeerbartje schreef op woensdag 27 augustus 2008 @ 16:51:
[...]
Ik probeer met een bash scriptje de mails te versturen. Welke module (bedoel je een RPM?) zou ik hiervoor moeten gebruiken dan?
Lukt niet, ik gebruik als server een 'SME" distro. Hierop kan ik mime-construct niet installeren. Maar in principe zou ik toch gewoon zelf een goed mailtje op moeten kunnen stellen?
Verwijderd
ja.smeerbartje schreef op woensdag 27 augustus 2008 @ 21:36:
Lukt niet, ik gebruik als server een 'SME" distro. Hierop kan ik mime-construct niet installeren. Maar in principe zou ik toch gewoon zelf een goed mailtje op moeten kunnen stellen?
Omdat je de MIME standaard niet kent is het makkelijker om het mailtje ergens mee te generen. Je zou bijvoorbeeld met een MUA e.g. outlook, thunderbird, mutt een mailtje kunnen opstellen en vervolgens het bericht letterlijk kopieren.
Je kan dit bericht vervolgens versturen met bijvoorbeeld netcat.
e.g.
nc jemailserver 25 < bericht
een standaard mail bericht ziet er als volgt uit
code:
1
2
3
4
5
| mail from:<user@host> rcpt to:<user@host> data je mime zut . |
op sommige mail servers is het nodig om de lijn te eindigen met \r\n
Heb even in mijn bash verzameling gekeken, en ik heb een scriptje wat HTML mail verstuurd 
Hier zijn de headers die meegegeven worden + de inhoud:
Als ik deze tekst in een variabele naar "sendmail" pipe, krijg ik (in outlook) een HTML mailtje.
Hier zijn de headers die meegegeven worden + de inhoud:
code:
1
2
3
4
5
6
7
8
| MIME-Version: 1.0 Content-Type: text/html; charset=iso-8859-1 Content-Disposition: inline To: Mijn email adres Subject: De volgende backups zijn mislukt <HTML><body BGCOLOR="FFFFFF"> Er zijn <b>GEEN</b> backups in de log gevonden die mislukt zijn </body></html> |
Als ik deze tekst in een variabele naar "sendmail" pipe, krijg ik (in outlook) een HTML mailtje.
We are pentium of borg. Division is futile. You will be approximated.
Dank voor je bericht! Ik heb een bestand aangemaaakt met de inhoud van jouw voorbeeld (uiteraard wel met mijn goede email adres). Dit bestand probeer ik te mailen met het volgende commando:Rainmaker schreef op vrijdag 29 augustus 2008 @ 12:37:
Heb even in mijn bash verzameling gekeken, en ik heb een scriptje wat HTML mail verstuurd
Hier zijn de headers die meegegeven worden + de inhoud:
code:
1 2 3 4 5 6 7 8 MIME-Version: 1.0 Content-Type: text/html; charset=iso-8859-1 Content-Disposition: inline To: Mijn email adres Subject: De volgende backups zijn mislukt <HTML><body BGCOLOR="FFFFFF"> Er zijn <b>GEEN</b> backups in de log gevonden die mislukt zijn </body></html>
Als ik deze tekst in een variabele naar "sendmail" pipe, krijg ik (in outlook) een HTML mailtje.
code:
1
| cat test.msg |sendmail |
Dit werkt echter niet. De mail komt niet binnen en er verschijnt geen foutmelding. Zou dit zo moeten werken? Je zegt dat je het in een parameter zet, maar dit moet toch niet zo erg veel verschillen met de manier waarop ik dit nu doe? (sorry voor m'n linux-noob-heid)
het zou inderdaad niet uit mogen maken of die tekst nu vanuit een var of vanuit een cat de pipe in wordt gejaagd.
Ik gok dat sendmail niet goed geconfigureerd is op je server. kijk even in /var/log/mail(log) en in /etc/mail.
als ik deze output naar "mail" pipe, krijg ik het mailtje wel als plain text. blijkbaar een belangrijk verschil tussen mail en sendmail.
ik zou beginnen met een smarthost te defineren in sendmail.mc
*edit:
simpeler; je piped het wel naar "sendmail (emailadres)" he?
sendmail is niet zo slim dat ie de ontvanger uit de headers haalt..
Ik gok dat sendmail niet goed geconfigureerd is op je server. kijk even in /var/log/mail(log) en in /etc/mail.
als ik deze output naar "mail" pipe, krijg ik het mailtje wel als plain text. blijkbaar een belangrijk verschil tussen mail en sendmail.
ik zou beginnen met een smarthost te defineren in sendmail.mc
*edit:
simpeler; je piped het wel naar "sendmail (emailadres)" he?
sendmail is niet zo slim dat ie de ontvanger uit de headers haalt..
[ Voor 14% gewijzigd door Rainmaker op 29-08-2008 23:26 ]
We are pentium of borg. Division is futile. You will be approximated.
Rainmaker, je bent mijn held! Inderdaad, ik dacht dat sendmail wel zo slim zou zijnRainmaker schreef op vrijdag 29 augustus 2008 @ 23:23:
het zou inderdaad niet uit mogen maken of die tekst nu vanuit een var of vanuit een cat de pipe in wordt gejaagd.
Ik gok dat sendmail niet goed geconfigureerd is op je server. kijk even in /var/log/mail(log) en in /etc/mail.
als ik deze output naar "mail" pipe, krijg ik het mailtje wel als plain text. blijkbaar een belangrijk verschil tussen mail en sendmail.
ik zou beginnen met een smarthost te defineren in sendmail.mc
*edit:
simpeler; je piped het wel naar "sendmail (emailadres)" he?
sendmail is niet zo slim dat ie de ontvanger uit de headers haalt..
Pagina: 1