/mail/mail.php?rec=user@domain.endung&sub=Betreff&mes=text%20der%20gesendet%20werden%20soll
error_reporting(E_ALL);
if (isset($_GET["rec"])){ $rec = urldecode($_GET["rec"]); } else { $rec = ""; }
if (isset($_GET["sub"])){ $sub = urldecode($_GET["sub"]); } else { $sub = ""; }
if (isset($_GET["mes"])){ $mes = urldecode($_GET["mes"]); } else { $mes = ""; }
// Mail Parameter
$smtp_host = "";
$smtp_port = "25";
$smtp_sec = "tls";
$smtp_user = "";
$smtp_pwd = "";
$smtp_from = "@domain.endung>";
if (strlen($rec) > 0 and strlen($sub) > 0 or strlen($rec) > 0 and strlen($mes) > 0) {
require_once("libphp-phpmailer/class.phpmailer.php");
$body = "\n";
$body .= "".$mes."
\n";
$body .= "\n";
$mail = new PHPMailer(true);
$body = $body;
# $body = eregi_replace("[\]",'',$body);
$body = preg_replace('/ \ /','',$body);
$mail->IsSMTP();
$mail->Host = $smtp_host;
$mail->Port = $smtp_port;
$mail->SMTPSecure = $smtp_sec;
$mail->Username = $smtp_user;
$mail->Password = $smtp_pwd;
$mail->SetFrom($smtp_from, '');
$mail->AddReplyTo($smtp_from);
$mail->Subject = $sub;
$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
$mail->MsgHTML($body);
$mail->AddAddress($rec);
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!
";
}
} else {
echo "Es muss der Empfänger und der betreff angegeben werden";
}
?>
==== Mail mit Bild einer IP Webcam ====
"; }
if (isset($_GET["sub"])){ $sub = urldecode($_GET["sub"]); } else { $sub = ""; }
if (isset($_GET["mes"])){ $mes = urldecode($_GET["mes"]); } else { $mes = ""; }
#http:///mail/cam_mail.php?cam=cam01|cam02&rec=user@domain.com&sub=Haus%20--%3E%20Klingel!
# Voreinstellungen:
// Name => URL mit Zugangsdaten der Kameras
$URLS = array("cam01" => "http:///snapshot.cgi?user=&pwd=", "cam02" => "http:///snapshot.cgi?user=&pwd=");
// Name der Kamera Bilder
$NAM = array("cam01" => "Eingang", "cam02" => "Keller");
$smtp_host = "";
$smtp_port = "25";
$smtp_sec = "tls";
$smtp_user = "";
$smtp_pwd = "";
$smtp_from = "@domain.endung>";
$img_path = "../fotos/images/klingel-cam/";
function getImage($url, $fn, $cam){
#echo "url: $url
";
Global $NAM;
$error = false;
// Zeitstempel:
$title = $NAM[$cam]; #$titel; //"Eingang Rechts"; // Der einzustempelnde Bild-Titel
date_default_timezone_set('Europe/Vienna');
$dateformat = "d.m.Y, H:i:s "; // Datums-/Uhrzeitformat nach http://de2.php.net/manual/de/function.date.php
$titleFont = "ARIALNB.TTF"; // Leer lassen, wenn die Font-Datei nicht existiert.
$titleSize = 15; // Schriftgröße des Titels
$titlePositionX = 2; // In Prozent der Bildbreite von links
$titlePositionY = 97; // In Prozent der Bildhöhe von oben
$dateFont = "ARIALNB.TTF"; // arialbd.ttf Leer lassen, wenn die Font-Datei nicht existiert wichtig z.B. aus windows Font Verzeichnis auf den Server kopieren.
$dateSize = 15; // Schriftgröße des Datums
$datePositionX = 65; // In Prozent der Bildhöhe von links
$datePositionY = 97; // In Prozent der Bildhöhe von oben
$fontColor['r'] = "255"; // Rotanteil der Schriftfarbe
$fontColor['g'] = "255"; // Grünanteil der Schriftfarbe
$fontColor['b'] = "100"; // Blauteil der Schriftfarbe
// Weitere Parameter:
$imgwidth = "640"; // Breite des Bildes in Pixel (für Fehlerseite)
$imgheight = "480"; // Höhe des Bildes in Pixel (für Fehlerseite)
$errorText = "Die Webseite bitte neu laden oder die Cam ist aus."; // Fehlertext
$errorTextPositionX = 4; // In Prozent von links
$errorTextPositionY = 95; // In Prozent von oben
$errorBackgroundColor['r'] = "0"; // Rotanteil der Hintergrundfarbe bei Fehlerbild
$errorBackgroundColor['g'] = "0"; // Grünanteil der Hintergrundfarbe bei Fehlerbild
$errorBackgroundColor['b'] = "0"; // Blauteil der Hintergrundfarbe bei Fehlerbild
# Programmteil:
// erzeuge einen neuen cURL-Handle
$ch = curl_init();
// setze die URL und andere Optionen
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
#curl_setopt($ch, CURLOPT_USERPWD, $credentials);
curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
#curl_setopt($ch, CURLOPT_REFERER, $referer);
// Hole die Daten von der URL:
$imgStream = curl_exec($ch);
// Schließe den cURL-Handle und gebe die Systemresourcen frei
curl_close($ch);
if (($title) or ($dateformat)) {
// Wenn Titel oder Datum gewünscht, diese ins Bild stempeln:
$image = @ImageCreateFromString($imgStream);
if ($image) {
$drawColor = ImageColorAllocate($image, $fontColor['r'], $fontColor['g'], $fontColor['b']);
if ($title) {
if ($titleFont) {
ImageTTFText($image, $titleSize, 0, $imgwidth * $titlePositionX / 100, $imgheight * $titlePositionY / 100, $drawColor, $titleFont, $title);
} else {
ImageString($image, 4, $imgwidth * $titlePositionX / 100, $imgheight * $titlePositionY / 100, $title, $drawColor);
}
}
if ($dateformat) {
if ($dateFont) {
ImageTTFText($image, $dateSize, 0, $imgwidth * $datePositionX / 100, $imgheight * $datePositionY / 100, $drawColor, $dateFont, date($dateformat));
} else {
ImageString($image, 4, $imgwidth * $datePositionX / 100, $imgheight * $datePositionY / 100, date($dateformat), $drawColor);
}
}
} else {
$error = true;
}
if ($error) {
$image = imageCreate($imgwidth, $imgheight);
$background_color = ImageColorAllocate($image, $errorBackgroundColor['r'], $errorBackgroundColor['g'], $errorBackgroundColor['b']);
$drawColor = ImageColorAllocate($image, $fontColor['r'], $fontColor['g'], $fontColor['b']);
if ($dateFont) {
ImageTTFText($image, $dateSize, 0, $imgwidth * $errorTextPositionX / 100, $imgheight * $errorTextPositionY / 100, $drawColor, $dateFont, $errorText);
} else {
ImageString($image, 4, $imgwidth * $errorTextPositionX / 100, $imgheight * $errorTextPositionY / 100, $errorText, $drawColor);
}
}
// Ausgabe des Bildes:
imagejpeg($image, $fn, 85);
} else {
// Weder Titel noch Datum - Bild direkt ausgeben
if (strlen($fn) > 0 ){
imagejpeg($imgStream, $fn, 85);
} else {
echo $imgStream;
}
}
echo "
";
}
if (strpos($cam, "|")){
$c = explode("|", $cam);
foreach ($c as $key => $value) {
#echo "images: tmp/".$value.".jpg
";
$images[$value] = "tmp/".$value.".jpg";
getImage($URLS[$value], "tmp/".$value.".jpg", $value);
$date = new DateTime();
# Uncomment to copy Images with Timestamp in Name to Images share for later review...
#copy("tmp/".$value.".jpg", "../fotos/images/klingel-cam/".$date->format('Ymd_His')."_".$value.".jpg");
}
} else {
$images[$cam] = "tmp/".$cam.".jpg";
getImage($URLS[$cam], "tmp/".$cam.".jpg", $cam);
# Uncomment to copy Images with Timestamp in Name to Images share for later review...
#copy("tmp/".$cam.".jpg", "../fotos/images/klingel-cam/".$date->format('Ymd_His')."_".$cam.".jpg");
}
# Now send Mail with pictures
require_once("libphp-phpmailer/class.phpmailer.php");
$body = "\n";
$body .= "".$mes."
\n";
foreach ($images as $key => $img) {
$body .= "
";
}
$body .= "\n";
$mail = new PHPMailer(true);
$body = $body;
#$body = eregi_replace("[\]",'',$body);
$body = preg_replace('/ \ /','',$body);
$mail->IsSMTP();
$mail->Host = $smtp_host;
$mail->Port = $smtp_port;
$mail->SMTPSecure = $smtp_sec;
$mail->Username = $smtp_user;
$mail->Password = $smtp_pwd;
$mail->SetFrom($smtp_from, '');
$mail->AddReplyTo($smtp_from);
$mail->Subject = $sub;
$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
$mail->MsgHTML($body);
$mail->AddAddress($rec);
if(isset($reco)){
for ($i = 1; $i < count($reco); $i++){
$mail->AddAddress($reco[$i], "");
#echo "Add additional Mail rec: ".$reco[$i]."
";
}
}
foreach ($images as $key => $img) {
$mail->AddEmbeddedImage($img,"img-".$key,$key.".jpg", 'base64', 'image/jpeg');
}
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!
";
}
?>
==== Mail mit Bilder mehrerer Kameras ====
anzupassen!
# Error Reporting zu debug zwecken altivieren
#error_reporting(E_ALL);
# Hier werden die Übergabe Parameter gesetzt und falls diese nicht übergeben wurden mit einem Standard Wert belegt!
if (isset($_GET["cam"])){ $cam = $_GET["cam"]; } else { $cam = "cam01"; }
if (isset($_GET["rec"])){ $rec = urldecode($_GET["rec"]); } else { $rec = "@."; }
if (isset($_GET["sub"])){ $sub = urldecode($_GET["sub"]); } else { $sub = "Haus Kameras"; }
if (isset($_GET["mes"])){ $mes = urldecode($_GET["mes"]); } else { $mes = "Hier die Aktuellen Bilder"; }
#Test Aufruf
#http:////cam_mail.php?cam=cam01|cam04&rec=@.&sub=Haus%20--%3E%20Klingel!
# Wenn das Mail an einen Weiteren Empfaenger Zusätzlich gesendet werden soll, die Mail Adresse in der nächsten Zeile anpassen und aktivieren durch löschen des # Zeichens am Anfang!
# $rec = "haus@.|".$rec;
# Voreinstellungen:
############### Kameras
# URL Beispiel einer Foscam Kamera
#$CA["cam01"]["URL"] = "http:///snapshot.cgi?user=&pwd=";
#$CA["cam01"]["TITLE"] = "Beschreibung die ins Bild eingebettet wird";
# Erste Kamera
$CA["cam01"]["URL"] = "";
$CA["cam01"]["TITLE"] = "";
# Zweite Kamera
#$CA["cam02"]["URL"] = "";
#$CA["cam02"]["TITLE"] = "";
# Dritte Kamera
#$CA["cam03"]["URL"] = "";
#$CA["cam03"]["TITLE"] = "";
# Diese "Liste" kann "Unendlich" Verlängert werden solange der Name (in dem Beispiel oben cam01) Eindeutig ist!
############### Mailserver
$smtp_host = "";
$smtp_port = "25";
$smtp_sec = "tls";
$smtp_user = "";
$smtp_pwd = "";
$smtp_from = "@domain.endung>";
############### Lokale Speicherung
# Wenn die Bild(er) auch Lokal gespeichert werden sollten dann $save_local auf true stellen und einen Relativen Pfad von diesem Script aus angeben wo die Bilder abgelegt werden können --> Ordner erstellen und Rechte für den Benutzer www-data setzen!
$save_local = true;
# Relativer Pfad
$img_path = "../fotos/images/klingel-cam/";
# oder Absoluter Pfad
#$img_path = "./var/www/fotos/images/klingel-cam/";
############################## KEINE ANPASSUNGEN AB HIER NOETIG ###############
if (strpos($rec, "|") > 0){
$reco = explode("|", $rec);
} else {
$reco[0] = $rec;
}
function getImage($url, $fn, $cam, $title){
Global $NAM;
$error = false;
// Zeitstempel:
date_default_timezone_set('Europe/Vienna');
$dateformat = "d.m.Y, H:i:s "; // Datums-/Uhrzeitformat nach http://de2.php.net/manual/de/function.date.php
$titleFont = "ARIALNB.TTF"; // Leer lassen, wenn die Font-Datei nicht existiert.
$titleSize = 15; // Schriftgröße des Titels
$titlePositionX = 2; // In Prozent der Bildbreite von links
$titlePositionY = 97; // In Prozent der Bildhöhe von oben
$dateFont = "ARIALNB.TTF"; // arialbd.ttf Leer lassen, wenn die Font-Datei nicht existiert wichtig z.B. aus windows Font Verzeichnis auf den Server kopieren.
$dateSize = 15; // Schriftgröße des Datums
$datePositionX = 65; // In Prozent der Bildhöhe von links
$datePositionY = 97; // In Prozent der Bildhöhe von oben
$fontColor['r'] = "255"; // Rotanteil der Schriftfarbe
$fontColor['g'] = "255"; // Grünanteil der Schriftfarbe
$fontColor['b'] = "100"; // Blauteil der Schriftfarbe
// Weitere Parameter:
$errorText = "Die Webseite bitte neu laden oder die Cam ist aus."; // Fehlertext
$errorTextPositionX = 4; // In Prozent von links
$errorTextPositionY = 95; // In Prozent von oben
$errorBackgroundColor['r'] = "0"; // Rotanteil der Hintergrundfarbe bei Fehlerbild
$errorBackgroundColor['g'] = "0"; // Grünanteil der Hintergrundfarbe bei Fehlerbild
$errorBackgroundColor['b'] = "0"; // Blauteil der Hintergrundfarbe bei Fehlerbild
# Programmteil:
# erzeuge einen neuen cURL-Handle
$ch = curl_init();
# setze die URL und andere Optionen
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
# Hole die Daten von der URL:
$imgStream = curl_exec($ch);
# Schließe den cURL-Handle und gebe die Systemresourcen frei
curl_close($ch);
if (($title) or ($dateformat)) {
# Wenn Titel oder Datum gewünscht, diese ins Bild stempeln:
$image = @ImageCreateFromString($imgStream);
# Ausgabe des Bildes:
imagejpeg($image, $fn, 85);
$size = getimagesize($fn);
$imgwidth = $size[0];
$imgheight = $size[1];
if ($image) {
$drawColor = ImageColorAllocate($image, $fontColor['r'], $fontColor['g'], $fontColor['b']);
if ($title) {
if ($titleFont) {
ImageTTFText($image, $titleSize, 0, $imgwidth * $titlePositionX / 100, $imgheight * $titlePositionY / 100, $drawColor, $titleFont, $title);
} else {
ImageString($image, 4, $imgwidth * $titlePositionX / 100, $imgheight * $titlePositionY / 100, $title, $drawColor);
}
}
if ($dateformat) {
if ($dateFont) {
ImageTTFText($image, $dateSize, 0, $imgwidth * $datePositionX / 100, $imgheight * $datePositionY / 100, $drawColor, $dateFont, date($dateformat));
} else {
ImageString($image, 4, $imgwidth * $datePositionX / 100, $imgheight * $datePositionY / 100, date($dateformat), $drawColor);
}
}
} else {
$error = true;
}
if ($error) {
$image = imageCreate($imgwidth, $imgheight);
$background_color = ImageColorAllocate($image, $errorBackgroundColor['r'], $errorBackgroundColor['g'], $errorBackgroundColor['b']);
$drawColor = ImageColorAllocate($image, $fontColor['r'], $fontColor['g'], $fontColor['b']);
if ($dateFont) {
ImageTTFText($image, $dateSize, 0, $imgwidth * $errorTextPositionX / 100, $imgheight * $errorTextPositionY / 100, $drawColor, $dateFont, $errorText);
} else {
ImageString($image, 4, $imgwidth * $errorTextPositionX / 100, $imgheight * $errorTextPositionY / 100, $errorText, $drawColor);
}
}
imagejpeg($image, $fn, 85);
} else {
# Weder Titel noch Datum - Bild direkt ausgeben
if (strlen($fn) > 0 ){
imagejpeg($imgStream, $fn, 85);
} else {
echo $imgStream;
}
}
echo "
";
}
if (strpos($cam, "|")){
$c = explode("|", $cam);
$date = new DateTime();
$dd = $date->format('Ymd_His');
foreach ($c as $key => $value) {
$images[$value] = "tmp/".$value.".jpg";
getImage($CA[$value]["URL"], "tmp/".$value.".jpg", $value, $CA[$value]["TITLE"]);
if ($save_local){
#Copy Images with Timestamp in Name to Images share...
copy("tmp/".$value.".jpg", $img_path.$dd."_".$value.".jpg");
}
}
} else {
$images[$cam] = "tmp/".$cam.".jpg";
getImage($URLS[$cam], "tmp/".$cam.".jpg", $cam);
}
require_once("libphp-phpmailer/class.phpmailer.php");
$body = "\n";
$body .= "".$mes."
\n";
foreach ($images as $key => $img) {
$body .= "
";
}
$body .= "\n";
$mail = new PHPMailer(true);
$body = $body;
$body = preg_replace('/ \ /','',$body);
$mail->IsSMTP();
$mail->Host = $smtp_host;
$mail->Port = $smtp_port;
$mail->SMTPSecure = $smtp_sec;
$mail->Username = $smtp_user;
$mail->Password = $smtp_pwd;
$mail->SetFrom($smtp_from, '');
$mail->AddReplyTo($smtp_from);
$mail->Subject = $sub;
$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
$mail->MsgHTML($body);
for ($i = 0; $i < count($reco); $i++){
$mail->AddAddress($reco[$i], "");
}
foreach ($images as $key => $img) {
$mail->AddEmbeddedImage($img,"img-".$key,$key.".jpg", 'base64', 'image/jpeg');
}
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!
";
}
?>
===== Verwendung mit einem CCU / LXCCU Programm =====
Es muss das CUxD Addon installiert und ein System Exec Gerät angelegt sein, dann könnt ihr in euren Scripts mails senden indem ihr folgende Zeilen einfügt:
==== Nur Mail ====
var sub = "Betreff";
var text = "Text";
string url="wget -q -O - 'http:///mail.php?rec=@.&sub=" + sub + "&mes=" + text +"'";
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State(url);
==== Mail mit Bild einer Webcam ====
string url="wget -q -O - 'http:///mail/cam_mail.php?cam=cam01|cam02&rec=@.&sub=Haus%20--%3E%20Klingel!'";
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State(url);
==== Troubleshooting ====
Wenn es Probleme beim senden mit diversen Providern gibt einfach im Internet nach:
phpmailer provider
für [[http://phpmailer.worxware.com/?pg=examplebgmail|Gmail]] habe ich so dieses Beispiel gefunden.