Der ShellMailer ist ein PHP-Script, mit dessen Hilfe per CLI / Script-Dateien E-Mails inkl. Anhang versendet werden können.
Bei Bedarf wird ein Log-File geschrieben und versendete E-Mails lokal als HTML-Datei abgelegt.
Hinweis: Das Script ist nicht dafür gedacht SPAM o.ä. zu verbreiten.
Lege dir eine neue PHP-Datei für das Script an. Bspw. per Terminal mit folgenden Befehl:
sudo nano /pfad/zu/shell_mailer.php
Füge das u.s. Script ein, passe es mit deinen Angaben an und speichere die Datei dann per STRG + O, schließe sie per STRG + X.
Das Script muss nun noch ausführbar gemacht werden:
sudo chmod 775 /pfad/zu/shell_mailer.php
Aufruf des PHP-Scripts per CLI / innerhalb eines Shell-Scripts:
sudo php /pfad/zu/shell_mailer.php "AN@MAIL.TLD" "VON_NAME" "VON@MAIL.TLD" "BETREFF_ZEILE" "TEXTINHALT" "PFAD_ZUM_ANHANG1, PFAD_ZUM_ANHANG2"
Anzeige
Das Script
<?php /* * ShellMailer_PHP * * @AUTOR: Sascha Syring * @WEBSEITE: www.sascha-syring.net * @VERSION: 1.0_RD09112022 * * Ein einfaches, anpassbares PHP-Script welches über die CLI / Kommandozeile ausgeführt wird * und Mails versendet. - PHP und somit ein Webserver müssen installiert und eingerichtet sein. * * Zudem muss auf dem System sendmail konfiguriert und für PHP eingerichtet sein. Eine Anleitung * hierfür ist hier zu finden: https://www.sascha-syring.net/den-pi-einrichten/e-mails-versenden-mit-msmtp/ * * Aufruf: sudo php /pfad/zu/shell_mailer.php "AN@MAIL.TLD" "VON_NAME" "VON@MAIL.TLD" "BETREFF_ZEILE" "TEXTINHALT" "ANHANG1, ANHANG2" * Optionale Parameter (müssen mindestens leer ("") übergeben werden): * - VON_NAME * - VON@MAIL.TLD * - ANHANG * * Die E-Mail wird im HTML-Format versendet und unterstützt den "Darkmode" auf kompatiblen Endgeräten * * * */ // allgemeine Variablen $var_an = $argv[1]; $var_von_name = $argv[2]; $var_von_mail = $argv[3]; $var_betreff = $argv[4]; $var_text = $argv[5]; $var_anhang_pfad = $argv[6]; $var_default_from_name = "STANDARD_ABSENDERNAME"; // Standard Absendername $var_default_from_mail = "STANDARD_ABSENDERMAIL"; // Standard Absender-Email $use_logfile = 1; // 1 = Logfile schreiben, 0 = kein Logfile schreiben $use_mailarchive = 1; // 1 = gesendete E-Mails archivieren, 0 = gesendete E-Mails nicht archivieren $var_logfile_dir = "/var/log/shell_mailer"; // Verzeichnis für Logilfe und Mail-Archiv $var_logfile_path = $var_logfile_dir."/shell_mailer.log"; // Pfad zum Logfile für versendete Mails $use_mail_header_image = 1; // 1 = Header-Bild anzeigen, 0 = kein Header-Bild anzeigen $var_mail_header_image = "PFAD_ZUM_HEADERBILD"; // Bild für den Header der E-Mail if($var_anhang_pfad != "") { if(strpos($var_anhang_pfad, ",") !== false){ $var_anhang_pfad = explode(",", $var_anhang_pfad); $var_anhang_pfad = array_map("trim", $var_anhang_pfad); } if(!is_array($var_anhang_pfad)) { $var_anhang_pfad = array($var_anhang_pfad); } $attachments = array(); foreach($var_anhang_pfad AS $key => $val) { if(is_int($key)) { $datei = $val; $name = basename($datei); } else { $datei = $key; $name = basename($val); } $size = filesize($datei); $data = file_get_contents($datei); $type = mime_content_type($datei); $attachments[] = array("name"=>$name, "size"=>$size, "type"=>$type, "data"=>$data); } } if ( !is_dir($var_logfile_dir) ) { mkdir($var_logfile_dir, 0755); mkdir($var_logfile_dir."/mails", 0755); } elseif ( !is_dir($var_logfile_dir."/mails") ) { mkdir($var_logfile_dir."/mails", 0755); } // Mail aufbauen $message = " <html> <head> <meta name='color-scheme' content='light dark'> <meta name='supported-color-schemes' content='light dark'> </head> <body> <div style='max-width:800px'>"; if ($use_mail_header_image == 1){ $message .= " <img src='$var_mail_header_image' width='100%'> "; } $message .= " <p>$var_text</p> </div> </body> </html> "; $mime_boundary = "--".md5(uniqid(time())); if($var_von_name == "") { $var_von_name = $var_default_from_name; } if($var_von_mail == "") { $var_von_mail = $var_default_from_mail; } $header = "From: $var_von_name <$var_von_mail>\r\n"; $header .= "Reply-To: $var_von_mail\r\n"; $header .= "MIME-Version: 1.0\r\n"; $header .= "Content-Type: multipart/mixed; boundary=\"".$mime_boundary."\"; charset=utf-8\r\n"; $header .= "Content-Transfer-Encoding: 8bit\r\n"; $header .= "X-Mailer: ShellMailer_PHP @ PHP " . phpversion(). "\r\n"; $header .= "This is a MIME encoded message.\r\n"; $content = "--" . $mime_boundary . "\r\n"; $content .= "Content-Type: text/html; charset=utf-8\r\n"; $content .= "Content-Transfer-Encoding: 8bit\r\n"; $content .= $message."\r\n"; // Anhänge verarbeiten if($var_anhang_pfad != ""){ foreach($attachments AS $dat) { $data = chunk_split(base64_encode($dat['data'])); $content.= "--".$mime_boundary."\r\n"; $content.= "Content-Disposition: attachment;\r\n"; $content.= "\tfilename=\"".$dat['name']."\";\r\n"; $content.= "Content-Length: .".$dat['size'].";\r\n"; $content.= "Content-Type: ".$dat['type']."; name=\"".$dat['name']."\"\r\n"; $content.= "Content-Transfer-Encoding: base64\r\n\r\n"; $content.= $data."\r\n"; } } $content .= "--".$mime_boundary."--"; // Mail versenden if(mail($var_an, $var_betreff, $content, $header)) { if($use_logfile == 1) { // Logfile schreiben $var_log_infos = array("\n### E-MAIL -- START -- STATUS: OK ###\n", "ID: $mime_boundary", "Datum: ".date("d.m.Y H:i:s"), "An: $var_an", "Von: $var_von_mail", "Betreff: $var_betreff", "Text: $var_text\n", "### E-MAIL -- ENDE ###"); $var_log_entry = implode("\n", $var_log_infos); $var_logfile=fopen($var_logfile_path,"a"); fputs($var_logfile,$var_log_entry."\n"); fclose($var_logfile); } if($use_mailarchive == 1) { // Mail als HTML-Version lokal ablegen $var_mail_infos = "<p><b>Von: </b>".$var_von_name." (".$var_von_mail.")</br> <b>An: </b>$var_an</br> <b>Datum: </b>".date("d.m.Y H:i:s")."</br></br> <b>Betreff: </b>$var_betreff</p><hr>"; $var_mailfile = fopen($var_logfile_dir."/mails/".$mime_boundary.".html", "a"); fputs($var_mailfile,"<font style='font-family: arial;'>".$var_mail_infos.$content."</font>"); fclose($var_mailfile); } } else { if($use_logfile == 1) { // Logfile schreiben $error = error_get_last(); $var_log_infos = array("\n### E-MAIL -- START -- STATUS: FAIL ###\n", "ID: $mime_boundary", "Datum: ".date("d.m.Y H:i:s"), "An: $var_an", "Von: $var_von_mail", "Betreff: $var_betreff", "Text: $var_text\n", "Fehler: ".$error["message"]."\n", "### E-MAIL -- ENDE ###"); $var_log_entry = implode("\n", $var_log_infos); $var_logfile=fopen($var_logfile_path,"a"); fputs($var_logfile,$var_log_entry."\n"); fclose($var_logfile); } } ?>
Anzeige