E-Mail über Kommandozeile versenden - aber wie?

Status
Für weitere Antworten geschlossen.

Freakhouse

Benutzer
Mitglied seit
15. Apr 2013
Beiträge
114
Punkte für Reaktionen
0
Punkte
16
Ich bin auf der Suche nach der Lösung für folgendes Problem: ich würde gerne über die Kommandozeile mittels SENDMAIL eine E-Mail versenden. Wie ich eine solche E-Mail in Einzelschritten über die Kommandozeile versenden kann, weiß ich. Allerdings benötige ich einen einzeiligen Befehl für die komplette E-Mail.

Bisher bin ich so weit gekommen:

echo "Dies ist der Text der E-Mail" | sendmail mailadresse@domain.de

Als Ergebnis erhalte ich dann eine E-Mail mit dem besagten Text an die angegebene E-Mail-Adresse. Als Absender erscheint der Name "root". Nun würde ich der E-Mail insbesondere noch gerne einen Betreff mitgeben. Hier klemmt es jedoch. Zwar kann ich mit dem Kommando

echo "Subject: Testmail" | sendmail mailadresse@domain.de

eine E-Mail mit dem Betreff "Testmail" versenden, allerdings weiß ich nicht, wo ich dann den eigentlichen E-Mail-Text hinpacken muss. Kann mir jemand von euch sagen, wie das entsprechende Kommando bei SENDMAIL aufgebaut werden muss?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Code:
#txt File
printf "From: <deineAdresse@deineDomain.tld>\nTo: <adresse@domain.tld>\nSubject: Dein Betreff\n\nText Mailinhalt" | sendmail mailadresse@domain.de
müsste klappen. wichtig wäre der doppelte Zeilenumbruch nach dem letzten Header, unmittelbar vor dem Mailinhalt
 

DI4bI0

Benutzer
Mitglied seit
08. Mrz 2011
Beiträge
264
Punkte für Reaktionen
14
Punkte
24
Hier mal als kleine funktion mit multiline support:

Rich (BBCode):
#===================================================================
# Sends a mail with sendmail! Parameter: 1. Subject  2. Mailtext
#===================================================================
sendMail(){
sendmail -F "$MAIL_FROM" -f "$MAIL_REPLAY_TO" -t "$MAIL_TO" << MAIL
To: $MAIL_TO
Subject: $1
$2
MAIL
}

#===================================================================
# Usage
#===================================================================
# settings
MAIL_FROM="Max Mustermann"
MAIL_REPLAY_TO="absender@adresse.de"
MAIL_TO="empfänger@adresse.de"

SUBJECT="Betreff"

MESSAGE="
Das ist eine
multiline Test
Nachricht"

# Mail absenden
sendMail "$SUBJECT" "$MESSAGE"

mfg Diablo :)
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Du hast den zweifachen Zeilenumbruch nach dem letzten Header vergessen. Das gibt keine gültige Mail;)
 

DI4bI0

Benutzer
Mitglied seit
08. Mrz 2011
Beiträge
264
Punkte für Reaktionen
14
Punkte
24
Morgen,
Danke für die Info, allerdings werden die mails ganz normal versendet und auch angezeigt, ich wüsste jetzt nicht wo ich den zeilenumbruch vergessen habe.

mfg Diablo
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Der letzte Header einer Mail muss mittels doppelten Zeilenumbruch vom eigentlichen Inhalt abgetrennt werden. Kann sein dass Clients u.U. darüber hinwegsehen, korrekt ist es aber nicht ;-)
 

Frogman

Benutzer
Mitglied seit
01. Sep 2012
Beiträge
17.485
Punkte für Reaktionen
8
Punkte
414
Zu dem Hinweis von jahlives ergänze ich mal den Link zur RFC2822: Header und Body sind mit einer Leerzeile zu teilen, also hinter dem CRLF am Ende der letzten Headerzeile noch eine leere Zeile bestehend aus einem CRLF.
 

DI4bI0

Benutzer
Mitglied seit
08. Mrz 2011
Beiträge
264
Punkte für Reaktionen
14
Punkte
24
Danke leute :)
so sollte es dann jetzt passen (hoffe ich)

Rich (BBCode):
#!/bin/sh
#===================================================================
# Sends a mail with sendmail! Parameter: 1. Subject  2. Mailtext
#===================================================================
sendMail(){
sendmail -F "$MAIL_FROM" -f "$MAIL_REPLAY_TO" -t "$MAIL_TO" << MAIL
From: "$MAIL_FROM" <$MAIL_REPLAY_TO>
To: <$MAIL_TO>
Subject: $1

$2
MAIL
}

#===================================================================
# Usage
#===================================================================
# settings
MAIL_FROM='Max Mustermann'
MAIL_REPLAY_TO='absender@adresse.de'
MAIL_TO='empfaenger@adresse.de'

SUBJECT="Betreff"

MESSAGE="Das ist eine
multiline Test
Nachricht"

# Mail absenden
sendMail "$SUBJECT" "$MESSAGE"
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
theoretisch könnten dir die Zeilenenden immer noch einen Streich spielen :) Das RFC verlangt CRLF, der default bei Linux/Unix ist aber LF. Ich geh mal davon aus, dass beim obigen Script unter Linux wohl nur ein LF eingefügt würde, was strenggenommen nicht korrekt wäre. Auch bei Macs, welche als default afaik nur CR haben, könnte das Probleme machen
 

DI4bI0

Benutzer
Mitglied seit
08. Mrz 2011
Beiträge
264
Punkte für Reaktionen
14
Punkte
24
Danke für den hinweis, habe es bei mir auf CRLF Zeilenende umgestellt.
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat