Voglio inviare un'e-mail da uno script della shell Linux. Qual è il comando standard per eseguire questa operazione e devo impostare nomi di server speciali?
Voglio inviare un'e-mail da uno script della shell Linux. Qual è il comando standard per eseguire questa operazione e devo impostare nomi di server speciali?
Risposte:
Se il server è ben configurato, ad esempio ha un MTA attivo e funzionante, puoi semplicemente usare il comando mail.
Ad esempio, per inviare il contenuto di un file, puoi fare questo:
$ cat /path/to/file | mail -s "your subject" your@email.com
man mail per ulteriori dettagli.
sudo apt-get install mailutilse seleziona Sito Internet: La posta viene inviata e ricevuta direttamente tramite SMTP. .
Se si desidera un approccio semplice e pulito in bash, e non si desidera utilizzare cat, echoe così via, il modo più semplice potrebbe essere:
mail -s "subject here" email@address.com <<< "message"
<<<viene utilizzato per reindirizzare lo standard input. Fa parte di bash per molto tempo.
cat << END...END | mail -s "subject" test@example.com
Se sia exim che ssmtp sono in esecuzione, potresti avere problemi. Quindi, se vuoi solo eseguire un semplice MTA, solo per avere un semplice client smtp per inviare notifiche e-mail per insistenza, devi prima eliminare l'MTA eventualmente preinstallato come exim o postfix e reinstallare ssmtp.
Quindi è abbastanza semplice, configurare solo 2 file (revaliases e ssmtp.conf) - Vedi ssmtp doc -, e l'utilizzo nel tuo script bash o bourne è come:
#!/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 $?
Ovviamente non dimenticare di aprire l'output del tuo firewall sulla porta smtp (25).
Un'altra opzione per in uno 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/mailtestviene sovrascritto ogni volta che viene utilizzato questo script.In genere, si desidera utilizzare il mailcomando per inviare il messaggio utilizzando l'MTA locale (che lo consegnerà utilizzando SMTP alla destinazione o lo inoltrerà semplicemente a un server SMTP più potente, ad esempio al proprio ISP). Se non si dispone di un MTA locale (anche se è un po 'insolito per un sistema simile a UNIX ometterne uno), è possibile utilizzare un MTA minimalista come ssmtp .
ssmtpè abbastanza facile da configurare. Fondamentalmente, dovrai solo specificare dove si trova il server SMTP del tuo provider:
# 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
Un'altra opzione è usare uno dei miriadi di script che si connettono direttamente al server SMTP e provare a postare un messaggio lì, come Smtp-Auth-Email-Script , smtp-cli , SendEmail , ecc.
Ammettendo di voler utilizzare qualche server smtp, puoi fare:
export SUBJECT=some_subject
export smtp=somehost:someport
export EMAIL=someaccount@somedomain
echo "some message" | mailx -s "$SUBJECT" "$EMAIL"
Modificare somehost, someporte someaccount@somedomainai valori effettivi che usereste. Nessuna crittografia e nessuna autenticazione viene eseguita in questo esempio.
mailxnon è installato?
Il mailcomando lo fa (chi l'avrebbe mai detto ;-). Apri la shell e accedi man mailper ottenere la pagina di manuale del mailcomando per tutte le opzioni disponibili.
Non hai nemmeno bisogno di un MTA. Il protocollo SMTP è abbastanza semplice da poterlo scrivere direttamente sul tuo server SMTP. Puoi anche comunicare su SSL / TLS se hai installato il pacchetto OpenSSL. Controlla questo post: https://33hops.com/send-email-from-bash-shell.html
Quanto sopra è un esempio su come inviare e-mail in formato testo / html che funzioneranno immediatamente. Se vuoi aggiungere allegati la cosa può diventare un po 'più complicata, dovrai codificare in base64 i file binari e incorporarli tra i confini. Questo è un buon posto per iniziare a indagare: http://forums.codeguru.com/showthread.php?418377-Send-Email-w-attachments-using-SMTP
Su Linux, l' utilità di posta può essere utilizzata per inviare allegati con l'opzione "-a". Scorri le pagine man per leggere le opzioni. Ad esempio, il codice seguente invierà un allegato:
mail -s "QUESTO È OGGETTO" -un allegato.txt nome@dominio.com <<< "Ciao amico, trova i rapporti sugli errori."
UTILIZZO DI POSTFIX
1: installa il 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
in configurazione selezionare il supporto SASL
make install clean
pkg install mailx
2. Configura Gmail
/ Etc / postfix. Crea o modifica il file della password:
vim /etc/postfix/sasl_passwd
sto usando vim puoi usare qualsiasi editor di file come nano, cat .....
> Ubuntu, Fedora, CentOS, Debian, OpenSUSE, Arch Linux:
Aggiungi questo
dove l'utente sostituire con la vostra mailname e la password è Gmail Password
[smtp.gmail.com]:587 user@gmail.com:password
Salva e chiudi il file e rendilo accessibile solo da root: perché è un contenuto sensibile che contiene la tua password
chmod 600 /usr/local/etc/postfix/sasl_passwd
> FreeBSD:
directory / usr / local / etc / postfix.
vim /usr/local/etc/postfix/sasl_passwd
Aggiungi la riga:
[smtp.gmail.com]:587 user@gmail.com:password
Salva e rendilo accessibile solo da root:
chmod 600 /usr/local/etc/postfix/sasl_passwd
3. Configurazione di Postfix
file di configurazione main.cf
6 parametri che dobbiamo impostare nel Postfix
Ubuntu, Arch Linux, Debian:
modificare
vim /etc/postfix/main.cf
modificare i seguenti valori:
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 che nella configurazione verrà impostato su vuoto , per garantire che non vengano utilizzate opzioni di sicurezza incompatibili con Gmail .
salva e chiudi
come per
OpenSUSE:
vim /etc/postfix/main.cf
modificare
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
richiede anche la configurazione del file master.cf
modificare:
vim /etc/postfix/master.cf
come rimuovendo il commento da questa riga (rimuovi #)
#tlsmgr unix - - n 1000? 1 tlsmg
salva e chiudi
Fedora, CentOS:
vim /etc/postfix/main.cf
modificare
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
modificare:
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
salva e chiudi questo
4. Elabora file password:
Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux, Debian:
postmap /etc/postfix/sasl_passwd
per freeBSD
postmap /usr/local/etc/postfix/sasl_passwd
4.1) Riavvia postfix
Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux, Debian:
systemctl restart postfix.service
per FreeBSD:
service postfix onestart
nano /etc/rc.conf
Inserisci
postfix_enable=YES
salva quindi esegui per iniziare
service postfix start
5. Abilita "App meno sicure" in Gmail utilizzando la guida del link sottostante
https://support.google.com/accounts/answer/6010255
6. Invia un'e-mail di prova
mail -s "subject" recever@domain.com
premere Invio
aggiungi il corpo del messaggio come desideri, premi invio, quindi premi ctrl + d per terminare correttamente
se non funziona controlla di nuovo tutti i passaggi e controlla se abiliti " app meno sicura" nel tuo Gmail
quindi riavvia postfix se modifichi qualcosa in questo
per lo script di shell creare il file .sh e aggiungere il comando in 6 passaggi come requisito
per esempio solo per un campione
#!/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
Lo script invia un'e-mail quando l'utilizzo del disco supera la percentuale specificata dalla variabile THRESHOLD (80% qui).
puoi usare il comando "email" o "emailx".
(1) $ vim /etc/mail.rc # o # 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 "Ricordati di rimuovere gli argomenti inutilizzati!" | mail -s "argomenti di scarto" -a a.txt developer@xxx.com #invia all'utente del gruppo "developer@xxxx.com"