Php + COM für Zugriff auf Microsoft Outlook 2000

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Php + COM für Zugriff auf Microsoft Outlook 2000

    PHP-Code:
    <? 
    $objApp = new COM("Outlook.Application"); 
    $myItem = $objApp->CreateItem(olMailItem); 
    $a=$myItem->Recipients->Add("recipient's email address here"); 
    $myItem->Subject=" Your Subject"; 
    $myItem->Body="Body apears here"; 
    $myItem->Display(); 
    $myItem->Send(); 
    ?>
    Warning: Invoke() failed: Typkonflikt. in c:\apache\users\test\mail.php on line 3

    Fatal error: Call to a member function on a non-object in c:\apache\users\test\mail.php on line 4

    vielleicht weiss jemand ja woran es liegt, hab verschiedene skripte schon gefunden , und alle ham den gleichen fehler.

    (apache 1.3 / Php 4)

  • #2
    ich arbeite in der richtung zwar nicht mit MS aber vielleicht dennoch ein paar vorschläge/hilfen ....

    1. ist auf der maschine auch outlook installiert?

    2. hast du auch mal korrekte email-adressen eingetragen? (recipient's email address here ist KEINE email ... )
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      hm

      hm also das war leider nich sehr hilfreich.

      die maschine läuft über localhost mit kompletten office 2000 business paket. ich vermute mal eher, es is ein syntaxfehler nur kenn mich nich so mit COM aus.

      PS: outlook hat kene emailüberprüfung , du kannst kritzeln an wen du willst, auch wenn er nich existiert, wie z.b. DNS-Namen.

      Kommentar


      • #4
        Die Probs mit COM kenn ich leider nur zugut.
        Ich hatte hier auch schonmal ne Diskussion über COM+ und DCOM+ angestossen. Leider gibt es nicht viele, die sich damit auskennen.

        Du übergibst mit CreateItem(olMailItem); ein Argument an die Funktion. Dieses scheint aber der Fkt nicht bekannt zu sein.
        --> Deshalb auch der Fehler: "Call to a member function on a non-object in C:\home\mail.php on line 5" , weil er das Objekt garnicht anlegen konnte.

        Wo hast du herausgefunden, dass du "olMailItem" übergeben musst?!?
        Vielleicht haste dich da vertippt oder du liegst damit komplett falsch?

        Mehr zum Thema findest du übrigens hier: http://www.phpbuilder.com/columns/alain20001003.php3

        Kommentar


        • #5
          thx, so ähnlich dachte ich es mir auch.
          hab den code in der php.net funktions referenz gefunden.
          soll angeblich funktionieren.

          der code scheint mir sehr an vba angelehnt bzw die grundlage zu sein.

          vom vba aus stimmt die syntax bzw der code.

          nur php verträg dis nich.

          bei den anderen codes von dem link den du geschrieben hast, hängt sich mein php komplett auf mit einem error 500 welcher aus einem speicherfehler herführt. hab es auf 2 rechnern probiert immer win2k. aber es funktioniert einfach nich.

          thx 4 answer

          Kommentar


          • #6
            Hi,

            @Opa U.:
            Ich sagte damals doch: "Aber sei gewarnt - Rudimentäre Versuche werden scheitern, wenn man sich nicht mit COM auskennt."
            DCOM+ existiert nicht, es gibt nur COM, DCOM oder COM+.
            Und vielleicht bin ich der Einzige, der sich hier damit auskennt.

            @DarkShadow81:
            COM ist aktiviert, aufgrund von Fehlermeldung.
            Werfen wir zuerst ein Blick in die VBA Doku:
            CreateItem Method

            Creates a new Outlook item and returns it. The CreateItem method can only create default Outlook items. To create new items using a custom form, use the Add method on the Items collection.

            Syntax:

            objApplication.CreateItem(ItemType)

            objApplication Required. An expression that returns an Application object.

            ItemType Required Long. The Outlook item Type for the new item. Can be one of the following OlItemType constants: olAppointmentItem(1), olContactItem(2), olJournalItem(4), olMailItem(0), olNoteItem(5), olPostItem(6), or olTaskItem(3).
            Der ItemType muss als von Type long sein. PHP-Variabelen sind aber von Typ variant (var). Wie sich das auswirkt kann man an diesen Beispiel sehen.

            Add Method (Recipients Collection) Example

            This Visual Basic for Applications example creates a new mail message, uses the Add method to add "Allison Klein" as a To recipient, and displays the message.

            Set myOlApp = CreateObject("Outlook.Application")
            Set myItem = myOlApp.CreateItem(olMailItem)
            Set myRecipient = myItem.Recipients.Add("Allison Klein")
            myItem.Display

            If you use VBScript, you do not create the Application object, and you cannot use named constants. This example shows how to perform the same task using VBScript.

            Set myItem = Application.CreateItem(0)
            Set myRecipient = myItem.Recipients.Add("Allison Klein")
            myItem.Display
            Also versuche mal folgendes:
            PHP-Code:
            <?
            $objApp = new COM("Outlook.Application"); 
            $myItem = $objApp->CreateItem(0); 
            ...
            ?>
            Hoffe,konnte Dir helfen!

            Blaster
            Yuppi, endlich Elite ...

            Kommentar


            • #7
              @blaster:
              Sry, bei dem DCOM+ hatte ich mich nur verschrieben. Natürlich heisst das nur DCOM. Dafür reicht mein Wissen noch

              Allerdings kann ich dir hier nur zustimmen:
              Aber sei gewarnt - Rudimentäre Versuche werden scheitern, wenn man sich nicht mit COM auskennt
              Für kleinere Test und "Rumprobieren" ist dieses ganze Themengebiet wohl einfach zu komplex. Ausserdem findet man auch keinerlei gute Dokumentationen zu den Funktionen der unterstützten Programme.
              Ausserdem scheint das ganze sehr VB-lastig zu sein. Und wenn man sich damit nicht zumindest etwas auskennt hat man schon fast verloren.

              Kommentar


              • #8
                Jo Leute ich hab mir das mit dem COM auch schon mal reingezogen nur mich würde mal Interessieren wo ich eigentlich diese ganzen befehle finde die zum Beispiel Outlook oder Word oder was weiß ich was akzeptiert ...

                weil in meinem Buch PHP4 - Webserverprogrammierung unter Windows und Linux wird das Thema COM auf 2 Seiten behandelt ... *grml*

                Also wäre lieb wenn ihr mir mal eine paar Starthilfen geben könntet ...

                Kommentar


                • #9
                  re

                  die befehle findest du in den programmen selber.
                  du kannst das ganze officepaket komplett selbst programieren mit hilfe von vba (visual basic for application)

                  basiert auf vb 6.0 (Makros)

                  geh einfach unter makroeditor und geh in den objektkatalog da findest du alles als übersicht oder einfach hilfe bei office.

                  Kommentar


                  • #10
                    Hi!

                    @Opa U:
                    VB nutzt sehr intensiv COM, aber ohne den rudimentären Level zu fordern. Das liegt an der VB Container-Technologie.
                    Richtig Spaß bekommt man erst mit C++ oder Java, weil man alles von Hand proggen muss.
                    Aber VB ist doch trivial oder ...? Zumindestens von der Semantik.

                    @praetorian:
                    http://www.microsoft.com/com/ steht die De3finition des Standards.
                    Wie Opa U. sagte hier findest Du Samples.
                    http://www.phpbuilder.com/columns/alain20001003.php3

                    @DarkShadow81:
                    du kannst das ganze officepaket komplett selbst programieren mit hilfe von vba (visual basic for application)
                    Du meinst wohl automatisieren.

                    cu

                    Blaster
                    Yuppi, endlich Elite ...

                    Kommentar


                    • #11
                      Zu PHP & COM gibts in der aktuellen Ausgabe vom PHP Magazin einen ausführlichen Beitrag.

                      Im übrigen sind in PHP VB(A)-Collections als Array zu behandeln, d.h.


                      $objApp =new COM("Outlook.Application");
                      $myItem = $objApp->CreateItem[0];

                      Kommentar


                      • #12
                        Hi!

                        @ rmancho:
                        Vielen dank für den Tipp mit den PHP Mac.

                        Um deinen Einwand mit dem Array einzugehen, müssen wir uns die
                        IDL der Outlook library ansehen.
                        PHP-Code:
                        // Generated .IDL file (by the OLE/COM Object Viewer)
                        // 
                        // typelib filename: msoutl9.olb

                        [
                          
                        uuid(00062FFF-0000-0000-C000-000000000046),
                          
                        version(9.0),
                          
                        helpstring("Microsoft Outlook 9.0 Object Library"),
                          
                        helpfile("VBAOUTL9.CHM"),
                          
                        helpcontext(0x00501278)
                        ]
                        library Outlook
                        {
                            
                        // TLib :     // TLib : Microsoft Office 9.0 Object Library : {xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx}
                            
                        importlib("MSO9.DLL");
                            
                        // TLib : OLE Automation : {000xxxxx-0000-0000-C000-0000000000xx}
                            
                        importlib("stdole2.tlb");

                            
                        // Forward declare all types defined in this typelib
                            
                        interface Action;
                            interface 
                        _Application;
                        ... 
                        Ziemlich am Anfang wird eine Enumeration von key für den OlItemType definiert. Die deiner Array-Definition entspricht. D.h. OlItemType[0] =0;
                        PHP-Code:
                        typedef enum {
                            
                        olMailItem 0// hier erfolgt die Schlüsselwertzuweisung
                            
                        olAppointmentItem 1,
                            
                        olContactItem 2,
                            
                        olTaskItem 3,
                            
                        olJournalItem 4,
                            
                        olNoteItem 5,
                            
                        olPostItem 6,
                            
                        olDistributionListItem 7
                        OlItemType
                        Durch die erste Codezeile bilden wir eine Instanz von Application:
                        PHP-Code:
                        $objApp =new COM("Outlook.Application");
                        // welche die Schnittstellen deklariert

                        // coClass Application
                        [
                          
                        uuid(0006F03A-0000-0000-C000-000000000046),
                          
                        helpcontext(0x004de932),
                          
                        appobject
                        ]
                        coclass Application {
                            [default] interface 
                        _Application// Bildet die Schnittstellen von Application
                            
                        [default, sourcedispinterface ApplicationEvents;
                        };

                        // Dipatch-Interface Application
                        [
                          
                        uuid(00063001-0000-0000-C000-000000000046),
                          
                        helpcontext(0x004de932),
                          
                        dual
                        ][b]
                        dispinterface _Application {[/b]
                            
                        properties:
                            
                        methods:
                                [
                        id(0x0000f000), propgethelpcontext(0x004deb87)]
                                
                        _ApplicationApplication();
                                [
                        id(0x0000f00a), propgethelpcontext(0x004fca3a)]
                                
                        OlObjectClass Class();
                                
                                 .....

                                
                        IDispatchCreateItem([inOlItemType ItemType); // hier der Schnittstellen-Zeiger CreateItem(0);
                                
                        [id(0x0000010b), helpcontext(0x004def9b)]
                                
                        IDispatchCreateItemFromTemplate(
                                                [
                        inBSTR TemplatePath
                                                [
                        inoptionalVARIANT InFolder);
                                [
                        id(0x00000115), helpcontext(0x004e14be)]
                                
                        IDispatchCreateObject([inBSTR ObjectName);
                                [
                        id(0x00000110), helpcontext(0x004de88c)]
                                  ....
                        }; 
                        Durch den Schnittstellenzeiger
                        IDispatch* CreateItem([in] OlItemType ItemType);
                        übergebe ich den Wert direkt, ohne zuvor über die Enumeration zu gehen.

                        Natürlich sind alle Strukturzeiger attributes und proberties Bestandteil des this-stacks und so gesehen Baestandteil eines Arrays ...

                        Also falsch ist die Aussage nicht, aber ich glaube nicht das
                        $myItem = $objApp->CreateItem[0];
                        so funktionieren wird.

                        cu

                        Blaster
                        Zuletzt geändert von Blaster; 10.11.2002, 18:13.
                        Yuppi, endlich Elite ...

                        Kommentar


                        • #13
                          Tja, was soll man da noch gegen sagen?!?

                          Der meister hat gesprochen!
                          Vielen Dank für diese kleine Lehrstunde.

                          Kommentar


                          • #14
                            @ Blaster:

                            Probieren geht über studieren

                            Kommentar


                            • #15
                              Hi!

                              @ rmancho & Op@ U. :

                              Oh sorry!
                              </klugscheiss>

                              @DarkShadow81:
                              <Ansch.>
                              Kriegen wir jetzt mal ein Status-Report von Dir?
                              Wegen Dir haben jetzt schließlich ein Glaubenskrieg.
                              </Ansch.>

                              cu

                              Blaster
                              Yuppi, endlich Elite ...

                              Kommentar

                              Lädt...
                              X