E-Mail versenden / SMS aufs Handy

Hi,

funzt immer noch nicht, auch nicht mit der Zeile von tommi.

Hier das Script nochmal:

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : SMS_Clickatell.ips.php
Trigger  : 
Interval : 
*/
ini_set('include_path', ini_get('include_path').';.;C:/Programme/IP-Symcon/scripts');
//Mail konfiguration
$mailserver = "post.strato.de";
//Benutzername/Passwort
$username = "xxx";
$password = "xxx";
//Absender
$sendermail = "xxx";
$sendername = "";
//Empänger
$receivemail = "sms@messaging.clickatell.com";
$receivename = "";
//Betreff
$subject = "";
//Meldung
$message ="user:xxx
";
$message.="password:xxx
";
$message.="api_id:xxx
";
//$message.="to:xxx
";
$mtext = GetValueString("SMS_Meldetext");
$message.="text:$mtext
";
   //--- Script für Mailversand ---
   //* Keine weitere Konfiguration nötig
   //Klasse für Mailversand importieren
   //(c) by http://phpmailer.sourceforge.net/
   include(IPS_GetScriptFile("class.smtp"));
   //Object erstellen
   $mail = new SMTP();
   //Zum SMTP Server verbinden
   if(!$mail->Connect($mailserver)) {
       echo "Error connecting to MAIL SERVER";
      exit;
   }
   //Handshake

   if(!$mail->Hello()) {
       echo "Error in HELO";
       exit;
   }
    //Anmelden
   if(!$mail->Authenticate($username, $password)) {
       echo "Error in AUTH";
       exit;
   }
   //Mail generieren

   $CRLF = "
";
   $header ="From: \"$sendername\" <$sendermail>".$CRLF;
   $header.="To: \"$receivename\" <$receivemail>".$CRLF;
   $header.="Subject: $subject".$CRLF;
   $header.=$CRLF;
    //Absender angeben
   if(!$mail->Mail($sendermail)) {
       echo "Sender not Accepted";
   } else {      //empänger
       if(!$mail->Recipient($receivemail)) {
         echo "Receptor not accepted!";
      } else {
           if(!$mail->Data($header.$message)) {
                 echo "Error Sending MAIL!";
           }
      }
   }
?>

Und der dazugehörige Fehler:

<br />
<b>Warning</b>:  main() [<a href='function.include'>function.include</a>]: Failed opening '' for inclusion (include_path='.;C:\php5\pear;.;C:/Programme/IP-Symcon/scripts') in <b>C:\Programme\IP-Symcon\scripts\.currentscript</b> on line <b>35</b><br />
<br />
<b>Fatal error</b>:  Class 'SMTP' not found in <b>C:\Programme\IP-Symcon\scripts\.currentscript</b> on line <b>37</b><br />

Die .currentscript sieht natürlich genauso aus, da Script über Execute ausgeführt.

Weiss jemand Rat?

@steiner Du hast das Teil doch am Laufen, oder?

Gruß

Jimmy


Failed opening '' for inclusion 

Keine Datei kann auch nicht geöffnet werden

C:ProgrammeIP-Symconscripts.currentscript

Das kann nicht gehen, da fehlen die Pfadtrenner
ersetze doch jetzt zusätzlich nochmal das include am Anfang zu:

require('class.smtp.php');

das macht das gleiche wie include, bricht aber ab, wenn es die Datei nicht findet.

Tommi

Hallo Jürgen,

hab bei Clickatell gesucht und leider nicht das Com Api gefunden, hast Du ne URL für mich?

Gruß

Jimmy

:slight_smile: Dann schau mal hier

Gruß Jürgen

Hi Tommi,

wenn ich Deine Änderungen einbaue kommt trotzdem noch folgender Fehler:

<br />
<b>Warning</b>:  main() [<a href='function.include'>function.include</a>]: Failed opening '' for inclusion (include_path='.;C:\php5\pear') in <b>C:\Programme\IP-Symcon\scripts\.currentscript</b> on line <b>35</b><br />

Den Ordner „C:\php5\pear“ gibt es bei nicht mal. Hab mal spasseshalber php5 installiert, auch dann nicht dieser Ordner.

In Zeile 35 steht bei mir folgendes:


include(IPS_GetScriptFile("class.smtp"));

Was fehlt noch?

Gruß

Jimmy

Das kann nicht gehen, da fehlen die Pfadtrenner
ersetze doch jetzt zusätzlich nochmal das include am Anfang zu:

PHP-Code:
require(‚class.smtp.php‘);

das macht das gleiche wie include, bricht aber ab, wenn es die Datei nicht findet.

Tommi

hast Du das require statt dem include(IPS_GetScriptFile(„class.smtp“));
eingebaut?
hast Du das


ini_set('include_path', ini_get('include_path').';.;C:\Programme\IP-Symcon\scripts');

drin?

Die Fehlermeldung von pear5 deutet darauf hin, das es nicht so ist.

Tommi

Hallo an alle,

als ipsymcon newbie habe ich ein kleines problem mit dem versand einer sms mit der „loesung“ sendsms + T-COM MMS Tool.

Alles klappt ohne Probleme nur bei der uebergabe von sendsms an das T-COM Tool wird nur die Handynummer uebergeben ! Das Textfeld bleibt leer, leider ?! Daher wird dann auch keine SMS verschickt !

In der neu.sms steht allerdings auch der Text korrekt drin und davor die handynummer.

Habe die Vermutung das es am Zeilenumbruch liegt denn die Handynummer wird ja korrekt uebergeben …

:confused:

Hat jemand eine Idee wie ich das Fixen kann ?!

ALs System verwende ich ein XP-Prof. SP2 mit allen aktuellen Updates, Fixes etc. und IP-S.

Vielen Dank und Gruss
grodke

PS: oder kennt jemand eine andere Loesung evetl. direkt aus IPS heraus eine sms „direkt“ ohne umwege (ohne sms provider etc.) zu versenden.
Ich wuerde evetl. auch an den IPS-PC auch direkt ein Handy anschliessen nur wie ansteuern ?! Hat da jemand Erfahrungen bzw. Ideen. Bin um jeden Tip dankbar !

IPS hat ein SMS-Modul, dass genau das macht. Empfehlen kann ich das M20 von Siemens (eb*y).

Such mal nach „SMSWitch“ hier im Forum.

Toni

Hallo Steiner,
Ich habe (paresy hat mich darauf aufmerksam gemacht), Deinen Script übernommen, zum Mail versenden (Mainthema dieses threads).

Es klappt auch sehr gut. Fast!!! Ich bekomme immer „Error in AUTH“.
Als ich aber spaßes halber das darauf folgende exit auskommentierte, also trotzdem das Mail zu versenden versuchte,
-> Hat das fehlerfrei funktioniert! :eek: Also ich habe das Mail erhalten!

Jetzt irritiert mich das natürlich, weil dein script an dieser Stelle eigentlich abbrechen sollte!
was soll ich nun tun? einfach die Authenticate() Funktion weglassen? bzw. dann keinen Fehler ausgeben, weils eh geht??
Oder können wir der Sache ganz einfach auch auf den Grund gehen und scripttechnisch richtig lösen?

Schöne Grüße und himmlischen Dank für diesen Superscript (mal abgesehen von dem problemchen),
Hinti

Also ich editiere mal eben und adde folgendes:


   include(IPS_GetKernelDir()."/scripts/class.smtp.php");

   //Object erstellen
   $mail = new SMTP();

   //Zum SMTP Server verbinden
   if(!$mail->Connect($mailserver)) {
       echo "Error connecting to MAIL SERVER";
      exit;
   }

   //Handshake
   if(!$mail->Hello()) {
       echo "Error in HELO";
       exit;
   }

   //Anmelden
   if(!$mail->Authenticate($username, $password)) {
       //echo "Error in AUTH";
       //exit;
   }

   //Mail generieren
   $CRLF = "
";
   $header ="From: \"$sendername\" <$sendermail>".$CRLF;
   $header.="To: \"$receivename\" <$receivemail>".$CRLF;
   $header.="Subject: $subject".$CRLF;
   $header.=$CRLF;

   //Absender angeben
   if(!$mail->Mail($sendermail)) {
       echo "Sender not Accepted";
   } else {      //empänger
       if(!$mail->Recipient($receivemail)) {
         echo "Receptor not accepted!";
      } else {
           if(!$mail->Data($header.$message)) {
                 echo "Error Sending MAIL!";
           }
      }
   }

wie du siehst habe ich diese zeilen auskommentiert:
//echo „Error in AUTH“;
//exit;

Außerdem auffällig ist noch folgendes:
Das Mail welches ich erhalte, beinhaltet keinen Absender, Gesendet: keine Angabe

Hi!

Wenn dein mail-server keine Authentifizierung verlangt, weil er wohl intern steht und so eingestellt ist, dann kannst du das AUTH-teil weglassen.
Habe ich bei mir intern so auch, da mein Mailserver so eingestellt ist, dass er als Relay (aber nur intern!) arbeitet.
Du kannst dann auch setzen:

//Benutzername u. Passwort
$username = „“;
$password = „“;

Außerdem auffällig ist noch folgendes:
Das Mail welches ich erhalte, beinhaltet keinen Absender, Gesendet: keine Angabe

Was steht denn bei dir unter?:
//Absender
$sendermail = „absender@name.tld“;
$sendername = „absendername“;

… oh jeh - das ist ja alles schon Jaaaahre her …

Ich verwende inzwischen - es funktioniert zuverlässig:http://clickatell.com/

siehe auch: http://www.ipsymcon.de/forum/showpost.php?p=5777&postcount=15

MST

Hallo nancilla,
diese Felder sind schon ausgefüllt, eine absender adresse steht schon da,
moment, na blödsinn des Datum fehlt… siehe bild

ips03.JPG

Hallo Hinti,

moment, na blödsinn des Datum fehlt… siehe bild

Das wird dann, denke ich vom Mailserver eingetragen.
Wohin sendest du nun eigentlich?
Int. Mailserver, oder extern?
Hast du den Mercury32 im Einsatz?
Den hatte ich vor Jahren auch schonmal für einige Zeit eingesetzt.

nein hab ich weggeschmissen. viel zu kompliziert. da muss
man tausende von einstellungen machen die mir nix sagen!

Ich verwende nun steiners script, mit dem sub-script („scripts/class.smtp.php“); geht ganz gut. fast genauso wie eben im mainposting.
leider möchte ich nun auch noch sms verschicken. dazu werde ich mich auch bei Clickatell für den SMS Gateway Service anmelden.

Da gibts leider Probleme, die akzeptieren meine telefonnummer nicht. Tja, österreichische one-mobilnummern
weichen wohl stark von den allgemeinen dieser welt ab :rolleyes: Ich habe ihnen eine Info gesendet, vielleicht können wir das Problem dann ja noch lösen.

Diese Woche habe ich leider keine oder nur wenig Zeit. Melde mich dann was rausgekommen ist.

Hallo,
besonders an grodke,

habe die Frage erst heute gesehen. Das „sendsms.exe“ stammt von mir.
Tut mir leid, wenn es bei dir nicht läuft.

Inzwischen habe ich aber eine Lösung gefunden die ohne das „sendsms.exe“ auskommt und dank PHP- für jeden durchschaubar und abänderbar seien sollte.

Die Lösung nutzt „Windows Scripting“ um die Tasteneingabe an das T-Com MMS Programm zu senden.
Mit dieser Methode sollte es auch möglich sein andere Programme aus IPS heraus „fern zu steueren“. Habe ich aber noch nicht probiert.

Gruß
Stefan

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : WS_SendSMS.ips.php
Trigger  : 
Interval : 

- um mit dem T-Com Programm "T-Com MMS" und ISDN-Karte SMSe  zu versenden.
- VORBEREITUNGEN:
- Download:
-  http://www.t-home.de/dwnl/as/mms
-  Das Programm "T-Com MMS" muss auf dem IPS Rechner laufen,
   es muss bereits konfiguriert und auf dem Rechner aktiv sein.

Die Steuerung erfolgt über WindowsScripting
Windows Scripting informationen zum "SendKeys"-Befehl finden sich hier:
http://www.microsoft.com/technet/scriptcenter/guide
unter dem Pfad:
Script Center Home > Microsoft Windows 2000 Scripting Guide > Scripting Concepts and Technologies for System Administration > WSH Primer > WSH Objects > WshShell Object


*/

    // WindowsScripting COM-Object einbinden
    $shell = new COM("WScript.Shell");

    // Ruft T-COM MMS Programm in den Vordergrund 
    $res = $shell->appactivate("T-Com MMS - Messaging mit T-ISDN");

    // wenn bis hier alles geklappt hat, dann die notwendigen Tastendrücke simulieren 
    if( $res ){
       $shell->SendKeys("{ENTER}%DS");      // Menü->Datei->neue SMS
       $shell->SendKeys("01701234567");     // die Telefonnummer des Empfängers
       $shell->SendKeys("{TAB}{TAB}");      // weiter zur Textengabe
       $shell->SendKeys(date("j M Y - H:i:s")." Dies ist die Nachricht "); // hier der SMS-Text
       $shell->SendKeys("{TAB}{TAB}{TAB}"); //weiter zum OK-Button
       $shell->SendKeys("{ENTER}");         // und abschicken
    }
    else
    {
      echo  "FEHLER:  T-Com MMS - Messaging mit T-ISDN nicht gefunden!";
    }


    $shell = null; // COM-Objekt wieder freigeben

?>

Hallo,
als das mit dem fehlendem Sendedatum hat mich auch gestört.
Läßt sich leicht beheben im Script nach „//Mail generieren“
eine weitere Zeile einfügen:
$header.=„Subject: $subject“.$CRLF;
neu: $header.="Date: ".date(„r“).$CRLF;
$header.=$CRLF;

Seitdem ist bei mir immer auch ein Sendedatum.

Gruß
Thomas

s.jungen hatte mal in

http://www.ip-symcon.de/forum/showthread.php?t=2742

eine Lösung für das Internet beschrieben.
Klappt bei uns seit nun 10 Monaten sehr zuverlässig ohne große Zeitverzögerung.

Preise zwischen 1,79 und 7 Cent je nach Prio bei www.smskaufen.com. Über eine Tarif-Kennung (SMSKAUFEN - SMS Gateway - SMS Massenversand - Briefversand - Faxversand) kann automatisch der Versandweg von „Über das Ausland“ bis zu „Direkter Modem-Versand“ und problemlos auch SMS mit über 160 Zeichen realisiert werden.

Täglich sendet IPS uns damit SMS.

Wir prüfen dabei ob:

  • Die für uns relevanten IPS-Variablen regelmäßig aktualisiert werden,
  • Störmeldungen von Heizungs-Brennern, Ölpumpen etc. vorhanden sind,
  • Türen ab einer bestimmten Uhrzeit geschlossen sind,
  • Abnormale Temperaturen im Raum vorliegen (Brandmeldung),
  • Die Server ein angenehmes Raumklima haben (Klimaanlage),

und was sonst noch anfällt.

Wir steuern das Gateway von SMSkaufen dabei über einen http-Aufruf an.
Das Gateway funktioniert aber auch sehr gut mit einer Ansteuerung per E-Mail. Einach eine Mail an t2@smskaufen.com, im Betreff den Login, PWD, Absendernummer und falls Gewünscht einen Namen rein, und im Body dann Text bis 1.560 Zeichen.

Schnittstellenbeschreibung gibt es leider nur für angemeldete User.

Ende der Werbesendung…

Noch etwas Code:


//***************************************************************************
include ("C:\Programme\IP-SYMCON\scripts\funktion.php");

// ************** Timeout-Überwachung einzelner Variablen **************
$timeout="1800"; //30 min
$watcharr=array("W1-Temp-Kessel-Aussen", "W1_Temp_Pfo_Eing", "W1_Kessel1", "Digi-Poti");
foreach($watcharr as $item)
{
  $itemtime = IPS_GetUpdateTime($item);
  $itemwert = GetValueFloat($item);
  if($itemtime > 0)
  {
  $ende=$itemtime+$timeout;
  //Variable gefunden
    if(($ende) < time())
      {
         SetValueFloat($item,$itemwert);   // Neuer Timeout
         sms("Variable ".$item." wurde 30 Min nicht mehr aktualisiert","2","0049170xxxx");
         sms("Variable ".$item." wurde 30 Min nicht mehr aktualisiert","2","0049172xxx");
          echo "Alarm! Variable ".$item." wurde 30 Min nicht mehr aktualisiert
";
          echo "";
        }
  }
}

//********** Temperatur im Server-Raum 25 Grad***************************************
$AlarmTemp2=25;
$watchtemp=array("W1-Temp-KellerServer");
foreach($watchtemp as $item)
{ $temperatur = GetValueFloat($item);
  if($temperatur > $AlarmTemp2)
  {
//  sms("Temperatur-Alarm ".$watchtemp." hat ".$temperatur." Grad.","2","0049172xxxx");
    echo "Alarm! Variable ".$item." hat ".$temperatur." Grad.
";
    }
}

//********** Temperatur Alarm  über 35 Grad ************************************
$AlarmTemp2=35;
$watchtemp=array("W1_Temp_Pfo_Hint","W1_Temp_Pfo_Eing",
                 "W1_Temp_Caffet_Relaisbox");
foreach($watchtemp as $item)
{
  $temperatur = GetValueFloat($item);
  if($temperatur > $AlarmTemp2)
  {
    sms("Temperatur-Alarm ".$item." hat ".$temperatur." Grad.","2","0049172xxxxx");
    echo "Alarm! Variable ".$item." hat ".$temperatur." Grad.
";
    }
}

Auch wenns alt ist.
Wie kann ich eine Mail an mehrere Empfänger senden?
xxx@xx.de; xxx@xxx.de
geht nicht, wäre ja auch zu einfach gewesen.

Ich möchte halt eine Störungsmail an mich und den Servicetechniker versenden,
ohne 2 Scripte anlegen zu müssen.
PHP Noob…

Bernd

TT_SendMailEx aus den ToniTools (www.tonis-welt.com) kann eine BCC Liste verarbeiten.

Auf der Webseite ist noch die Version für IPS1 zum Download. die TT für IPS2 sind in der öffentlichen Beta. Einfach PM an mich. :wink:

Gruß,

Toni

Hallo Bernd,
oder du schreibst Einen Script, und die EMail-Adresse in dem Script liest du aus einer Variable aus die du anlegst.
Dann kannst du den Script zweimal aufrufen, wobei du vor jedem Aufruf einfach die Variable änderst.

Oder du schreibst einen Script der eine Funktion beinhaltet die als Parameter die EMail Adresse hat. (Die Funktion ist natürlich der Mail-versende Code).
Und dann includest du den Script in deinem Script der zuständig ist fürs versenden, und rufst dann die Funktion zweimal hintereinander mit der entsprechenden Email auf.

Ich habs jetzt selber so noch nicht probiert, aber ich würds so machen (versuchen :rolleyes:).

MfG Hinti