Shell script met template mail probleem.

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • belrpr
  • Registratie: Februari 2010
  • Laatst online: 01-10 10:30
Ik ben bezig om een back-up script te schrijven.
Als ik het template bestand verstuur via cat mail.html | sendmail -t dan komt het perfect aan.
Lees ik het bestand mail.html in via
code:
1
2
3
4
while read line
do
    mail+="$line \n"
done <mail.html

en schrijf ik het dan weg naar sendmail:
code:
1
echo -e "$mail" | sendmail -t

Dan komt een blanco e-mail aan.

Reden dat ik de file wil in lezen is om een aantal variabelen te laten vervangen.
Bv backup al dan niet geslaagd, starttijd, eindtijd.

Wat ik wel opmerk is dat de html insprongen weg zijn maar voor html zou dit geen verschil mogen geven.
Elke input is welkom!

Lees meer: Template html e-mail verzenden via bashscript http://www.webhostingtalk...script.html#ixzz3dnK0omPj

Acties:
  • 0 Henk 'm!

  • Kees
  • Registratie: Juni 1999
  • Laatst online: 01-10 16:13

Kees

Serveradmin / BOFH / DoC
Waarom doe je het niet in een oneliner met bijvoorbeeld sed 's/[start]/${start}/' mail.html | sendmail -t

En wat is de output van 'cat mail.html' en de output van je script waarbij je alleen de 'echo -e $mail' doet?

"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan


Acties:
  • 0 Henk 'm!

  • belrpr
  • Registratie: Februari 2010
  • Laatst online: 01-10 10:30
Omdat hierdoor je steeds een file moet schrijven.
Vind het nogal onlogisch om de template eerst te dupliceren. Het duplicaat dan aan te passen. Dit dan te verzenden en dan het duplicaat weer te verwijderen.

Acties:
  • 0 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 07:06
Het doel is niet om letterlijk Kees zijn idee op te volgen, maar om te begrijpen wat voor een andere oplossingen je hebt voor hetzelfde probleem. Of je nu een zoeken / vervangen doet in een bestand met sed of op een variabele in bash zelf:
code:
1
2
3
~ # MAIL="aap [naam] mies [naam]"
~ # echo ${MAIL//\[naam\]/curlymo};
aap curlymo mies curlymo


Of desnoods in lijn met Kees zijn voorstel:
code:
1
2
3
~ # MAIL="aap [naam] mies [naam]"
~ # echo -e "$MAIL" | sed -e 's/\[naam\]/curlymo/g'
aap curlymo mies curlymo

[ Voor 19% gewijzigd door CurlyMo op 22-06-2015 16:06 ]

Sinds de 2 dagen regel reageer ik hier niet meer


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 21:30

Hero of Time

Moderator LNX

There is only one Legend

belrpr schreef op maandag 22 juni 2015 @ 15:53:
Omdat hierdoor je steeds een file moet schrijven.
Vind het nogal onlogisch om de template eerst te dupliceren. Het duplicaat dan aan te passen. Dit dan te verzenden en dan het duplicaat weer te verwijderen.
Als je sed gebruikt, wordt de output standaard naar stdout gestuurd, niet een nieuw bestand. Dus je maakt geen duplicaat, tenzij je stdout als een bestand hanteert. Er is eigenlijk niets anders aan wat Kees doet, en wat jij doet met 'cat mail.html'. Enige verschil is dat er bepaalde waardes tussendoor worden aangepast.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • belrpr
  • Registratie: Februari 2010
  • Laatst online: 01-10 10:30
Hero of Time schreef op maandag 22 juni 2015 @ 16:24:
[...]

Als je sed gebruikt, wordt de output standaard naar stdout gestuurd, niet een nieuw bestand. Dus je maakt geen duplicaat, tenzij je stdout als een bestand hanteert. Er is eigenlijk niets anders aan wat Kees doet, en wat jij doet met 'cat mail.html'. Enige verschil is dat er bepaalde waardes tussendoor worden aangepast.
Wist ik niet. Zal dit dan later nog kunnen gebruiken om de variabelen te veranderen.
Mijn probleem zit hem ook niet in de variabelen maar het correct uitlezen van het template bestand en dit dan opnieuw correct weg te schrijven.

Mijn eerste probleem dat ik had is dat sendmail een aantal vaste lijnen vereist:
code:
1
2
3
4
5
6
7
From: tweakers@tweakers.net
Subject: USB Backup OK
To: myadresss@gmail.com
Content-Type: text/html
MIME-Version: 1.0

<HTML>

Dat heb ik opgelost door lijn per lijn te lezen en zelf een \n toe te voegen (zie eerste post).
Ik heb eens de 2 bestanden op onedrive geplaatst
http://1drv.ms/1H8Xoby

mailhtml is het template bestand. Mailhtml2 is de output pipen naar dit bestand + vervangen van %DATETIME%.

Als ik cat mailhtml2 | sendmail -T doe dan krijg ik een mail maar met blanco inhoud. Met cat mailhtml | sendmail -T heb ik wel html in de body.

Mijn laatste test heb ik het volgende geprobeerd:
sed 's/%DATETIME%/$huidigetijd/g' mailhtml | sendmail -t

Dan krijg ik dit:
http://1drv.ms/1I9L2P8
html wordt niet geparsed.

[ Voor 6% gewijzigd door belrpr op 22-06-2015 17:15 ]


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 21:30

Hero of Time

Moderator LNX

There is only one Legend

Je weet dat je via parameters die header kan laten maken, he? Check de manpage maar eens. Met -s doe je subject, -r is from of reply-to en het aan adres doe je gewoon als laatste optie meegeven. Kijk iig eens in je postfix log wat er langs komt en check ook de broncode van de mail (show all headers, of hoe 't bij jou ook mag heten).

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • belrpr
  • Registratie: Februari 2010
  • Laatst online: 01-10 10:30
Thx zal ik eens checken.

[ Voor 82% gewijzigd door belrpr op 22-06-2015 20:23 ]

Pagina: 1