inviare mail da script su relay puntuale in smtps

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
ZeroUno
Staff
Staff
Messaggi: 4948
Iscritto il: ven giu 02, 2006 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

inviare mail da script su relay puntuale in smtps

Messaggioda ZeroUno » gio ott 27, 2011 15:41

Salve.

Ho dei sistemi da cui devo inviare mail da script.
Queste macchine non hanno accesso a internet ma ho un relay interno a cui farle puntare.
Il problema però è che questo funziona solo in ssl su porta 465

Una mail normale la invio con 'mail' o 'mailx', ma questi non mi consentono di specificare il mail server.
Allora modifico sendmail.cf mettendo 'DSmiomailserver'
ma non riesco a specificare la porta e, tantomeno, a specificargli che deve andare in ssl (non starttls)
o meglio
con mailx di slackware sembra che si può (con qualche parametro aggiunto con -S)
ma il server che ho è redhat e la versione di mailx presente non accetta questo parametro.

Come posso fare?
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Avatar utente
krisis
Linux 3.x
Linux 3.x
Messaggi: 1120
Iscritto il: mar gen 25, 2005 0:00
Distribuzione: debian
Località: Roma

Re: inviare mail da script su relay puntuale in smtps

Messaggioda krisis » gio ott 27, 2011 15:48

Soluzione facile e veloce :
Installi e configuri ssmtp sulle macchine dalle quali devi spedire le mail.
Soluzione meno facile e veloce :
Installi e configuri un server smtp su ogni macchina.

Avatar utente
masalapianta
Iper Master
Iper Master
Messaggi: 2775
Iscritto il: lun lug 25, 2005 0:00
Nome Cognome: famoso porco
Kernel: uname -r
Desktop: awesome
Distribuzione: Debian
Località: Roma
Contatta:

Re: inviare mail da script su relay puntuale in smtps

Messaggioda masalapianta » gio ott 27, 2011 16:26

teoricamente, visto che le mail le devi inviare da script, potresti anche mandare comandi smtp e mail in pipe ad openssl:

echo -e "EHLO `hostname`\nMAIL FROM: blablabla" | openssl s_client -connect ipdelrelay:465 -quiet

tieni comunque conto che così invii "alla cieca", non hai riscontri sugli status code che ti ritorna il relay per tutto quello che gli mandi.

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 4948
Iscritto il: ven giu 02, 2006 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: inviare mail da script su relay puntuale in smtps

Messaggioda ZeroUno » gio ott 27, 2011 17:39

Alla fine me lo sono costruito da solo.
Se può servirvi:

Codice: Seleziona tutto

#!/bin/bash


#### DEFAULT VALUE

DOMAIN=${DOMAIN:-mydomain} # will be overwritten by the -E parameter
RELAY=${RELAY:-smtps://myrelay:465}  # will be overwitten by the -R parameter

#### DOES NOT TOUCH

function usage(){
echo "
        Usage:
                $0 [-s <subject>] [-c <cc-address>] [-b <bcc-address>] [-r <from-address>] [-R <relay>] [-E <EHLO>] [-H <header: value>] [-I <messageid>] <to-address> <to-address> ...

        -s <subject>    Specify subject
        -b <address>    Send blind carbon copies to list.  List should be a comma-separated list of names.
        -c <address>    Send carbon copies to list of users.
        -r <address>    Sets the From address.
        -R <relay>      Specify the relay host in format smtp://ip:port or smtps://ip:port
        -I <messageid>  Force message id
        -E <EHLO>       Set EHLO (host.domain)
        -H <header: value> Add an header. To specify two header use another -H parameter
"
}
while [ $# -gt 0 ];do
        case $1 in
                "-s") SUBJECT="$2";shift 2;;
                "-b") BCC=$(echo $2|sed 's/,/ /g');shift 2;;
                "-c") CC=$(echo $2|sed 's/,/ /g');shift 2;;
                "-r") FROM="$2";shift 2;;
                "-R") RELAY="$2";shift 2;;
                "-I") MESSAGEID="$2";shift 2;;
                "-E") EHLO="$2";shift 2;;
                "-H") HEADER="$HEADER$2\\n";shift 2;;
                -*) echo "$1 non riconosciuto";usage;exit;;
                *) TO="$TO $1";shift;;
        esac
done
if [ -z "$TO" ];then usage;exit;fi
EHLO=${EHLO:-"`hostname`.$DOMAIN"}
FROM=${FROM:-"`whoami`@$EHLO"}
MESSAGEID=${MESSAGEID:-"`date +%s`@$EHLO"}
RCPTTO="$TO $CC $BCC"

PROTO=$(echo $RELAY|sed -r 's#^(smtps?)://.*#\1#')
PORT=$(echo $RELAY|sed -r 's#^smtps?://.*:([0-9]+)#\1#')
RELAY=$(echo $RELAY|sed -r 's#^smtps?://([^:]*):.*#\1#')

(
        echo "EHLO $HOST"
        echo "MAIL FROM: <$FROM>"
        for RCPT in $RCPTTO;do
                echo "RCPT TO: <$RCPT>"
        done
        echo "DATA"
        echo "Subject: $SUBJECT"
        echo "From: $FROM"
        echo "To: $(echo $TO|sed 's/ /,/g')"
        [ ! -z "$CC" ]&&echo "CC: $(echo $CC|sed 's/ /,/g')"
        echo "Message-Id: $MESSAGEID"
        echo -en "$HEADER"
        echo ""
        cat
        echo "."
        echo "QUIT"
)|(
        if [ "$PROTO" == "smtps" ];then
                openssl s_client -ign_eof -connect $RELAY:$PORT -quiet
        else
                nc $RELAY $PORT
        fi
)


sembra funzionare.
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111


Torna a “Gnu/Linux in genere”

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti