Frage

In der Vergangenheit habe ich Mapisendmail verwendet, um Outlook (oder unabhängig von der gewünschten MAPI -E -Mail -Anwendung) von einer C ++ - Anwendung mit einem Dateianhang zu starten. (Ähnlich wie bei der Send -E -Mail -Funktionalität von Microsoft Word).

Ich muss das Äquivalent aus einer C# -Anwendung ausführen und es funktioniert, wenn ich auf XP, Vista, Server 2008 (und Windows 7) ausgeführt habe, nehme an).

Mapisendmail ist ein No -Gie unter Vista/2008, da es immer MAPI_ E_FAILURE zurückgibt, wenn Outlook ausgeführt wird und Mapi nicht in verwalteten Code unterstützt wird. Auch nach Überprüfung dieses Korrekturs:http://support.microsoft.com/kb/939718Ich kann es nicht dazu bringen, zuverlässig zu arbeiten.

Ich weiß, dass Microsoft Word & Adobe Reader 9 beide Outlook mit einem Anhang unter Vista starten kann.

AC# -kompatible Lösung wäre bevorzugt, aber ich wäre mit allem zufrieden, was funktioniert (muss MAPI nicht verwenden). Ich kann nicht herausfinden, was die aktuelle "Lösung" ist. Keiner der vorhandenen Antworten auf den Stapelüberlauf scheint dies auch zu behandeln.

Bearbeiten:

Ich bin mir bewusst, dass Mapi und C# nicht zusammenarbeiten, also werde ich eine C/C ++ - Lösung nehmen, die in Vista und Server 2008 funktioniert, wenn NICHT als Administrator ausgeführt. Siehe Adobe Reader 9 & Microsoft Word als Beispiele, die funktionieren.

War es hilfreich?

Lösung

Bei der Arbeit haben wir dies mit VSTO erfolgreich gemacht.

Hier ist ein Ausschnitt mit einigen Zeilen, die wir mit Outlook 2007 auf Vista ausgeführt haben: (Der Code ist in VB.NET).

Beachten Sie, dass die Verwendung von Sicherheit gesperrt ist, wenn Sie bestimmte Dinge mit dem Outlook -Objekt ausführen. (Ansprache, Körper und andere Eigenschaften, die als Sicherheitsrisiken gekennzeichnet sind). Wir verwenden eine Drittanbieterkomponente (Erlösung), um diese Sicherheit zu umgehen. Wenn Sie keinen Sicherheitsmanager verwenden, gibt Outlook ein kleines Popup, dass etwas außerhalb versucht, darauf zugreifen zu können, und Sie können in einem bestimmten Zeitraum Zugriff aufnehmen.

Der Import der Outlook -Schnittstelle.

Imports Outlook = Microsoft.Office.Interop.Outlook

Dieses Beispiel soll Ihnen eine Richtung geben, kein vollständiges Beispiel.

dim MailItem As Microsoft.Office.Interop.Outlook.MailItem

' Lets initialize outlook object '
MailItem = OutlookSession.Application.CreateItem(Outlook.OlItemType.olMailItem)
MailItem.To = mailto

MailItem.Subject = communication.Subject
MailItem.BodyFormat = Outlook.OlBodyFormat.olFormatHTML
MailItem.HTMLBody = htmlBody

MailItem.Attachments.Add(filename, Outlook.OlAttachmentType.olByValue)

' If True is supplied to Display it will act as modal and is executed sequential. '
SafeMail.Display(True)

Die Outlooksession im obigen Beispiel stammt aus dieser Eigenschaft:

    Public ReadOnly Property OutlookSession() As Outlook.NameSpace
        Get
            If Not OutlookApplication Is Nothing Then
                Return OutlookApplication.GetNamespace ("MAPI")
            Else
                Return Nothing
            End If
        End Get
    End Property

Wie Sie sehen können, verwendet es dafür Mapi.

Viel Glück damit.

Andere Tipps

Sie brauchen nicht wirklich eine Erlösung für VB, wie oben vorgeschlagen, solange Sie einfach Eigenschaften in einer E-Mail einstellen und sie nicht lesen. Hier ist eine einfache VB-Funktion zum Anzeigen / Senden einer E-Mail per Outlook mit einem Anhang. (Dieser Code bezieht sich auf die Microsoft Outlook 12.0 Objektbibliothek z.

Sub DoMail()
    Set objOL = CreateObject("Outlook.Application")
    Set objNewMail = objOL.CreateItem(olMailItem)

    Dim filename As String
    filename = "C:\\temp\\example.txt"

    With objNewMail
        .To = "cjoy@spam_me_not.com"
        .Subject = "test"
        .Body = "Test Body"
        .Attachments.Add filename, Outlook.OlAttachmentType.olByValue
    End With

    objNewMail.Display

    'objNewMail.Send
End Sub

Bit LowTech -Methode, aber mit dem Mailto -Handler können Sie dies tun

System.Diagnostics.Process.Start("mailto:something@somewhere.com?subject=hello&attachment=c:\\chicken.xls");

Notiz: Wie darauf hingewiesen wurde, funktioniert dies möglicherweise nicht bei allen Kunden, da es nicht Teil der ist Mailto URL Spec. Am wichtigsten ist, dass Outlook 2007 es nicht unterstützt, während ältere Versionen dies getan haben.

Ich bin mir nicht sicher, ob Sie die E -Mail in Outlook öffnen müssen oder ob Sie nur eine E -Mail mit einem Anhang von C#senden möchten. Ich weiß, dass Sie Open in Outlook geschrieben haben, aber Sie gehen vielleicht davon aus, dass dies der einzige Weg ist, dies zu tun. Wenn Sie nur eine E -Mail mit einem Anhang senden möchten, kann sie so etwas wie unten erledigt werden.

#using System.Net.Mail;

SmtpClient smtpClient = new SmtpClient(host, port);

MailMessage message = new MailMessage(from, to, subject, body);
Attachment attachment = new Attachment(@"H:\attachment.jpg");
message.Attachments.Add(attachment);

System.Net.NetworkCredential SMTPUserInfo = new System.Net.NetworkCredential(username, password);
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = SMTPUserInfo;
smtpClient.Send(message);

Sie können es auch ohne das Authentifizierungsbit abhängig von Ihrem E -Mail -Server tun.

C# Code zum Senden von E -Mails über Outlook; Es treten keine Sicherheitswarnungen auf.

var outlook = new ApplicationClass();
MailItem mailItem = (MailItem)outlook.Session.Application.CreateItem(Outlook.OlItemType.olMailItem);

mailItem.Display(false);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top