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 mailutils
e 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
, echo
e 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/mailtest
viene sovrascritto ogni volta che viene utilizzato questo script.In genere, si desidera utilizzare il mail
comando 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
, someport
e someaccount@somedomain
ai valori effettivi che usereste. Nessuna crittografia e nessuna autenticazione viene eseguita in questo esempio.
mailx
non è installato?
Il mail
comando lo fa (chi l'avrebbe mai detto ;-). Apri la shell e accedi man mail
per ottenere la pagina di manuale del mail
comando 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"