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
