E-Mail über Kommandozeile versenden - aber wie?

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.

Freakhouse

Benutzer
Registriert
15. Apr. 2013
Beiträge
114
Reaktionspunkte
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?
 
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
 
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 :)
 
Du hast den zweifachen Zeilenumbruch nach dem letzten Header vergessen. Das gibt keine gültige Mail;)
 
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
 
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 ;-)
 
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.
 
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"
 
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
 
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