Ich möchte eine E-Mail von einem Linux Shell-Skript senden. Was ist der Standardbefehl, um dies zu tun, und muss ich spezielle Servernamen einrichten?
Ich möchte eine E-Mail von einem Linux Shell-Skript senden. Was ist der Standardbefehl, um dies zu tun, und muss ich spezielle Servernamen einrichten?
Antworten:
Wenn der Server gut konfiguriert ist, z. B. über einen laufenden MTA, können Sie einfach den Befehl mail verwenden.
Um beispielsweise den Inhalt einer Datei zu senden, können Sie Folgendes tun:
$ cat /path/to/file | mail -s "your subject" your@email.com
man mail
für mehr Details.
sudo apt-get install mailutils
und die Internetseite auswählen : E-Mails werden direkt über SMTP gesendet und empfangen. .
Wenn Sie einen sauberen und einfachen Ansatz in bash wollen, und Sie wollen nicht verwenden cat
, echo
etc., wäre der einfachste Weg:
mail -s "subject here" email@address.com <<< "message"
<<<
wird verwendet, um die Standardeingabe umzuleiten. Es ist schon lange ein Teil von Bash.
cat << END
...END | mail -s "subject" test@example.com
Wenn sowohl exim als auch ssmtp ausgeführt werden, können Probleme auftreten. Wenn Sie also nur einen einfachen MTA ausführen möchten, nur um einen einfachen SMTP-Client zum Senden von E-Mail-Benachrichtigungen zu haben, müssen Sie den eventuell vorinstallierten MTA wie exim oder postfix zuerst löschen und ssmtp neu installieren.
Dann ist es ganz einfach, nur 2 Dateien (revaliases und ssmtp.conf) zu konfigurieren - siehe ssmtp doc - und die Verwendung in Ihrem Bash- oder Bourne-Skript ist wie folgt:
#!/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 $?
Vergessen Sie natürlich nicht, Ihre Firewall-Ausgabe für den SMTP-Port (25) zu öffnen.
Eine weitere Option für ein Bash-Skript:
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
wird bei jeder Verwendung dieses Skripts überschrieben.Im Allgemeinen möchten Sie den mail
Befehl verwenden, um Ihre Nachricht mit lokalem MTA zu senden (der sie entweder über SMTP an das Ziel übermittelt oder einfach an einen leistungsstärkeren SMTP-Server weiterleitet, z. B. an Ihren ISP). Wenn Sie keinen lokalen MTA haben (obwohl es für ein UNIX-ähnliches System etwas ungewöhnlich ist, einen wegzulassen), können Sie entweder einen minimalistischen MTA wie ssmtp verwenden .
ssmtp
ist recht einfach zu konfigurieren. Grundsätzlich müssen Sie nur angeben, wo sich der SMTP-Server Ihres Anbieters befindet:
# 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
Eine andere Möglichkeit besteht darin, eines von unzähligen Skripten zu verwenden, die sich direkt mit dem SMTP-Server verbinden, und zu versuchen, dort eine Nachricht zu posten, z. B. Smtp-Auth-E-Mail-Skript , SMTP-CLI , SendEmail usw.
Wenn Sie zugeben, dass Sie einen SMTP-Server verwenden möchten, können Sie Folgendes tun:
export SUBJECT=some_subject
export smtp=somehost:someport
export EMAIL=someaccount@somedomain
echo "some message" | mailx -s "$SUBJECT" "$EMAIL"
Ändern somehost
, someport
und someaccount@somedomain
die tatsächlichen Werte , die Sie verwenden würden. In diesem Beispiel wird keine Verschlüsselung und keine Authentifizierung durchgeführt.
mailx
nicht installiert?
Der mail
Befehl macht das (wer hätte das gedacht ;-). Öffnen Sie Ihre Shell und geben Sie ein man mail
, um die Handbuchseite für den mail
Befehl für alle verfügbaren Optionen aufzurufen.
Sie brauchen nicht einmal einen MTA. Das SMTP-Protokoll ist einfach genug, um es direkt auf Ihren SMTP-Server zu schreiben. Sie können sogar über SSL / TLS kommunizieren, wenn Sie das OpenSSL-Paket installiert haben. Überprüfen Sie diesen Beitrag: https://33hops.com/send-email-from-bash-shell.html
Das obige Beispiel zeigt, wie Sie Text- / HTML-E-Mails senden, die sofort funktionieren. Wenn Sie Anhänge hinzufügen möchten, kann die Sache etwas komplizierter werden. Sie müssen die Binärdateien mit base64 codieren und zwischen Grenzen einbetten. Dies ist ein guter Ort, um Nachforschungen anzustellen: http://forums.codeguru.com/showthread.php?418377-Send-Email-w-attachments-using-SMTP
Unter Linux kann das Mail- Dienstprogramm zum Senden von Anhängen mit der Option "-a" verwendet werden. Lesen Sie die Manpages, um mehr über die Option zu erfahren. Zum Beispiel sendet folgender Code einen Anhang:
mail -s "DAS IST SUBJEKT" -a Anhang.txt name@domain.com <<< "Hallo Kumpel, bitte finden Sie Fehlerberichte."
POSTFIX VERWENDEN
1: Software installieren
Debian und 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
Wählen Sie in der Konfiguration die SASL-Unterstützung aus
make install clean
pkg install mailx
2. Konfigurieren Sie Google Mail
/ etc / postfix. Erstellen oder bearbeiten Sie die Passwortdatei:
vim /etc/postfix/sasl_passwd
Ich benutze VIM. Du kannst jeden Dateibearbeiter wie Nano, Cat ... verwenden.
> Ubuntu, Fedora, CentOS, Debian, OpenSUSE, Arch Linux:
füge das hinzu
Wo Benutzer durch Ihren Mail-Namen und Passwort ersetzen, ist Ihr Google Mail- Passwort
[smtp.gmail.com]:587 user@gmail.com:password
Speichern und schließen Sie die Datei und machen Sie sie nur über root zugänglich: da es sich um einen vertraulichen Inhalt handelt, der Ihr Passwort enthält
chmod 600 /usr/local/etc/postfix/sasl_passwd
> FreeBSD:
Verzeichnis / usr / local / etc / postfix.
vim /usr/local/etc/postfix/sasl_passwd
Fügen Sie die Zeile hinzu:
[smtp.gmail.com]:587 user@gmail.com:password
Speichern und nur über root zugänglich machen:
chmod 600 /usr/local/etc/postfix/sasl_passwd
3. Postfix-Konfiguration
Konfigurationsdatei main.cf
6 Parameter müssen wir im Postfix einstellen
Ubuntu, Arch Linux, Debian:
bearbeiten
vim /etc/postfix/main.cf
Ändern Sie die folgenden Werte:
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, die in der Konfiguration auf leer gesetzt werden , um sicherzustellen, dass keine mit Google Mail inkompatiblen Sicherheitsoptionen verwendet werden.
speichern und schließen
wie für
OpenSUSE:
vim /etc/postfix/main.cf
ändern
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
Außerdem muss die Datei master.cf konfiguriert werden
ändern:
vim /etc/postfix/master.cf
wie durch Kommentieren dieser Zeile (# entfernen)
#tlsmgr unix - - n 1000? 1 tlsmg
speichern und schließen
Fedora, CentOS:
vim /etc/postfix/main.cf
ändern
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
ändern:
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
Speichern und schließen Sie diese
4. Passwortdatei verarbeiten:
Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux, Debian:
postmap /etc/postfix/sasl_passwd
für freeBSD
postmap /usr/local/etc/postfix/sasl_passwd
4.1) Starten Sie Postfix neu
Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux, Debian:
systemctl restart postfix.service
für FreeBSD:
service postfix onestart
nano /etc/rc.conf
hinzufügen
postfix_enable=YES
Speichern und dann starten
service postfix start
5. Aktivieren Sie "Weniger sichere Apps" in Google Mail mithilfe des folgenden Links
https://support.google.com/accounts/answer/6010255
6. Senden Sie eine Test-E-Mail
mail -s "subject" recever@domain.com
Drücken Sie Enter
Fügen Sie nach Ihren Wünschen einen E-Mail- Text hinzu. Drücken Sie die Eingabetaste und dann Strg + D, um eine ordnungsgemäße Beendigung zu erreichen
wenn es nicht funktioniert , die alle Schritte überprüft erneut und überprüfen , ob u „ermöglicht weniger sicher app“ in Ihrem gmail
Starten Sie dann postfix neu, wenn Sie daran etwas ändern
Erstellen Sie für das Shell-Skript die .sh-Datei und fügen Sie den Befehl 6 step als Ihre Anforderung hinzu
Zum Beispiel nur für eine Probe
#!/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
Das Skript sendet eine E-Mail, wenn die Festplattennutzung über den von der THRESHOLD-Variable angegebenen Prozentsatz steigt (hier 80%).
Sie können den Befehl 'email' oder 'emailx' verwenden.
(1) $ vim /etc/mail.rc # oder # 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 "Bitte denken Sie daran, nicht verwendete Themen zu entfernen!" | mail -s "Abfallthemen" -a a.txt developer@xxx.com #senden an Gruppenbenutzer 'developer@xxxx.com'