Quero enviar um email de um script do Shell do Linux. Qual é o comando padrão para fazer isso e preciso configurar nomes de servidores especiais?
Quero enviar um email de um script do Shell do Linux. Qual é o comando padrão para fazer isso e preciso configurar nomes de servidores especiais?
Respostas:
Se o servidor estiver bem configurado, por exemplo, com um MTA instalado e em execução, você pode apenas usar o comando mail.
Por exemplo, para enviar o conteúdo de um arquivo, você pode fazer o seguinte:
$ cat /path/to/file | mail -s "your subject" your@email.com
man mail
para mais detalhes.
sudo apt-get install mailutils
e selecione o site da Internet: o correio é enviado e recebido diretamente usando SMTP. .
Se você quer uma abordagem limpa e simples no bash, e você não quiser usar cat
, echo
etc., a maneira mais simples seria:
mail -s "subject here" email@address.com <<< "message"
<<<
é usado para redirecionar a entrada padrão. Faz parte do bash há muito tempo.
cat << END
...END | mail -s "subject" test@example.com
Se o exim e o ssmtp estiverem em execução, você poderá entrar em problemas. Portanto, se você deseja executar um MTA simples, apenas para que um cliente smtp simples envie notificações por e-mail por insistência, limpe o MTA eventualmente pré-instalado como exim ou postfix primeiro e reinstale o ssmtp.
Então é bastante simples, configurando apenas 2 arquivos (revaliases e ssmtp.conf) - consulte ssmtp doc -, e o uso em seu script bash ou bourne é como:
#!/bin/sh
SUBJECT=$1
RECEIVER=$2
TEXT=$3
SERVER_NAME=$HOSTNAME
SENDER=$(whoami)
USER="noreply"
[[ -z $1 ]] && SUBJECT="Notification from $SENDER on server $SERVER_NAME"
[[ -z $2 ]] && RECEIVER="another_configured_email_address"
[[ -z $3 ]] && TEXT="no text content"
MAIL_TXT="Subject: $SUBJECT\nFrom: $SENDER\nTo: $RECEIVER\n\n$TEXT"
echo -e $MAIL_TXT | sendmail -t
exit $?
Obviamente, não esqueça de abrir a saída do firewall para a porta smtp (25).
Outra opção para um script bash:
mailbody="Testmail via bash script"
echo "From: info@myserver.test" > /tmp/mailtest
echo "To: john@mywebsite.test" >> /tmp/mailtest
echo "Subject: Mailtest subject" >> /tmp/mailtest
echo "" >> /tmp/mailtest
echo $mailbody >> /tmp/mailtest
cat /tmp/mailtest | /usr/sbin/sendmail -t
/tmp/mailtest
é substituído sempre que esse script é usado.Geralmente, você deseja usar o mail
comando para enviar sua mensagem usando o MTA local (que a entrega usando SMTP para o destino ou apenas a encaminha para um servidor SMTP mais poderoso, por exemplo, no seu ISP). Se você não possui um MTA local (embora seja um pouco incomum um sistema semelhante ao UNIX omitir um), você pode usar algum MTA minimalista como ssmtp .
ssmtp
é bastante fácil de configurar. Basicamente, você só precisa especificar onde está o servidor SMTP do seu provedor:
# The place where the mail goes. The actual machine name is required
# no MX records are consulted. Commonly mailhosts are named mail.domain.com
# The example will fit if you are in domain.com and you mailhub is so named.
mailhub=mail
Outra opção é usar um dos inúmeros scripts que apenas se conectam diretamente ao servidor SMTP e tentar postar uma mensagem lá, como Smtp-Auth-Email-Script , smtp-cli , SendEmail etc.
Admitindo que você deseja usar algum servidor smtp, você pode:
export SUBJECT=some_subject
export smtp=somehost:someport
export EMAIL=someaccount@somedomain
echo "some message" | mailx -s "$SUBJECT" "$EMAIL"
Mudança somehost
, someport
e someaccount@somedomain
para valores reais que você usaria. Nenhuma criptografia e autenticação são executadas neste exemplo.
mailx
não estiver instalado?
O mail
comando faz isso (quem teria adivinhado ;-). Abra seu shell e digite man mail
para obter a página de manual do mail
comando para todas as opções disponíveis.
Você nem precisa de um MTA. O protocolo SMTP é simples o suficiente para gravá-lo diretamente no servidor SMTP. Você pode até se comunicar via SSL / TLS se tiver o pacote OpenSSL instalado. Verifique esta publicação: https://33hops.com/send-email-from-bash-shell.html
O exemplo acima é um exemplo de como enviar e-mails de texto / html que funcionarão imediatamente. Se você deseja adicionar anexos, a coisa pode ficar um pouco mais complicada, você precisará codificar base64 os arquivos binários e incorporá-los entre os limites. Este é um bom lugar para começar a investigar: http://forums.codeguru.com/showthread.php?418377-Send-Email-w-attachments-using-SMTP
No linux, o utilitário de correio pode ser usado para enviar anexos com a opção "-a". Acesse as páginas do manual para ler sobre a opção. Por exemplo, o seguinte código enviará um anexo:
mail -s "ISSO ESTÁ SUJEITO" - um anexo.txt nome@domínio.com <<< "Olá amigo, encontre relatórios de falha."
USANDO O POSTFIX
1: instalar software
Debian e Ubuntu:
apt-get update && apt-get install postfix mailutils
OpenSUSE:
zypper update && zypper install postfix mailx cyrus-sasl
Fedora:
dnf update && dnf install postfix mailx
CentOS:
yum update && yum install postfix mailx cyrus-sasl cyrus-sasl-plain
Arch Linux:
pacman -Sy postfix mailutils
FreeBSD:
portsnap fetch extract update
cd /usr/ports/mail/postfix
make config
na configuração, selecione suporte SASL
make install clean
pkg install mailx
2. Configure o Gmail
/ etc / postfix. Crie ou edite o arquivo de senha:
vim /etc/postfix/sasl_passwd
estou usando o vim u pode usar qualquer editor de arquivos como nano, cat .....
> Ubuntu, Fedora, CentOS, Debian, OpenSUSE, Arch Linux:
Adicione isso
onde o usuário substitui pelo seu nome de email e senha é a sua senha do Gmail
[smtp.gmail.com]:587 user@gmail.com:password
Salve e feche o arquivo e torne-o acessível apenas pela raiz: por ser um conteúdo sensível que contém sua senha
chmod 600 /usr/local/etc/postfix/sasl_passwd
> FreeBSD:
diretório / usr / local / etc / postfix.
vim /usr/local/etc/postfix/sasl_passwd
Adicione a linha:
[smtp.gmail.com]:587 user@gmail.com:password
Salve e torne acessível apenas pela raiz:
chmod 600 /usr/local/etc/postfix/sasl_passwd
3. Configuração do Postfix
arquivo de configuração main.cf
6 parâmetros que devemos definir no Postfix
Ubuntu, Arch Linux, Debian:
editar
vim /etc/postfix/main.cf
modifique os seguintes valores:
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_sasl_security_options que na configuração serão definidas como vazias , para garantir que não haja opções de segurança incompatíveis com o Gmail seja usada.
salvar e fechar
como para
OpenSUSE:
vim /etc/postfix/main.cf
modificar
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/ca-bundle.pem
também requer a configuração do arquivo master.cf
modificar:
vim /etc/postfix/master.cf
descomentando esta linha (remova #)
#tlsmgr unix - - n 1000? 1 tlsmg
salvar e fechar
Fedora, CentOS:
vim /etc/postfix/main.cf
modificar
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt
FreeBSD:
vim /usr/local/etc/postfix/main.cf
modificar:
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/usr/local/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/mail/certs/cacert.pem
salve e feche isso
4. Processar arquivo de senha:
Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux, Debian:
postmap /etc/postfix/sasl_passwd
para freeBSD
postmap /usr/local/etc/postfix/sasl_passwd
4.1) Reinicie o postfix
Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux, Debian:
systemctl restart postfix.service
para o FreeBSD:
service postfix onestart
nano /etc/rc.conf
adicionar
postfix_enable=YES
salve e corra para começar
service postfix start
5. Ative "Aplicativos menos seguros" no Gmail usando a ajuda do link abaixo
https://support.google.com/accounts/answer/6010255
6. Envie um email de teste
mail -s "subject" recever@domain.com
pressione Enter
adicione o corpo do e-mail conforme desejado, pressione enter e pressione ctrl + d para finalizar corretamente
se não funcionar, verifique todas as etapas novamente e verifique se você habilita " aplicativo menos seguro" no seu gmail
reinicie o postfix se você modificar algo
para shell script, crie o arquivo .sh e inclua o comando 6 step como seu requisito
por exemplo, apenas para uma amostra
#!/bin/bash
REALVALUE=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
THRESHOLD=80
if [ "$REALVALUE" -gt "$THRESHOLD" ] ; then
mail -s 'Disk Space Alert' mailid@domainname.com << EOF
Your root partition remaining free space is critically low. Used: $REALVALUE%
EOF
fi
O script envia um email quando o uso do disco ultrapassa a porcentagem especificada pela varialbe THRESHOLD (80% aqui).
você pode usar o comando 'email' ou 'emailx'.
(1) $ vim /etc/mail.rc # ou # vim /etc/nail.rc
set from = xxx@xxx.com #
set smtp = smtp.exmail.gmail.com #gmail's smtp server
set smtp-auth-user = xxx@xxx.com #sender's email address
set smtp-auth-password = xxxxxxx #get from gmail, not your email account passwd
set smtp-auth=login
(2) $ echo "Lembre-se de remover tópicos não utilizados!" | mail -s "tópicos de desperdício" -a a.txt developer@xxx.com #send ao usuário do grupo 'developer@xxxx.com'