Du er her: Hjem --> Annet --> Blog --> Synology tips

Sende email fra script

Et script som går jevnlig, for eksempel et daglig backup-script, vil gjerne sende email med statusinformasjon. Dette er en enkel måte for admin å varsles dersom backupen feiler.

Debian bash-script: ssmtp

ssmtp beskrives som en enkel MTA (Mail Transport Agent). ssmtp fungerer egentlig som en mail klient. Den kan ikke rute, men settes opp med adressen til en MTA (SMTP server) som den videresender email til. Den er enkel å installere, konfigurere og bruke, og tar ikke mye plass på harddisken. Dette er bra egenskaper når vi behøver et program bare for å kunne sende email fra et script.

ssmtp finnes for Linux.
Finne ut om ssmtp allerede er installert: dpkg -s ssmtp
Installering på Debian: apt-get install ssmtp
ssmtp har to konfigurasjonsfiler, revaliases og ssmtp.conf, i katalogen /etc/ssmtp.
Vi ønsker i første omgang å lage en så enkel konfigurasjon som mulig, der vi får sendt en statusemail fra et backup script. Mailen sendes fra en gratis gmail konto.

ssmtp.conf for a gmail konto:

#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
#root=postmaster
#
# The place where the mail goes. The actual machine name is required no
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=smtp.gmail.com
#NB: this did not work with :port. smtp.gmail.com:465 and
#smtp:gmail.com:587 did not work.
#Telnet revealed that gmail smtp listens at port 587, not 465.
#
# Where will the mail seem to come from?
#rewriteDomain=
#
# The full hostname
#hostname=testdebian.example.com
#
# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
FromLineOverride=YES
#
#UseTLS=YES
UseSTARTTLS=YES
#
AuthUser=testdebianuser@gmail.com
AuthPass=testdebianuser-gmail-pw
AuthMethod=LOGIN
#

For at det skal fungere med gmail må vi konfigurere gmail kontoen slik at det åpnes opp for "Less secure apps". "Some apps and devices use less secure sign-in technology, which makes your account more vulnerable. You can turn off access for these apps, which we recommend, or turn on access if you want to use them despite the risks."

Filen revaliases behøver ingen konfigurering for vårt enkle tilfelle.
Vi kan sende email med:
echo "Dette er meldingsteksten" | ssmtp abc@example.com
Meldingen mottas og meldingsteksten er korrekt. Men From: er root, og Subject: er tomt.
echo "From:Test Bruker\nDette er meldingsteksten" | ssmtp abc@example.com
Nå er avsender From:Test Bruker\nDette er meldingsteksten. Og det er ingen meldingstekst... Fortsatt litt uklart hvordan dette skal fungere.
Vi kan også sende email med:
cat msg.txt | ssmtp abc@example.com
cat msg1.txt msg2.txt | ssmtp abc@example.com,def@example.com

Filen msg.txt

From: Test User <testdebianuser@gmail.com>
Subject: Backup failed! This is the subject line
This is the message. Server is down and backup is not running!
Contact system administrator.

Nå er emailen helt riktig når den mottas - både From:, Subject:, og meldingsteksten.

Synology bash-script: ssmtp eller sendEmail

ssmtp

På min Synology med DSM 6.2 var ssmtp installert fra fabrikken, i katalogen /usr/bin. Konfigurasjonsfilene ligger under /etc/ssmtp/. Altså akkurat samme oppsett som for Debian (se ovenfor). Jeg kunne kopiere min ssmtp.conf fil fra Debian og ned på Synologyen, og det fungerte å sende email fra kommandolinjen.

sendEmail

Linux versjonen av sendEmail er et Perl script (se Referanser). Synology kommer ikke med Perl fra fabrikken. Men Perl er mulig å installere. Da er det også mulig å bruke sendEmail scriptet.

PHP mail

Synology kommer med PHP fra fabrikken. Man kan bruke mail-funksjonen her (se referanse nedenfor - Figured out how to send email without installing extra pkgs). SMTP må konfigureres i Control Panel - Notifications. mail-funksjonen bruker ssmtp - så da er det egentlig enklere å bruke ssmtp direkte, spør du meg.

Windows cmd-script: sendEmail

Se Referanser for hvor sendEmail kan lastes ned. Det er både en nix (UNIX, Linux, Mac...) versjon, og en Windows versjon.

Eksempel på hvordan sendEmail kan brukes i et command-script:

date /t>%scriptpath%scriptdate.txt
set /p d=<%scriptpath%scriptdate.txt
set dt=%d%%time%
echo Dagens dato dt=%dt%>>%log%
..
create-filserver-backup
set /a el=%ERRORLEVEL%
echo Backup completed, backupstatus errorlevel el=%el%>>%log%
..
set emf="Psdigital Sysadm | Filserver-backup <psdigitalsysadm123789@gmail.com>"
set emto="Ola Kunde <ola@example.com>, Hilde Klient <hilde@example.com>"
set sepath=C:\myprog\03sendEmail-v156\
if %el% EQU 0 (
set subj=filbup.bat on Dellserver - OK - %dt%
) else (
set subj=filbup.bat on Dellserver - ERROR - %dt%
)
%sepath%sendEmail.exe -f %emf% -t %emto% -u "%subj%" -o message-file=%log% -s smtp.gmail.com:587 -xu psdigitalsysadm123789@gmail.com -xp gmailpassord123 -l %scriptpath%sendemail.log -v -o tls=yes
set /a el=%ERRORLEVEL%
echo Sende email, errorlevel el=%el%>>%log%

Cygwin bash-script: ssmtp, msmtp

Cygwin er software som gir UNIX funksjonalitet på en Windows-maskin. Cygwin er laget som et program (cygwin dll) som ligger mellom UNIX programmene og Windows API. Dermed kan UNIX-programmer uendret kjøre på en Windows maskin. For noen UNIX programmer er det ikke mulig å gjøre det på denne måten, og da må koden skrives om før den kan kompileres for Windows.

Vi har et bash backupscript på en Windows 10 maskin, som tar backup av fildata. Bash er en UNIX script tolker som følger med Cygwin. På denne måten kan vi få vårt bash-script til å kjøre på en Windows maskin og ta backup av data der.

ssmtp

Vi kan bruke ssmtp til å sende email fra scriptet.

På Windows er Cygwin programmene og bibliotekene typisk installert under c:\cygwin64\. Cygwin installasjonsprogrammet og oppdateringsprogrammet er typisk c:\cygwin64setup\setup-x86_64.exe. Min ganske vanilla Cygwin hadde ikke ssmtp installert. Så vi starter oppdateringsprogrammet for å oppdatere Cygwin installasjonen med ssmtp. I pakke oversikten i oppdateringsprogrammet er det en kategori Mail, som inneholder mange programmer, blant annet

Vi installerer ssmtp.

Etter installasjonen fungerer det ikke å bare skrive ssmtp - systemet finner ikke programmet. Ved å gjøre et søk find /usr/bin -iname *ssmtp* samt tilsvarende i andre kataloger, finner vi:
/usr/bin/ssmtp-config
/bin/ssmtp-config
/usr/sbin/ssmtp.exe
/usr/share/doc/ssmtp
/usr/share/doc/ssmtp/ssmtp.conf
/usr/share/man/man8/ssmtp.8.gz
/usr/bin/ssmtp-config

De to konfigurasjonsfilene ssmtp.conf og revaliases skal ligge i katalogen /etc/ssmtp. Akkurat som på Debian og Synology, se ovenfor. Vi kunne bare kopiere ssmtp.conf og revaliases fra en av disse maskinene inn her. Da fungerte det å sende email med:

echo dette er en melding | /usr/sbin/ssmtp abc@example.com

Eller vi kunne gjøre

cat msg.txt | /usr/sbin/ssmtp abc@example.com

Altså akkurat som på Debian og Synology.

msmtp

Referanser

  1. Debian ssmtp
    https://wiki.debian.org/sSMTP
  2. sendEmail download page
    http://caspian.dotconf.net/menu/Software/SendEmail/
  3. https://forum.synology.com/enu/viewtopic.php?f=32&t=79334
    Figured out how to send email without installing extra pkgs
  4. https://www.synology.com/en-global/dsm/packages/Perl
    Add-on Packages: Perl. Perl is an object-oriented programming language which can be used for CGI scripts, system administration, network programming and other applications. It has features that can ease the task of programming, including regular expressions and strong string manipulation.
  5. Sending email from a Linux shell script
    https://stackoverflow.com/questions/5155923/sending-a-mail-from-a-linux-shell-script
  6. Cygwin and ssmtp
    https://wiki.xdroop.com/space/cygwin/ssmtp
  7. msmtp - light SMTP client with support for server profiles
    https://wiki.debian.org/msmtp
Telefon: 67 20 71 21 / 92 60 51 57 Logo-tema