2012-04-03 12 views
7

devo postfix + colombaia. Voglio fare uno script bash che può usare SMTP per questo. Non voglio usare sendmail.E 'possibile inviare mail da script bash via SMTP?

È possibile? Qualcuno potrebbe avere qualche esempio di codice?

+4

Perché non si desidera utilizzare un client SMTP? – Kimvais

+2

Cosa c'è di sbagliato nel wrapper 'sendmail'? – 0xC0000022L

+0

https://unix.stackexchange.com/questions/36982/can-i-set-up-system-mail-to-use-an-external-smtp-server potrebbe rispondere alla tua domanda. Ssmtp. –

risposta

2

Si desidera bash di parlare direttamente a un server SMTP? Non succederà davvero. Potrebbe tecnicamente essere possibile utilizzare il supporto per la comunicazione di rete disponibili in bash, ma realisticamente non si vuole andare su questa strada.

Ciò significa che ciò che si ha realmente bisogno è quello di chiamare un programma esterno che prenderà di SMTP per voi. In genere, che sta per essere sendmail, ma se si sta cercando di evitare che ci sono un sacco di altre alternative, tra cui:

Entrambi questi possono gestire la comunicazione con un server SMTP remoto senza coinvolgere sendmail.

12

ragazzo, quando quel guanto è gettato, è sempre bash mi es destra sulla testa! :-)

#!/bin/sh 

function checkStatus { 
    expect=250 
    if [ $# -eq 3 ] ; then 
    expect="${3}" 
    fi 
    if [ $1 -ne $expect ] ; then 
    echo "Error: ${2}" 
    exit 
    fi 
} 

MyHost=`hostname` 

read -p "Enter your mail host: " MailHost 
MailPort=25 

read -p "From: " FromAddr 

read -p "To: " ToAddr 

read -p "Subject: " Subject 

read -p "Message: " Message 

exec 3<>/dev/tcp/${MailHost}/${MailPort} 

read -u 3 sts line 
checkStatus "${sts}" "${line}" 220 

echo "HELO ${MyHost}" >&3 

read -u 3 sts line 
checkStatus "$sts" "$line" 

echo "MAIL FROM: ${FromAddr}" >&3 

read -u 3 sts line 
checkStatus "$sts" "$line" 

echo "RCPT TO: ${ToAddr}" >&3 

read -u 3 sts line 
checkStatus "$sts" "$line" 

echo "DATA" >&3 

read -u 3 sts line 
checkStatus "$sts" "$line" 354 

echo "Subject: ${Subject}" >&3 
echo "${Message}" >&3 
echo "." >&3 

read -u 3 sts line 
checkStatus "$sts" "$line" 
+0

Questo sembra che io cerco. Grazie. – Jason

+0

felice di aver potuto dimostrarlo per te! – dldnh

6

Testato con gmail e attualmente funziona.

#!/bin/bash 
# Use "host -t mx yourispdomain" to find out yourispmailserver 
exec 1<>/dev/tcp/yourispmailserver/25 
a=$(cat <<"MAILEND" 
HELO local.domain.name 
MAIL FROM: <[email protected]> 
RCPT TO: <[email protected]> 
DATA 
From: [email protected] 
To: [email protected] 
Subject: test 
send your orders for pizza to the administrator. 
. 
QUIT 
. 
MAILEND 
) 
IFS=' 
' 
declare -a b=($a) 
for x in "${b[@]}" 
do 
    echo $x 
    sleep 1 
done 
1

Non mi è chiaro quando si dice che non si desidera utilizzare sendmail. Potrebbe essere che non si desidera utilizzare il processo di sendmail.

Postfix ha un eseguibile chiamato "sendmail" e potrebbe essere utile utilizzarlo perché non riesco a pensare al motivo per cui non si dovrebbe.

#/bin/bash 

FROM='[email protected]' 
TO='[email protected]' 
SUBJECT='This is a test message' 

BODY="This is a test mail message body. 
Hi there. 
" 

printf "From: <%s>\nTo: <%s>\nSubject: %s\n\n%s" "$FROM" "$TO" "$SUBJECT" "$BODY" | sendmail -f "$FROM" 
+0

Sono d'accordo, potrebbe essere che non sono chiaro. Voglio dire, che voglio sapere sulla possibilità che lo script bash usi l'autenticazione smtp per connettersi al server smtp remoto e inviare posta. – Jason

1

È possibile utilizzare SSMTP. Forse questo aiuta anche:

http://tecadmin.net/send-email-smtp-server-linux-command-line-ssmtp/

+1

SSMTP consentito di inviare e-mail tramite server SMTP pure. Ci sono opzioni di anohter per usare il comando sendEmail. https://tecadmin.net/send-email-from-gmail-smtp-via-linux-command/ o https://tecadmin.net/ways-to-send-email-from-linux -riga di comando/ –

2

avete appena trovato questo piccolo ma meraviglioso utility sendemail (non sendmail). La sintassi è troppo semplice da spiegare.

Esempio:

SERVER="smtp.company.com" 
FROM="[email protected]" 
TO="[email protected]" 
SUBJ="Some subject" 
MESSAGE="Some message" 
CHARSET="utf-8" 

sendemail -f $FROM -t $TO -u $SUBJ -s $SERVER -m $MESSAGE -v -o message-charset=$CHARSET 

Maggiori informazioni disponibili attraverso aiuto o presso il sito dell'autore: http://caspian.dotconf.net/menu/Software/SendEmail/.

0
  • Installare ssmtp, per esempio:

    apt-get install ssmtp

  • Configura ssmtp:

    sudo nano /etc/ssmtp/ssmtp.conf

    · Server: mailhub=smtp.1und1.de:587

    · Nome host: hostname=subdomain.domain.com

    · User: [email protected]

    · Passo: AuthPass=your_password

Poi nel file sh, fare quello che ti serve e tubo per posta elettronica, per esempio:

#!/bin/bash du -sh | mail -s "Disk usage report" [email protected]

O

#!/bin/bash echo "Today's DB backup is ok." | mail -s "DB daily backup alert" [email protected]