none
E - Mail mit Outlook versenden RRS feed

  • Frage

  • Hallo Forum,

    versuche gerade e-Mail´s über Outlook zu versenden. Habe auch schon einiges gefunden.

    mit "Microsoft.Office.Interop.Outlook"  gelingt mir es auch Mail´s an Outlook zu übergeben.

    Aber ich möchte das eigentlich unsichtbar im Hintergrund machen, ohne das sich Outlook öffnet und die Rechtschreibprüfung startet.

    Hat da jemand Erfahrung ?

    Danke  Gruß Roland

     

    Dienstag, 22. Juni 2010 19:54

Antworten

  • Hallo Roland,

    Und das es mit Outlook "unsichtbar" geht ist bewiesen, mit VFox hab ich es so schon mal gemacht.

    Wenn es in Deinem Code nur darum geht, das Mail-Fenster nicht anzuzeigen, solltest Du die Anweisung

    lo_Item.Display(false);
    

    auskommentieren. Zu der Warnung:

    Warnung 1 Mehrdeutigkeit zwischen der Microsoft.Office.Interop.Outlook._MailItem.Send()-Methode und der Nichtmethode "Microsoft.Office.Interop.Outlook.ItemEvents_10_Event.Send". Eine Methodengruppe wird verwendet. C:\Dokumente und Einstellungen\Roland\eigene dateien\visual studio 2010\Projects\Anmeldung\Anmeldung\Form1.cs 260 25 Anmeldung

    Die bekommst Du, weil das Outlook.MailItem Objekt, sowohl eine Send() Methode besitzt, wie auch durch die implementierte Ereignisschnittstelle ein Send Ereignis. Darüber stolpert der Compiler und gibt die Warnung CS0467 aus. Die kannst Du entweder hinnehmen, oder wenn sie Dich sehr stört auch umgehen, indem Du explizit die reine MailItem Schnittstelle ohne Ereignisse und somit ohne Doppeldeutigkeit ansprichst:

    ((Microsoft.Office.Interop.Outlook._MailItem)lo_Item).Send();
    

    Du kannst

    Du kannst Dir Tipparbeit ersparen, indem Du die Anweisung

    using Microsoft.Office.Interop; 

    an den Beginn der Codedatei einfügst. Dann kannst Du statt "Microsoft.Office.Interop.Outlook.MailItem", einfach "Outlook.MailItem" schreiben.

    PS : Wie fügst Du die Hardcopy´s ein. Wenn ich das versuche kommt so was wie in der letzten Nachricht raus.

    Ich schreibe einige meiner Beiträge hier über einen Newsreader, genauer Thunderbird und greife über die Community NNTP Bridge auf dieses Forum zu. Damit kann ich Codeblöcke selber formatieren und eben auch ohne Formatierung aus Visual Studio hier einfügen. Im Webeditor steht hierfür die Funktion "Codeblock einfügen" rechts außen beim Editor-Fenster zur Verfügung.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de
    Donnerstag, 24. Juni 2010 20:59

Alle Antworten

  • Hallo Forum,

    anbei etwas Code zu meinem Problem.

    Den Code habe ich so als Basis in einem anderen Forum gefunden und funktioniert eigentlich ganz gut, bis auf das es nicht im Hintergrund geht. Ausserdem kommt noch folgende Meldung :

    Warnung 1 Mehrdeutigkeit zwischen der Microsoft.Office.Interop.Outlook._MailItem.Send()-Methode und der Nichtmethode "Microsoft.Office.Interop.Outlook.ItemEvents_10_Event.Send". Eine Methodengruppe wird verwendet. C:\Dokumente und Einstellungen\Roland\eigene dateien\visual studio 2010\Projects\Anmeldung\Anmeldung\Form1.cs 260 25 Anmeldung

     

          NameSpace lo_NSpace;
    
          Microsoft.Office.Interop.Outlook.MAPIFolder lo_Folder;
    
          Microsoft.Office.Interop.Outlook.Application lo_OutAPP;
    
          Microsoft.Office.Interop.Outlook.MailItem lo_Item;
    
          lo_OutAPP = new Microsoft.Office.Interop.Outlook.Application();
    
          lo_NSpace = lo_OutAPP.GetNamespace("MAPI");
    
          lo_Folder = lo_NSpace.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderSentMail);
    
          lo_Item = (Microsoft.Office.Interop.Outlook.MailItem)lo_Folder.Items.Add(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);
    
          lo_Item.To ="xxx@yyy.de";
    
          lo_Item.Subject ="Kopfp xxxxxx";
    
          lo_Item.Body ="Text xxxxx";
    
          lo_Item.BodyFormat = Microsoft.Office.Interop.Outlook.OlBodyFormat.olFormatRichText;
    
          lo_Item.Display(false);
    
          lo_Item.Send();
    
          lo_Item = null;

     

    Kann mir da jemand helfen ?

    Danke Gruß Roland

    Mittwoch, 23. Juni 2010 16:56
  • Hallo Roland,

    versuche gerade e-Mail´s über Outlook zu versenden. Habe auch schon einiges gefunden.

    mit "Microsoft.Office.Interop.Outlook"  gelingt mir es auch Mail´s an Outlook zu übergeben.

    Aber ich möchte das eigentlich unsichtbar im Hintergrund machen, ohne das sich Outlook öffnet und die Rechtschreibprüfung startet.

    Warum möchtest Du mit Outlook senden, wenn Du nichts von Outlook brauchst und auch nicht sehen möchtest? Es ist nicht möglich Mails mit Outlook zu versenden, ohne dass der Anwender den Zugriff hierfür auf Outlook extra per Dialog freigibt.

    Schau Dir mal die Klassen SmtpClient und MailMessage im System.Net.Mail Namespace an. Damit kannst Du E-Mails ohne Outlook und Benutzeraktion versenden. Einziger Nachteil: Dein Anwender muss einmalig seine E-Mail Konfiguration festlegen.




    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de
    Mittwoch, 23. Juni 2010 22:53
  • Hallo Thorsten,

    E-Mail mit Smtp Versenden das hab ich schon . Geht auch ohne Probleme.

    Aber ich versuche gerade über die Arbeitsstation die Mail´s über Outlook zu versenden. Nicht jeder hat die Möglichkeit über SMTP oder die Berechtigung. Ausserdem ist das nur der erste Schritt. Ich möchte als nächstes die E-Mail´s aus Outlook, aus einem definierten Eingang auslesen und die angehängten Dateien automatisch verarbeiten.

    Und das es mit Outlook "unsichtbar" geht ist bewiesen, mit VFox hab ich es so schon mal gemacht.

    Gruß Roland

    PS : Wie fügst Du die Hardcopy´s ein. Wenn ich das versuche kommt so was wie in der letzten Nachricht raus.

     

    Donnerstag, 24. Juni 2010 05:38
  • Hallo Roland,

    Und das es mit Outlook "unsichtbar" geht ist bewiesen, mit VFox hab ich es so schon mal gemacht.

    Wenn es in Deinem Code nur darum geht, das Mail-Fenster nicht anzuzeigen, solltest Du die Anweisung

    lo_Item.Display(false);
    

    auskommentieren. Zu der Warnung:

    Warnung 1 Mehrdeutigkeit zwischen der Microsoft.Office.Interop.Outlook._MailItem.Send()-Methode und der Nichtmethode "Microsoft.Office.Interop.Outlook.ItemEvents_10_Event.Send". Eine Methodengruppe wird verwendet. C:\Dokumente und Einstellungen\Roland\eigene dateien\visual studio 2010\Projects\Anmeldung\Anmeldung\Form1.cs 260 25 Anmeldung

    Die bekommst Du, weil das Outlook.MailItem Objekt, sowohl eine Send() Methode besitzt, wie auch durch die implementierte Ereignisschnittstelle ein Send Ereignis. Darüber stolpert der Compiler und gibt die Warnung CS0467 aus. Die kannst Du entweder hinnehmen, oder wenn sie Dich sehr stört auch umgehen, indem Du explizit die reine MailItem Schnittstelle ohne Ereignisse und somit ohne Doppeldeutigkeit ansprichst:

    ((Microsoft.Office.Interop.Outlook._MailItem)lo_Item).Send();
    

    Du kannst

    Du kannst Dir Tipparbeit ersparen, indem Du die Anweisung

    using Microsoft.Office.Interop; 

    an den Beginn der Codedatei einfügst. Dann kannst Du statt "Microsoft.Office.Interop.Outlook.MailItem", einfach "Outlook.MailItem" schreiben.

    PS : Wie fügst Du die Hardcopy´s ein. Wenn ich das versuche kommt so was wie in der letzten Nachricht raus.

    Ich schreibe einige meiner Beiträge hier über einen Newsreader, genauer Thunderbird und greife über die Community NNTP Bridge auf dieses Forum zu. Damit kann ich Codeblöcke selber formatieren und eben auch ohne Formatierung aus Visual Studio hier einfügen. Im Webeditor steht hierfür die Funktion "Codeblock einfügen" rechts außen beim Editor-Fenster zur Verfügung.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de
    Donnerstag, 24. Juni 2010 20:59
  • Hallo Roland,

    Was Du willst ist nicht einfach.

    Ich würde ein VSTO Outlook Add-in schreiben, das über ein named pipe mit der Hauptanwendung kommuniziert. Die Anwendung verschickt z.B. ein XmlDocument mit den E-Mail-Daten (Adressat, Betreff, Text usw.) und das Outlook Add-in kümmert sich um das Erstellen und Versenden der E-Mails. (Da das VSTO Outlook Add-in im Prozessraum von Outlook geladen wird und eine CAS-Vertrauensstellung bereits bei der Installation des Add-ins erfolgt, wird Outlook keine Fragen stellen. Und Outlook kann auch unsichtbar gestartet werden)

    NamedPipeServerStream Class
    http://msdn.microsoft.com/en-us/library/system.io.pipes.namedpipeserverstream.aspx

    NamedPipeClientStream Class
    http://msdn.microsoft.com/en-us/library/system.io.pipes.namedpipeclientstream.aspx

    Aber ich würde mir Thorstens Idee, über SMTP zu e-mailen noch einmal überlegen, bevor ich mich in so ein Projekt stürze.

    Marcel

    Freitag, 25. Juni 2010 13:05
  • Hallo Marcel,

    diese ADDs gibt es schon ne ganze weile sogar kostenlos.

    Schau mal unter http://www.mapilab.com/de/outlook/security/

    Da brauchst Du nichts selber programmieren.  Und seit der letzten Outlook Version gibte es unter Extras die Möglichkeit vertrauenswürdige "Einlieferer" zu hinterlegen.

    Gruß Roland

     

    Freitag, 25. Juni 2010 19:26
  • Hallo Roland,

    Die Sicherheitswarnungen meinte ich gar nicht, die lassen sich ganz einfach und ohne Add-ins umgehen.

    Mein Vorschlag war, dass Du das Versenden der E-Mail aus dem Outlook-Prozess über ein VSTO Add-in machst und nicht direkt aus Deiner Anwendung. Wenn Du zufällig solche Add-ins kennst, würde ich Dich bitten, einige Links hier zu posten. Würde mich echt interessieren.

    Gruß
    Marcel

    Freitag, 25. Juni 2010 20:36