[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
- Script para enviar EMAIL via SMTP com autenticação,
Alain M. <=