ich habe hier mal ein beispiel, wie man das eintreffen von neuen mails in seinem postfach (z.B. bei gmx) auswerten und ggf. durch eine sprachausgabe vorlesen lassen kann. weiterhin wird dies in ein log oder ein textfenster geschrieben.
die lösung ist eine mischung zwischen makrosprache und php-bestandteilen. für das abrufen von mails benötigt man eine php-extension namens "php_imap.dll". diese ist im php-paket unter extensions vorhanden. diese .dll einfach ins homeputer-root-verzeichnis kopieren und folgende stellen der php.ini anpassen (ggf .ini erstellen):
Code: Alles auswählen
; Directory in which the loadable extensions (modules) reside.
extension_dir = "c:\homeputerstudio"
Code: Alles auswählen
; Windows Extensions
; Note that ODBC support is built in, so no dll is needed for it.
; Note that many DLL files are located in the extensions/ (PHP 4) ext/ (PHP 5)
; extension folders as well as the separate PECL DLL download (PHP 5).
; Be sure to appropriately set the extension_dir directive.
;extension=php_mbstring.dll
;extension=php_bz2.dll
;extension=php_curl.dll
;extension=php_dba.dll
;extension=php_dbase.dll
;extension=php_exif.dll
;extension=php_fdf.dll
;extension=php_filepro.dll
;extension=php_gd2.dll
;extension=php_gettext.dll
;extension=php_ifx.dll
extension=php_imap.dll
;extension=php_interbase.dll
;extension=php_ldap.dll
;extension=php_mcrypt.dll
;extension=php_mhash.dll
;extension=php_mime_magic.dll
;extension=php_ming.dll
;extension=php_mssql.dll
;extension=php_msql.dll
zunächst wird eine "globale" variable benötigt, die ich - zusätzlich zu vielen anderen - in einem eigens dafür angelegten objekt "var" gespeichert habe. diese lautet
- var.anzahlMail
dieser variablen wird die gesamtzahl der mails zugeordnet, die derzeit im postfach vorhanden ist. dies kann man durch folgendes makro realisieren, welches beim programmstart ein mal ausgeführt werden muss:
Code: Alles auswählen
**objektname: MAKROMailAnzahl
** ausführungsintervall des makros: beim systemstart (z.b. im objekt *init)
<?
// mailbox öffnen, die attribute "pop.gmx.net" = pop3-host, "name@gmx.net" = benutzername oder mail-adresse und "12345678" = passwort entsprechend anpassen
$mbx = imap_open ("{pop.gmx.net:110/pop3}INBOX", "mail@gmx.net", "12345678") or die("POP3 Connection kann nicht hergestellt werden");
// es wird die gesamtzahl der vorliegenden nachrichten im pop3-postfach ermittelt und in die variable var.anzahlMail geschrieben
$V_Var_anzahlMail = imap_num_msg($mbx);
// schließen der mailbox und der pop3-verbindung
imap_close($mbx);
?>
** auswerten eventueller fehler in ein logfile
wenn scriptoutput <> "" dann
LOGFile := "PHP: " + scriptoutput
aufrufen(LOGFile)
scriptoutput := ""
endewenn
in diesem makro müssen folgende objekt-variablen definiert werden
- anzahl (typ zahl)
neu (typ zahl)
text (typ zeichen)
speech (typ zeichen)
Code: Alles auswählen
** ausführungsintervall des makros: jede minute
** zunächst die prüfung auf 10-min-abstände, damit der mailserver nicht zu oft angesprochen wird.e
** weiterhin wird eine bedingung geprüft, ob die mails überhaupt per sprachausgabe ausgegeben werden sollen.
wenn uhrzeit =# "**:*0:**" und OBJAnsageMail = "an" dann
gehezu ausfuehren
endewenn
verlassen
ausfuehren:
** jetzt kommt der php-teil, um die mails vom pop3-server abzufragen
<?
// mailbox öffnen, die attribute "pop.gmx.net" = pop3-host, "name@gmx.net" = benutzername oder mail-adresse und "12345678" = passwort entsprechend anpassen
$mbx = imap_open ("{pop.gmx.net:110/pop3}INBOX", "name@gmx.net", "12345678") or die("POP3-Connection kann nicht hergestellt werden");
// ermitteln der aktuellen anzahl von mails im postfach
$i = imap_num_msg($mbx);
// auslesen des mail-headers
$header = imap_header($mbx, $i);
// auslesen weiterer attribute des mail-headers
$betreff = $header->subject;
$absender = $header->from[0]->personal;
$absender_email = $header->from[0]->mailbox."@".$header->from[0]->host;
// generieren des strings für die anzeige (z.b. in einem log oder in einem textfenster (siehe unten)
$text_text = "von ".$absender_email;
// generieren des strings für die sprachausgabe
$text_speech = "neue e-mail eingegangen . absender der e-mail ist . ".$absender." . betreff . ".$betreff;
// übernehmen des inhaltes in variablen des makros
$V_MAKROMailEingang_text = $text_text;
$V_MAKROMailEingang_speech = $text_speech;
$V_MAKROMailEingang_anzahl = $i;
imap_close($mbx);
?>
** auswerten eventueller fehler in ein logfile
wenn scriptoutput <> "" dann
LOGFile := "PHP: " + scriptoutput
aufrufen(LOGFile)
scriptoutput := ""
endewenn
** jetzt erfolgt die prüfung, ob die anzahl der aktuellen mails gleich oder sogar niedriger (durch löschen von mails) sind, als die zuletzt gespeicherte anzahl
** wenn dies zutrifft, wird die gespeicherte anzahl der mails auf den aktuellen wert gesetzt und das makro abgebrochen
wenn anzahl <= var.anzahlMail dann
var.anzahlMail := anzahl
verlassen
** ansonsten wird die anzahl der neu eingetroffenen mails in die makro-variable neu gespeichert und die gespeicherte anzahl aktualisiert
sonst
neu := anzahl - var.anzahlMail
var.anzahlMail := anzahl
** ausgabe der mail als sprachausgabe
sprachausgabe(speech)
** für die anzeige (z.b. im log oder anzeigefenster) kann man jetzt - abhängig von der anzahl der neuen mails - die ausgabe variieren
wenn neu > 1 dann
LOGFile := "IT: " + neu + " neue E-Mails eingegangen, zuletzt " + text
sonst
LOGFile := "IT: Neue E-Mail eingegangen " + text
endewenn
aufrufen(LOGFile)
endewenn
Code: Alles auswählen
$nachricht = quoted_printable_decode(imap_fetchbody($mbx, $i, 1));
viel spass :)