shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Script para enviar EMAIL via SMTP com autenticação


From: Alain M.
Subject: Script para enviar EMAIL via SMTP com autenticação
Date: Fri, 18 Aug 2006 11:57:04 -0300
User-agent: Thunderbird 1.5.0.4 (X11/20060516)

Desenvolvemos este script (adaptado de um aqui da lista) que pode enviar Emails via servidor externo de SMTP com autenticação e deve funcionar em qualquer máquina pois usa Telnet.

em até mais recurso que eu gostaria... mas aqui está para uso geral (já houve muitas solicitações aqui) e principalmente para críticas

Uma das coisas que gostaria de sugestões a respeito é como saber se o comando TELNET deu erro!

Alain
------------------------------
#!/bin/bash
#-----
# script de mail
#
# Pode ser usando os argumentos da linha de comando ou definir essas variáveis em um arquivo de configuração
# Pode usar parte em um arquivo de configuração
# Ex. mandamail.sh -c mandamail.conf -s "Olá" address@hidden

# REMETENTE = REMETENTE do e-mail (login do smtp)
# DESTINATARIO = DESTINATARIO do e-mail
# COPIA = com COPIA para
# ASSUNTO = ASSUNTO do e-mail, separado por ""
# CORPO = arquivo texto, que será o CORPO do e-mail
# SMTP=smtp.dominio.com.br
# SENHA="senhadaconta"

do_help () {
cat << EOF
Options information is as follows (
mandamail [options] recipient1,recipient2,...
-h, -help module Print this message or specify one of the below options
    -s, -subject subject      Subject of message
    -r, -smtp-server server   Specify a temporary SMTP server for sending
    -c, -conf-file file       Path to non-default configuration file
        -cc email,email,...   Copy recipients
    -u, -smtp-user username   Specify your username for SMTP AUTH
    -i, -smtp-pass password   Specify your password for SMTP AUTH
        -file file            Arquivo que será o Corpo do e-mail
EOF
}

# Testa se Todos as Variáveis Necessárias foram preenchidas
Var_OK () {
  # Lista das variaveis que não podem ser nulas
  local VAR_TESTE="REMETENTE SMTP SENHA DESTINATARIO"
  for VAR in $VAR_TESTE; do
    local VAR2=$(eval echo \$$(echo $VAR))
    if [ "$VAR2"  == "" ]; then
      echo "Informação: [ $VAR ] não foi definido. "
      exit 1
    fi
  done
}

# Mostra as Variáveis
Mostra_VAR () {
  echo Remetente: $REMETENTE
  echo Destinatário: $DESTINATARIO
  echo Copia: $COPIA
  echo Assunto: $ASSUNTO
  echo Corpo: $CORPO
  echo SMTP: $SMTP
  echo Senha: $SENHA
  echo Auth: $AUTH
}

enviaMail() {
echo '#!/bin/bash' > $EMAIL_SH
echo -n "(" >> $EMAIL_SH
echo "echo EHLO $(hostname -s); sleep 1" >> $EMAIL_SH
echo "echo AUTH PLAIN "$AUTH >> $EMAIL_SH
echo "echo MAIL FROM: $REMETENTE; sleep 1" >> $EMAIL_SH
# Envia Para todos os Destinatários
for DEST in $DESTINATARIO; do
  echo "echo RCPT TO: $DEST; sleep 1" >> $EMAIL_SH
done;
# Envia Com Cópia para
for COPY in $COPIA; do
  echo "echo RCPT CC: $COPY; sleep 1" >> $EMAIL_SH
done;
echo "echo DATA; sleep 1" >> $EMAIL_SH
echo "echo User-Agent: Shell Script via Telnet" >> $EMAIL_SH
echo "echo From: $REMETENTE" >> $EMAIL_SH
if [ -z "$ASSUNTO" ]; then
  echo "echo Subject: \"sem assunto\"" >> $EMAIL_SH
else
  echo "echo Subject: $ASSUNTO" >> $EMAIL_SH
fi
echo "echo Date: $(LC_ALL=C date "+%a %d %b %Y %k:%M:%S %z")" >> $EMAIL_SH
for DEST in $DESTINATARIO; do
  echo "echo To: $DEST" >> $EMAIL_SH
done;
for COPY in $COPIA; do
   echo "echo Cc: $COPY" >> $EMAIL_SH
done;
echo "echo \"\"" >> $EMAIL_SH
if [ -f "$CORPO" ]; then
  while read VAR; do
   echo "echo $VAR"  >> $EMAIL_SH
  done < $CORPO
else
   echo "echo \"Mensagem Vazia! \""
fi
echo "echo \".\"; sleep 1" >> $EMAIL_SH
echo "echo \"\"" >> $EMAIL_SH
echo "echo QUIT" >> $EMAIL_SH
echo ") | telnet $SMTP 25" >> $EMAIL_SH
chmod +x $EMAIL_SH
./$EMAIL_SH #>/dev/null 2>/dev/null
echo "ErrorLevel=$?"
rm -f $EMAIL_SH
}

ERROR=""
while [ "$1" != "" ]; do
  case $1 in
    -h | --help | --ajuda)
       shift; do_help
       ;;
    -s | -subject )
       shift; ASSUNTO=$1; shift
       ;;
    -r | -smtp-server )
       shift; SMTP=$1; shift
       ;;
    -u | -smtp-user )
       shift; REMETENTE=$1; shift
       ;;
    -i |-smtp-pass )
       shift; SENHA=$1; shift
       ;;
    -c | -conf-file)
       shift; CONF_FILE=$1; shift
       if [ ! -f $CONF_FILE ]; then
         ERROR="S"
         echo "Arquivo de Configuração Não Encontrado"
       fi
       ;;
    -file )
       shift; CORPO=$1; shift
       if [ ! -f $CORPO ]; then
         ERROR="S"
         echo "Arquivo Não Encontrado"
       fi
       ;;
    -cc )
       shift; COPIA=$( echo $1 | sed 's#,# #g'); shift
       ;;
     *)
       T=$1
       if [ '-' == ${T:0:1} ]; then
         echo "Parametro [ $T ] Inválido"; ERROR="S"; exit 1
       else
         DESTINATARIO=$( echo $DESTINATARIO $( echo $1 | sed 's#,# #g'))
       fi
       shift
       ;;
  esac
done

# Testa se houve erro nos parametros
[ "$ERROR" == "S" ] && echo "Error Nos Parametros" && exit 1

# Carrega o arquivo de configuração se definido
if [ -s "$CONF_FILE" ]; then
 . $CONF_FILE
fi

# Testa se as Variáveis importantes foram definidas
Var_OK
Mostra_VAR

### Gerar chave - String de Autenticação
AUTH=$(echo -e -n $REMETENTE'\000'$REMETENTE'\000'$SENHA | uuencode -m - | grep -v begin-base64 | grep -v ==== | tr -d "\n")

# Gera o script que envia o e-mail
EMAIL_SH=eMail$$.sh # Script Temporario que será gerado e apagado no final

enviaMail

exit 0


reply via email to

[Prev in Thread] Current Thread [Next in Thread]