Anfügen eines Outlook-Kontaktelements an eine Email Nachricht

In diesem Thema wird beschrieben, wie Sie eine Kopie eines Microsoft Outlook-Elements, z. B. eines Kontakts, eines Kalenderelements oder einer anderen E-Mail-Nachricht, programmgesteuert an eine E-Mail-Nachricht anfügen können, bevor Sie die Nachricht senden.

Bereitgestellt von: Ken Getz, MCW Technologies, LLC

Um eine oder mehrere Dateien oder Outlook-Elemente an eine E-Mail-Nachricht anzufügen, können Sie die Attachments-Eigenschaft des MailItem-Objekts verwenden, das Ihre ausgehenden E-Mails darstellt, und die Add(Object, Object, Object, Object) -Methode des Attachments-Objekts für jede anlage aufrufen. Mit der Add-Methode können Sie den Dateinamen und die Art und Weise angeben, wie Sie die Anlage zuordnen möchten. Wenn Sie Outlook-Elemente anfügen möchten, z. B. das kontaktelement, das im Beispielcode für dieses Thema gezeigt wird, geben Sie denType-Parameter der Add-Methode als aufgezählten Outlook.olAttachmentType.olEmbeddedItem-Wert an.

Die SendMailItem Beispielprozedur im Codebeispiel weiter unten in diesem Thema akzeptiert Folgendes:

  • Ein Verweis auf das Outlook Application-Objekt .

  • Zeichenfolgen, die den Betreff und den Text der Nachricht enthalten

  • Eine generische Liste von Zeichenfolgen, die die SMTP-Adressen für Empfänger der Nachricht enthalten.

  • Eine Zeichenfolge mit der SMTP-Adresse des Absenders

Nach dem Erstellen eines neuen E-Mail-Elements durchläuft der Code alle Empfängeradressen und fügt diese der Recipients-Auflistung der Nachricht hinzu. Sobald der Code die ResolveAll()- Methode des Recipients-Objekts aufruft, legt er die Eigenschaften Subject und Body des E-Mail-Elements fest. Als Nächstes erstellt der Code ein neues Outlook ContactItem-Objekt und fügt dieses neue Kontaktelement als Anlage zur E-Mail-Nachricht hinzu, wobei der Outlook.olAttachmentType.olEmbeddedItem-Wert als Parameter zum Add-Methodenaufruf angegeben wird. Vor dem Senden der E-Mail müssen Sie das Konto angeben, von dem die E-Mail-Nachricht gesendet werden soll. Eine Methode für die Suche nach dieser Information stellt die Verwendung der SMTP-Adresse des Absenders. Die GetAccountForEmailAddress Funktion akzeptiert eine Zeichenfolge, die die SMTP-E-Mail-Adresse des Absenders enthält, und gibt einen Verweis für das entsprechende Account-Objekt zurück. Diese Methode vergleicht die SMTP-Adresse des Absenders mit der SmtpAddress für jedes konfigurierte E-Mail-Konto, das für das Profil der Sitzung definiert ist. application.Session.Accounts gibt eine Accounts-Auflistung für das aktuelle Profil zurück und verfolgt Informationen für alle Konten einschließlich Exchange-, IMAP- und POP3-Konten, wobei jedes mit einem anderen Zustellungsspeicher verknüpft sein kann. Das Account-Objekt, mit dem ein mit der SMTP-Adresse des Absenders übereinstimmender SmtpAddress-Eigenschaftswert verknüpft ist, stellt das Konto dar, aus dem die E-Mail-Nachricht gesendet wird. Nach dem Identifizieren des entsprechenden Kontos wird der Code abgeschlossen, indem die SendUsingAccount-Eigenschaft des E-Mail-Elements auf dieses Account-Objekt festgelegt und dann die Send()- Methode aufgerufen wird. Die folgenden Beispiele für verwalteten Code sind in C# und Visual Basic geschrieben. Um ein verwaltetes Codebeispiel von .NET Framework auszuführen, das ein Component Object Model (COM) aufrufen muss, müssen Sie eine Interopassembly verwenden, die verwaltete Schnittstellen definiert und den COM-Objekten in der Object Model-Typbibliothek zuordnet. Für Outlook können Sie Visual Studio und die Outlook Primary Interop Assembly (PIA) verwenden. Stellen Sie sicher, dass Sie die Outlook 2013 PIA installiert und eine Referenz zur Microsoft Outlook 15.0-Objektbibliothekkomponente in Visual Studio hinzugefügt haben, bevor Sie verwaltete Codebeispiele für Outlook 2013 ausführen. Sie sollten die folgenden Codebeispiele in der ThisAddIn Klasse eines Outlook-Add-Ins (mit Office Developer Tools für Visual Studio) verwenden. Das Objekt der Anwendung im Code muss ein vertrauenswürdiges Outlook- Anwendungsobjekt sein, das von ThisAddIn.Globals bereitgestellt wird. Weitere Informationen zur Verwendung der Outlook-PIA zur Entwicklung verwalteter Outlook-Lösungen finden Sie auf MSDN unter Willkommen bei der Referenz zur primären Interopassembly von Outlook (PIA). Der folgende Code zeigt, wie eine Kopie eines Kontaktelements programmgesteuert an eine E-Mail-Nachricht angefügt wird. Um diese Funktionalität zu veranschaulichen, erstellen Sie in Visual Studio ein neues verwaltetes Outlook-Add-In namens EmbedOutlookItemAddIn, und ersetzen Sie den Inhalt der Datei ThisAddIn.vb oder ThisAddIn.cs durch den hier gezeigten Beispielcode. Ändern Sie die ThisAddIn_Startup Prozedur, und aktualisieren Sie die E-Mail-Adressen entsprechend. Die im Aufruf der SendMailWithAttachments-Vorgehensweise enthaltene SMTP-Adresse muss der SMTP-Adresse eines der ausgehenden E-Mail-Konten entsprechen, die Sie zuvor in Outlook konfiguriert haben.

using System;
using System.Collections.Generic;
using Outlook = Microsoft.Office.Interop.Outlook;
 
namespace EmbedOutlookItemAddIn
{
    public partial class ThisAddIn
    {
        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            List<string> recipients = new List<string>();
            recipients.Add("john@contoso.com");
            recipients.Add("john@example.com");
 
            // Replace the SMTP address for sending.
            SendMailItem(Application, "Outlook started", "Outlook started at " + 
                DateTime.Now, recipients, "john@contoso.com");
        }
 
        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
        }
 
        public void SendMailItem(Outlook.Application application, 
            string subject, string body, 
            List<string> recipients, string smtpAddress)
        {
 
            Outlook.MailItem newMail = 
                application.CreateItem(Outlook.OlItemType.olMailItem) as Outlook.MailItem;
 
            // Set up all the recipients.
            foreach (var recipient in recipients)
            {
                newMail.Recipients.Add(recipient);
            }
            if (newMail.Recipients.ResolveAll())
            {
                // Set the details.
                newMail.Subject = subject;
                newMail.Body = body;
 
                Outlook.ContactItem contact = (Outlook.ContactItem)(application.CreateItem
                    Outlook.OlItemType.olContactItem));
 
                // Create a new contact. Use an existing contact instead, 
                // if you have one to work with.
                contact.FullName = "Kim Abercrombie";
                contact.LastName = "Kim";
                contact.FirstName = "Abercrombie";
                contact.HomeTelephoneNumber = "555-555-1212";
                contact.Save();
 
                newMail.Attachments.Add(contact, Outlook.OlAttachmentType.olEmbeddeditem);
                newMail.SendUsingAccount = GetAccountForEmailAddress(application, smtpAddress);
                newMail.Send();
             }
          }
 
        public Outlook.Account GetAccountForEmailAddress(Outlook.Application application, 
            string smtpAddress)
        {
            // Loop over the Accounts collection of the current Outlook session.
            Outlook.Accounts accounts = application.Session.Accounts;
            foreach (Outlook.Account account in accounts)
            {
                // When the email address matches, return the account.
                if (account.SmtpAddress == smtpAddress)
                {
                    return account;
                }
             }
             // If you get here, no matching account was found.
             throw new System.Exception(string.Format("No Account with SmtpAddress: {0} exists!",
                 smtpAddress));
        }
    }
 
    #region VSTO generated code
 
    /// <summary>
    /// Required method for Designer support - don't modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InternalStartup()
    {
        this.Startup += new System.EventHandler(ThisAddIn_Startup);
        this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
    }
        
    #endregion
 
}
Public Class ThisAddIn
 
    Private Sub ThisAddIn_Startup() Handles Me.Startup
        Dim recipients As New List(Of String)
        recipients.Add("john@contoso.com")
        recipients.Add("john@example.com")
     
        ' Replace the SMTP address for sending.
        SendMailItem(Application, "Outlook started",
            "Outlook started at " & DateTime.Now, recipients,
            "john@contoso.com")
    End Sub
 
    Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown
 
    End Sub
 
    Private Sub SendMailItem(ByVal application As Outlook.Application, _
        ByVal subject As String, ByVal body As String, ByVal recipients As List(Of String), _
        ByVal smtpAddress As String)
 
        Dim newMail As Outlook.MailItem = _
            DirectCast(application.CreateItem(Outlook.OlItemType.olMailItem), _
            Outlook.MailItem)
 
        ' Set up all the recipients.
        For Each recipient In recipients
            newMail.Recipients.Add(recipient)
        Next
        If newMail.Recipients.ResolveAll() Then
          ' Set the details.
          newMail.Subject = subject
          newMail.Body = body
 
          Dim contact As Outlook.ContactItem =_
             DirectCast(application.CreateItem(
             Outlook.OlItemType.olContactItem), Outlook.ContactItem)
 
          ' Create a new contact. Use an existing contact instead, 
          ' if you have one to work with.
          contact.FullName = "Kim Abercrombie"
          contact.LastName = "Kim"
          contact.FirstName = "Abercrombie"
          contact.HomeTelephoneNumber = "555-555-1212"
          contact.Save()
 
          newMail.Attachments.Add(contact, Outlook.OlAttachmentType.olEmbeddeditem)
          newMail.SendUsingAccount = GetAccountForEmailAddress(application, smtpAddress)
          newMail.Send()
        End If
    End Sub
 
    Private Function GetAccountForEmailAddress(ByVal application As Outlook.Application,_
        ByVal smtpAddress As String) As Outlook.Account
        ' Loop over the Accounts collection of the current Outlook session.
        Dim accounts As Outlook.Accounts = application.Session.Accounts
        For Each account In accounts
            ' When the email address matches, return the account.
            If account.SmtpAddress = smtpAddress Then
                Return account
            End If
        Next
        ' If you get here, no matching account was found.
        Throw New System.Exception(_
            String.Format("No Account with SmtpAddress: {0} exists!", smtpAddress))
    End Function
End Class

Siehe auch

Anfügen einer Datei an ein E-Mail-ElementBegrenzen der Größe einer Anlage an eine Outlook Email NachrichtÄndern einer Anlage einer Outlook Email Nachricht

Support und Feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.