Bash mailen van grafisch object in body

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • smeerbartje
  • Registratie: September 2006
  • Laatst online: 16-10 16:07
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?

Acties:
  • 0 Henk 'm!

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Als je het "niet echt als attachment" wil, hoe wil je het dan wel? :)

Acties:
  • 0 Henk 'm!

  • daniëlpunt
  • Registratie: Maart 2004
  • Niet online

daniëlpunt

monkey's gone to heaven

Je kunt het omzetten naar een base64 afbeelding als je het niet echt als bijlage wilt toevoegen. :)

Acties:
  • 0 Henk 'm!

  • BarthezZ
  • Registratie: Juli 2004
  • Niet online

BarthezZ

anti voetbal en slechte djs!

Plaatje ergens naar toe uploaden en het mailtje sturen als html mail met een <img src="http://linknaarplaatje"> in de body?

Acties:
  • 0 Henk 'm!

  • smeerbartje
  • Registratie: September 2006
  • Laatst online: 16-10 16:07
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?

Acties:
  • 0 Henk 'm!

Verwijderd

smeerbartje 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?
RFC 822, 2045 en 2046

Acties:
  • 0 Henk 'm!

  • Rainmaker
  • Registratie: Augustus 2000
  • Laatst online: 14-07-2024

Rainmaker

RHCDS

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)

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.


Acties:
  • 0 Henk 'm!

  • smeerbartje
  • Registratie: September 2006
  • Laatst online: 16-10 16:07
Cool, thanks.. ik ga er vanavond mee aan de slag. Ik vind het mooier om het plaatje te embedden in het mailtje; puur gevoelsmatig :).

Acties:
  • 0 Henk 'm!

  • vanaalten
  • Registratie: September 2002
  • Laatst online: 17:09
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.

Acties:
  • 0 Henk 'm!

  • Rainmaker
  • Registratie: Augustus 2000
  • Laatst online: 14-07-2024

Rainmaker

RHCDS

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.
He, die is leuk, die kende ik nog niet :)
http://search.cpan.org/~r...struct-1.9/mime-construct

We are pentium of borg. Division is futile. You will be approximated.


Acties:
  • 0 Henk 'm!

  • smeerbartje
  • Registratie: September 2006
  • Laatst online: 16-10 16:07
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.
Maar hoe verstuur je hiermee een mailtje met een plaatje in de body dan? Volgens mij is het enkel mogelijk als attachment toch?

Acties:
  • 0 Henk 'm!

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
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 :)

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

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?
inline attachment?

Acties:
  • 0 Henk 'm!

  • daniëlpunt
  • Registratie: Maart 2004
  • Niet online

daniëlpunt

monkey's gone to heaven

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 :)
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. :)

Acties:
  • 0 Henk 'm!

  • smeerbartje
  • Registratie: September 2006
  • Laatst online: 16-10 16:07
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. :)
Serieus? Werkt dit? Hoe vet!!

Acties:
  • 0 Henk 'm!

  • smeerbartje
  • Registratie: September 2006
  • Laatst online: 16-10 16:07
Zojuist even wat geprobeerd, maar ik kom er niet uit. Ik heb een bestand genaamt "test.msg" met de volgende inhoud:

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:

Afbeeldingslocatie: http://nijmegen.lommers.org/public/emailtest.jpg

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:

Afbeeldingslocatie: http://nijmegen.lommers.org/public/emailtest2.jpg

[ Voor 11% gewijzigd door smeerbartje op 26-08-2008 20:26 ]


Acties:
  • 0 Henk 'm!

  • smeerbartje
  • Registratie: September 2006
  • Laatst online: 16-10 16:07
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

Acties:
  • 0 Henk 'm!

Verwijderd

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
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?

Acties:
  • 0 Henk 'm!

  • smeerbartje
  • Registratie: September 2006
  • Laatst online: 16-10 16:07
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?
Ik probeer met een bash scriptje de mails te versturen. Welke module (bedoel je een RPM?) zou ik hiervoor moeten gebruiken dan?

Acties:
  • 0 Henk 'm!

Verwijderd

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?
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.

Acties:
  • 0 Henk 'm!

  • smeerbartje
  • Registratie: September 2006
  • Laatst online: 16-10 16:07
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?

Acties:
  • 0 Henk 'm!

Verwijderd

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?
ja.

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

Acties:
  • 0 Henk 'm!

  • Rainmaker
  • Registratie: Augustus 2000
  • Laatst online: 14-07-2024

Rainmaker

RHCDS

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.

We are pentium of borg. Division is futile. You will be approximated.


Acties:
  • 0 Henk 'm!

  • smeerbartje
  • Registratie: September 2006
  • Laatst online: 16-10 16:07
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.
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:

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)

Acties:
  • 0 Henk 'm!

  • Rainmaker
  • Registratie: Augustus 2000
  • Laatst online: 14-07-2024

Rainmaker

RHCDS

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..

[ Voor 14% gewijzigd door Rainmaker op 29-08-2008 23:26 ]

We are pentium of borg. Division is futile. You will be approximated.


Acties:
  • 0 Henk 'm!

  • smeerbartje
  • Registratie: September 2006
  • Laatst online: 16-10 16:07
Rainmaker 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..
Rainmaker, je bent mijn held! Inderdaad, ik dacht dat sendmail wel zo slim zou zijn :). Het werkt nu. Morgen even proberen om iets van een inline plaatje te includen. Nu eerst de stad in... 't is verdomme al veel te laat. Again, thanks!
Pagina: 1