2012-04-03 19 views
7

Tengo postfix + dovecot. Quiero hacer un script bash que pueda usar SMTP para esto. No quiero usar sendmail.¿Es posible enviar correos electrónicos mediante script bash a través de smtp?

¿Es posible? ¿Puede ser que alguien tenga algunos ejemplos de código?

+4

¿Por qué no desea utilizar un cliente SMTP? – Kimvais

+2

¿Qué pasa con el envoltorio postfix ''sendmail'? – 0xC0000022L

+0

https://unix.stackexchange.com/questions/36982/can-i-set-up-system-mail-to-use-an-external-smtp-server podría responder su pregunta. Ssmtp. –

Respuesta

2

¿Desea bash para hablar directamente con un servidor SMTP? Eso no va a suceder realmente. Podría ser técnicamente ser posible utilizando el soporte para comunicación de red disponible en bash, pero de manera realista no desea ir por ese camino.

Eso significa que lo que realmente necesita es llamar a un programa externo que tomará de SMTP para usted. Por lo general, eso va a ser sendmail, pero si usted está tratando de evitar que existen muchas otras alternativas, incluyendo:

Ambos pueden manejar la comunicación con un servidor SMTP remoto sin involucrar a sendmail.

12

Niño, cuando ese guantelete es arrojado, siempre bash es mi cabeza derecha! :-)

#!/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

Esto parece que busco. Gracias. – Jason

+0

¡me alegro de poder demostrar esto por ti! – dldnh

6

Probado con gmail y actualmente funciona.

#!/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

No me queda claro cuando dice que no desea usar sendmail. Puede ser que no quiera usar el proceso de sendmail.

Postfix tiene un ejecutable llamado "sendmail", y es posible que desee utilizarlo porque no puedo pensar por qué no debería hacerlo.

#/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

Estoy de acuerdo, puede ser que no estoy claro. Quiero decir, que quiero saber sobre la posibilidad de que bash script use smtp auth para conectarse al servidor smtp remoto y enviar correo. – Jason

1

Puede usar SSMTP. Tal vez éste también ayuda:

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

+1

SSMTP permitido enviar correos electrónicos a través del servidor SMTP también. Hay otra opción para usar el comando sendEmail. https://tecadmin.net/send-email-from-gmail-smtp-via-linux-command/ o https://tecadmin.net/ways-to-send-email-from-linux -línea de comando/ –

2

acaba de encontrar esta pequeña pero maravillosa utilidad sendemail (no sendmail). La sintaxis es muy simple de explicar.

Ejemplo:

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 

Más información disponible a través de ayuda o en el sitio del autor: http://caspian.dotconf.net/menu/Software/SendEmail/.

0
  • Instalar ssmtp, por ejemplo:

    apt-get install ssmtp

  • Configurar ssmtp:

    sudo nano /etc/ssmtp/ssmtp.conf

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

    · Nombre de host: hostname=subdomain.domain.com

    · Usuario: [email protected]

    · Pass: AuthPass=your_password

A continuación, en el archivo sh, hacer lo que necesita y tubería para el correo, por ejemplo:

#!/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]

Cuestiones relacionadas