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á" [EMAIL PROTECTED]

# 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


---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como 
perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio 
aviso.
---------------------------------------------------------------------
Sair da lista: [EMAIL PROTECTED]
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em 
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil

 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/shell-script/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a