Administrare server open source

Platforma de hosting cu software liber, gratuit, open source.

Comentariile sunt închise pentru Mail din linia de comanda

Exista situatii in care e util, sau cel putin comod, sa trimitem un mesaj din linia de comanda. Ca sa dau cateva exemple, cand lucram pe un sistem in linia de comanda si gasim ceva interesant de care nu ne putem ocupa in momentul respectiv e mai comod sa trimitem un mail cu mesajul „Trebuie sa ma uit la functionalitatea X cand am timp.” decat sa deschidem Thunderbird sau un Gmail si sa compunem mesajul. Bineinteles, asta tine doar de comoditate. Exista situatii care tin strict de functionarea aplicatiilor. De exemplu, trimitem un mesaj din linia de comanda pentru a vedea daca MTA-ul functioneaza corect pentru ca asa nu depindem de modul in care firewallul trateaza mesajele care vin din exterior si implicit putem izola problema. De asemenea, aceleasi cunostinte le putem aplica pentru a implementa o metoda rapida de a trimite un mesaj e-mail dintr-un script scris in bash sau alt limbaj care in mod implicit nu are librarii pentru livrarea mesajelor e-mail.

Pentru linia de comanda exista utilitare speciale cum ar fi pine sau xmail care ne ofera si o metoda de a gestiona mesajele primite, dar pe noi ne intereseaza doar livrarea asa ca vom folosi comanda mail, care in sine este un client de mail complex, sau comanda sendmail care e folosita de majoritatea aplicatiilor pentru a trimite mesaje.

Ca sa folosim comanda mail pentru a trimite mesaje trebuie sa o lansam in executie oferind ca parametru adresa e-mail la care dorim sa fie livrat mesajul. Dupa ce am dat comanda ni se cere subiectul mesajului si mesajul. Dupa ce am terminat mesajul introducem pe o linie goala caracterul punct ( . ) pentru ca aplicatia sa stie ca am terminat si mesajul poate fi livrat:

[sergiu@vps ~]$ mail nospam@exemplu.ro
Subject: Test mail
Mesaj trimis din linia de comanda cu mail.
.
EOT
[sergiu@vps ~]$

In cateva secunde mesajul va fi livrat. Dupa cum puteti vedea e o metoda simpla si in mai putin de 30 de secunde putem trimite un mesaj – asta fiind si motivul pentru care imi place sa folosesc mesajele e-mail ca reminder 🙂

A doua metoda de a trimite mesaje este folosind comanda sendmail. Utilizarea sendmail nu este mai complicata decat utilizarea comenzii mail. Diferenta consta in faptul ca trebuie sa adaugam manual headerele mesajului:

[sergiu@vps ~]$ sendmail nospam@exemplu.ro
Date: Mon Aug 31 12:39:06 EEST 2009
From: nospam@exemplu.ro
To: nospam@exemplu.ro
Subject: Test sendmail
 
Mesaj trimis din linia de comanda cu sendmail.
.
[sergiu@vps ~]$

Spre deosebire de comanda mail care ne cere doar subiectul aici trebuie sa introducem si campurile „Date:„, „From:„, „To:„, „Subject:” exact ca si cum ar face parte din mesajul care dorim sa il trimitem. E important sa scrie corect headerele pentru ca altfel exista riscul ca mesajul sa nu poata fi expediat.

Spre deosebire de expeditor si destinatar, care ii stim inainte de a trimite mesajul, aici apare si campul „Date:” care reprezinta data expedierii mesajului. Cel mai simplu mod de a afla data expedierii, care trebuie sa fie cat mai aproape de cea reala in cazul unui debug, este sa folosim comanda date:

[sergiu@vps ~]$ date
Mon Aug 31 12:39:06 EEST 2009
[sergiu@vps ~]$

Dupa cum spuneam, comanda sendmail poate fi folosita pentru a implementa rapid expedierea de mesaje intr-un limbaj care nu are o librarie dedicata pentru asa ceva. Pentru exemplificare folosim un script scris in bash:

#!/bin/bash
 
# Data curenta
DATA=`date +%Y%m%d`
 
# Datele pentru expediere
EXPEDITOR='[email protected]'
DESTINATAR='[email protected]'
SUBIECT='Test bash'
MESAJ='Mesaj test trimis din bash.'
 
# Fisier temporar
TMP=/tmp/sendmail.$$
 
# Pregatim fisierul temporar
echo "From: $EXPEDITOR" >  $TMP
echo "To: $DESTINATAR" >> $TMP
echo "Reply-to: $EXPEDITOR" >> $TMP
echo "Subject: $SUBIECT" >> $TMP
echo "" >> $TMP
echo "$MESAJ" >> $TMP
echo "." >> $TMP
 
# Trimitem mesajul
/bin/cat $TMP | /usr/sbin/sendmail -t
 
# Stergem fisierul temporar
/bin/rm $TMP

Scriptul de mai sus va face exact acelasi lucru care l-am face si noi daca am trimite manual mesajul folosind comanda sendmail. Dupa cum va puteti da seama in acelasi mod poate fi implementata solutia de fata si in alte limbaje cum ar fi PHP, Python sau Perl.

Mail

Comments are closed.