E-Mail senden: Unterschied zwischen den Versionen

Aus FHEMWiki
KKeine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
Um aus FHEM heraus <nowiki>'''</nowiki>E-Mails senden<nowiki>'''</nowiki> zu können, gibt es unterschiedliche Methoden, abhängig von der verwendeten Plattform.
Um aus FHEM heraus E-Mails senden zu können, gibt es unterschiedliche Methoden, abhängig von der verwendeten Plattform.


Lange Zeit war <code>sendemail</code> sehr beliebt. Da aber die Homepage des Projekts nicht mehr online ist und Probleme nur noch via erhöhtem Supportaufwand gelöst werden, sollte diese Option als veraltet betrachtet werden.
Lange Zeit war <code>sendemail</code> sehr beliebt. Da aber die Homepage des Projekts nicht mehr online ist und Probleme nur noch via erhöhtem Supportaufwand gelöst werden, sollte diese Option als veraltet betrachtet werden.


Eine Liste mit ressourcensparenden E-Mails Clients findet man bei dem OpenWRT Projekt: https://openwrt.org/docs/guide-user/services/email/smtp.client
Eine Liste mit ressourcensparenden E-Mails Clients findet man bei dem OpenWRT Projekt: https://openwrt.org/docs/guide-user/services/email/smtp.client
MSGMail ist ein FHEM eigenes Modul zum Versenden, die Einrichtung ist allerdings nicht gänzlich einfach. Anfängern sei die cURL Methode empfohlen.


=== MSGMail (Linux, Windows) ===
=== MSGMail (Linux, Windows) ===
Zeile 11: Zeile 13:
[https://curl.se/ cURL] kann auf praktisch [https://curl.se/download.html jedem Betriebssystem] genutzt werden, [https://curl.se/windows/ selbst unter Windows]. Es kann direkt mit einem SMTP Server E-Mails versenden und stellt damit eine moderne, portable und sichere Option zum Versenden von E-Mails dar.
[https://curl.se/ cURL] kann auf praktisch [https://curl.se/download.html jedem Betriebssystem] genutzt werden, [https://curl.se/windows/ selbst unter Windows]. Es kann direkt mit einem SMTP Server E-Mails versenden und stellt damit eine moderne, portable und sichere Option zum Versenden von E-Mails dar.


In FHEM richtet man sich ein Device ein und passt die Details (<code>$emailTo, $emailFrom, $emailServer</code>) an.<syntaxhighlight lang="perl">
In FHEM richtet man sich ein Device ein und passt die Details (<code>$emailTo, $emailFrom, $emailServer</code>) an. Das Programm cURL muss installiert sein (z.B. mit <code>apt install curl</code>, oder durch Herunterladen und Installieren von der [https://curl.se cURL-Webseite]).<syntaxhighlight lang="perl">
defmod sendMail dummy
defmod sendMail dummy
attr sendMail readingList message password
attr sendMail readingList message password

Version vom 18. Februar 2025, 18:05 Uhr

Um aus FHEM heraus E-Mails senden zu können, gibt es unterschiedliche Methoden, abhängig von der verwendeten Plattform.

Lange Zeit war sendemail sehr beliebt. Da aber die Homepage des Projekts nicht mehr online ist und Probleme nur noch via erhöhtem Supportaufwand gelöst werden, sollte diese Option als veraltet betrachtet werden.

Eine Liste mit ressourcensparenden E-Mails Clients findet man bei dem OpenWRT Projekt: https://openwrt.org/docs/guide-user/services/email/smtp.client

MSGMail ist ein FHEM eigenes Modul zum Versenden, die Einrichtung ist allerdings nicht gänzlich einfach. Anfängern sei die cURL Methode empfohlen.

MSGMail (Linux, Windows)

FHEM bringt ein eigenes Device zum Senden von E-Mails mit, welches in Perl implementiert ist: MSGMail, https://fhem.de/commandref.html#MSGMail

cURL (Linux, Windows)

cURL kann auf praktisch jedem Betriebssystem genutzt werden, selbst unter Windows. Es kann direkt mit einem SMTP Server E-Mails versenden und stellt damit eine moderne, portable und sichere Option zum Versenden von E-Mails dar.

In FHEM richtet man sich ein Device ein und passt die Details ($emailTo, $emailFrom, $emailServer) an. Das Programm cURL muss installiert sein (z.B. mit apt install curl, oder durch Herunterladen und Installieren von der cURL-Webseite).

defmod sendMail dummy
attr sendMail readingList message password
attr sendMail setList message password
attr sendMail userReadings result:message:.* {\
	my $emailTo   = 'you@example.com';;\
	my $emailFrom = 'fhem@domain.com';;\
	my $emailServer = 'mail.smtpserver.de';;\
	\
	# Passwort aus getKeyValue abrufen\
	my ($err, $emailPass) = getKeyValue("${name}_password");;\
	if ($err || !defined $emailPass) {\
		return "Error retrieving password: $err";;\
	}\
	\
	my $message = ReadingsVal($name, 'message', '???');;\
	my $subject = "$name: FHEM Nachricht";;\
	\
	# Betreff extrahieren und aus der Nachricht entfernen\
	if ($message =~ s/(?:Subject|Betreff)="(.*?)"//) {\
		$subject = $1;;\
	}\
	\
	# Empfänger extrahieren und aus der Nachricht entfernen\
	if ($message =~ s/(?:To|An)="(.*?)"//) {\
		$emailTo = $1;;\
	}\
	\
	#my $cmd = "echo 'Subject: $subject\\nFrom: $emailFrom\\nTo: $emailTo\\n\\n$message' | ";;\
	my $cmd = "echo 'Subject: $subject\\r\\n";;\
	$cmd .= "From: $emailFrom\\r\\n";;\
	$cmd .= "To: $emailTo\\r\\n";;\
	$cmd .= "Content-Type: text/plain;; charset=UTF-8\\r\\n";;\
	$cmd .= "\\r\\n";;\
	$cmd .= "$message' | ";;\
	\
	$cmd .= "curl -m 2.0 --noproxy '*' --no-progress-meter --ssl-reqd smtps://$emailServer:465 ";;\
	$cmd .= "--user '$emailFrom:$emailPass' --mail-from '$emailFrom' --mail-rcpt '$emailTo' ";;\
	$cmd .= "--write-out 'Email sent with status %{http_code}\n' ";;\
	$cmd .= "--upload-file - 2>&1";;\
	\
	return qx/$cmd/;;\
},\
result:password:.* {\
	# Passwort speichern\
	my $ret = setKeyValue("${name}_password", ReadingsVal($name, 'password', undef)) // "password stored";;\
	\
	#password wieder aus der Variablen rausnehmen, soll nicht sichtbar bleiben:\
	#\
	# Hinweis: das Password taucht beim Setzen hierüber im Event-Log auf!\
	# Alternativ: { setKeyValue("sendMail_password", "geheimesPasswort") }\
	readingsBulkUpdate($hash, "password", "****");;\
	\
	return "$ret";;\
}

Das Passwort setzt man mit:

  • set sendMail password geheimesPasswort
  • Alternativ, damit das Passwort nicht im Log auftaucht: { setKeyValue("sendMail_password", "geheimesPasswort") }

E-Mails kann man dann Senden mit:

  • set sendMail message Mein Text (es wird der Standardbetreff und Empfänger aus dem Snippet genutzt)
  • set sendMail message Betreff="Mein Betreff" Mein Text(es wird der Empfänger aus dem Snippet genutzt)
  • set sendMail message Subject="Dies ist ein Test" Mein Text
  • set sendMail message To="jemand@example.com" Mein Text
  • set sendMail message An="jemand@example.com" Mein Text
  • set sendMail message An="jemand@example.com" Betreff="Mein Betreff" Mein Text
  • set sendMail message To="jemand@example.com" Subject="Mein Betreff" Mein Text
  • set sendMail message Subject="✅ Dies ist ein Test" Meldung mit Emoji ⚽ geht auch

Forumlink

https://forum.fhem.de/index.php?topic=140814.0

EXIM4 (Debian)

Eine Anleitung zum Versenden von E-Mails mit Exim ist als PDF verfügbar: PDF

SSMTP (OpenWRT, embedded Distros)

Installation

opkg update
opkg install ssmtp_2.64-4_mpc85xx.ipk

Damit ssmtp funktioniert müssen die Dateien /etc/ssmtp/ssmtp.conf und /etc/ssmtp/revaliases angepasst werden.

/etc/ssmtp/ssmtp.conf

 root=arnold@gmx.net
 mailhub=mail.gmx.net:465
 rewriteDomain=gmx.net
 hostname=gmx.net
 FromLineOverride=YES
 UseTLS=YES
 #UseSTARTTLS=YES
 AuthUser=arnold@gmx.net
 AuthPass=Passwort_von_arnold@gmx.net

/etc/ssmtp/revaliases

 root:arnold@gmx.net:mail.gmx.net:465

In der 99_myUtils folgende Unterroutine einfügen:

sub OpenWRTMail 
{ 
 my $rcpt = shift;
 my $subject = shift; 
 my $text = shift; 
 my $ret = "";
 my $sender = "dockstar\@heye-tammo.de"; 
 Log 1, "sendEmail RCP: $rcpt, Subject: $subject, Text: $text";
 $ret .= qx(echo -e 'to:$rcpt\n from:$sender\nsubject:$subject\n$text\n' | ssmtp $rcpt);
 $ret =~ s,[\r\n]*,,g;    # remove CR from return-string 
 Log 1, "sendEmail returned: $ret"; 
}

PHP Mail Funktion (Synology DiskStation)

Beim DSM 3.2 funktioniert der php-mail-Befehl, so dass man mittels folgendem Modul E-Mails versenden kann:

sub sendmail($$$) {
 my($empf, $subj, $nachricht) = @_;
 system("php -r 'mail(\"$empf\",\"$subj\",\"$nachricht\");'");
}

Sendemail (Veraltet, Debian-basierende Distros)

Es handelt sich um ein Perl Programm, dass man aus den Paketquellen installieren kann.

Es gibt Probleme:

weswegen diese Lösung als technisch überholt gelten sollte.


Die archivierte Doku zu sendemail befindet sich in der Änderungshistorie: https://wiki.fhem.de/w/index.php?title=E-Mail_senden&oldid=37524