Verzend E-mail vanuit script

Doel

Verzenden van een E-mail vanuit een script dat wordt uitgevoerd door de Taakplanner van Synology Diskstation.

Aanleiding/overwegingen

  • In onderstaand plaatje is een script te zien dat via de Taakplanner wordt uitgevoerd. (Het wordt elke 10 minuten uitgevoerd, start een bash shell en kijkt of een semaphore file ‘doehet.sem’ bestaat. Zo nee, dan is het de uitvoering klaar. Zo ja, dan wordt het bestandje verwijderd en wordt het script ‘Doehet.sh’ uitgevoerd. Uitvoer van dit script kan dus worden getriggerd door het (lege) bestandje ‘doehet.sem’ te plaatsen. Bijvoorbeeld met het commando touch doehet.sem
  • De taakplanneer van Synology kan een E-mail zenden met alle uitvoer details (zie de eerste gemarkeerde checkbox hieronder), maar dat is niet altijd wat je wilt.
  • Ook is het mogelijk alleen een E-mail te ontvangen wanneer er zaken fout gaan (zie de tweede checkbox).
  • Soms is het handig om geïnformeerd te worden wanneer een script gereed is. Vooral als het om een langlopend script gaat.
  • Ook geeft mailing vanuit een script de mogelijkheid om gelogde gegevens te verzenden en zo op een presenteerblaadje aan te bieden.
  • Het geeft de mogelijkheid om selectief te bepalen wat er via de mail wordt verzonden.

Voorbereiding

  • Bij het verzenden van de mail, worden de instellingen voor het verzenden van mail gebruikt, zoals ingesteld bij Configuratiescherm – Melding – E-mail.
  • Maak een taak aan en neem de code voor de mailing op in het door de gebruiker gedefinieerde script of in een script wat van daaruit wordt aangeroepen.

Uitvoering

#!/bin/bash
MYNAME=${0##*/}
LOGFILE="${MYNAME}.log" 

# Start to do something
# Script with 20 meters of code and then at the end....

log=$(< $LOGFILE)

to="receipient@anotherdomain.com"
cc=""
bcc="youremail@yourdomain.com"
from="yourscript@yourdomain.com"
replyto="youremail@yourdomain.com"
subject="$MYNAME is ready"
message="Test to check the PHP Mail functionality.
"
message="${message}
${log}"
headers="From:$from
cc:$cc
Bcc:$bcc
Reply-To:$replyto"
/usr/bin/php -r "mail('$to', '$subject', '$message', '$headers');"
######## THATs All ########################################

Toelichting bij de regels

  • 1: Het aangeroepen script is hier een bash script
  • 2: De naam van het script wordt in variabele MYNAME opgeslagen.
  • 3: Laten we aannemen dat het script zijn acties wegschrijft in een logbestand, dat we aanroepen met $LOGFILE
  • 5-6: Dan volgt de inhoud van het script.
  • 8: We lezen het logbestand in de variabele $log.
  • 10: Stop de geadresseerde in variabele $to.
  • 11: Stop eventuele cc in variabele $cc.
  • 12: Stop eventuele een bcc in variabele $bcc.
  • 13: Stop de afzender in variabele $from.
  • 14: Mail verzenden namens NO-Reply@yourdomain.com is een grote blijk van klantonvriendelijkheid. Je laat de geadresseerde zitten met vragen en maakt duidelijk dat je niet wenst dat er op de mail wordt gereageerd. Zoek het zelf maar uit!
    Hoewel het script de mail automatisch verzend wil ik de ontvanger de gelegenheid geven te reageren en geef daarom een reply-to adres op.
  • 15: Stop het onderwerp in de variabele $subject.
  • 16: Start de inhoud van het bericht in de variabele $message.
  • 17: Door de afsluitende aanhalingstekens op de volgende regel te zetten, ontstaat er ook een nieuwe regel in het bericht.
  • 18-19: Hier wordt de variabele $log toegevoegd aan de aangemaakte $message.
  • 20-23: Stel de variabele $headers samen. Daarin komen (voor zover gebruikt): From, cc, bcc en reply-to. Merk op dat de string uit meerdere regels bestaat en wordt afgesloten met dubbele aanhalingstekens op regel 17.
  • 24: PHP is beschikbaar voor het verzenden van dit samengestelde bericht. De mail functie wordt aangeroepen, waaraan geadresseerde, onderwerp, berichtinhoud en de in de header geplaatste adressen worden doorgegeven.
  • 25: That’s All.

Resultaat

  • Als alles goed is verlopen ontvang je van het script een mailtje op alle ingevulde adressen en kun je daarop reageren met reply-to: youremail@yourdomain.com.

Tips

  • Voor eventueel debuggen t.a.v. het script ga je natuurlijk in eerste instantie vanuit de shell omgeving aan de gang.
  • Voor verder debuggen t.a.v. de uitvoer, kun je spelen met de checkboxjes bij de taakinstelling. (zie bovenstaand plaatje)
  • Zie php.net voor verdere uitleg over de php mail functie.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Deze site gebruikt Akismet om spam te verminderen. Meer informatie over hoe uw reactiegegevens worden verwerkt.