it-swarm.com.de

Senden einer Mail aus einem Linux-Shell-Skript

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?

107
Zubair

Wenn der Server gut konfiguriert ist, z. B. ein aktiver MTA, können Sie einfach den Befehl mail verwenden.

So können Sie beispielsweise den Inhalt einer Datei senden:

$ cat /path/to/file | mail -s "your subject" [email protected]

man mail für mehr Details.

112

Wenn Sie einen sauberen und einfachen Ansatz in bash wünschen und cat, echo usw. nicht verwenden möchten, ist der einfachste Weg:

mail -s "subject here" [email protected] <<< "message"

<<< wird verwendet, um die Standardeingabe umzuleiten. Es ist ein Teil der Bash für eine lange Zeit gewesen.

84
user767124

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 löschen zuerst und neu installieren ssmtp.

Dann ist es ganz einfach, nur 2 Dateien (revaliases und ssmtp.conf) zu konfigurieren - siehe ssmtp doc - und die Verwendung in Ihrem Bash- oder Bournemusik-Skript sieht folgendermaßen aus:

#!/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 auf dem SMTP-Port (25) zu öffnen.

24
hornetbzz

Eine weitere Option für ein Bash-Skript:

mailbody="Testmail via bash script"
echo "From: [email protected]" > /tmp/mailtest
echo "To: [email protected]" >> /tmp/mailtest
echo "Subject: Mailtest subject" >> /tmp/mailtest
echo "" >> /tmp/mailtest
echo $mailbody >> /tmp/mailtest
cat /tmp/mailtest | /usr/sbin/sendmail -t
  • Die Datei /tmp/mailtest wird bei jeder Verwendung dieses Skripts überschrieben.
  • Der Speicherort von sendmail kann je nach System unterschiedlich sein.
  • Wenn Sie dies in einem Cron-Skript verwenden, müssen Sie den absoluten Pfad für den Befehl sendmail verwenden.
9
SPRBRN

Im Allgemeinen sollten Sie den Befehl mail verwenden, um Ihre Nachricht über einen lokalen MTA zu senden (der sie entweder über SMTP an das Ziel übermittelt oder sie einfach an einen leistungsstärkeren SMTP-Server weiterleitet, z. B. bei Ihrem Internetdienstanbieter ). Wenn Sie keinen lokalen MTA haben (obwohl es für ein UNIX-ähnliches System etwas ungewöhnlich ist, einen auszulassen), 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 Providers 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 der unzähligen Skripte zu verwenden, die lediglich eine direkte Verbindung zum SMTP-Server herstellen und versuchen, dort eine Nachricht zu posten, z. B. Smtp-Auth-Email-Script , smtp-cli =, SendEmail usw.

8
GreyCat

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 protected]
echo "some message" | mailx -s "$SUBJECT" "$EMAIL"

Ändern Sie somehost, someport und [email protected] auf tatsächliche Werte, die Sie verwenden würden. In diesem Beispiel wird keine Verschlüsselung und keine Authentifizierung durchgeführt.

4
Germano

Unter Linux kann mit dem Dienstprogramm mail ein Anhang mit der Option "-a" gesendet werden. Lesen Sie die Manpages durch, um mehr über die Option zu erfahren. Zum Beispiel wird folgender Code einen Anhang senden:

mail -s "DIESES IS SUBJECT" -a attachment.txt [email protected] <<< "Hallo Kumpel, bitte finde Fehlermeldungen."

2
krish___na

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 man Text-/HTML-E-Mails versendet, 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

2
Daniel J.

sie können den Befehl 'email' oder 'emailx' verwenden.

(1) $ vim /etc/mail.rc # oder # vim /etc/nail.rc

set from = [email protected] #
set smtp = smtp.exmail.gmail.com #gmail's smtp server 
set smtp-auth-user = [email protected] #sender's email address
set smtp-auth-password = xxxxxxx #get from gmail, not your email account passwd
set smtp-auth=login

Denn wenn es nicht von einem autorisierten Konto gesendet wird, werden E-Mails an die Junk-Mail-Liste gesendet.

(2) $ echo "Bitte denken Sie daran, nicht verwendete Themen zu entfernen!" | mail -s "waste topics" -a a.txt [email protected] #send to group user '[email protected]'

1
TINGTING WANG

Der Befehl mail macht das (wer hätte das gedacht ;-). Öffne deine Shell und gib man mail, um die Handbuchseite für den Befehl mail für alle verfügbaren Optionen abzurufen.

1
DarkDust