Share via


Abrufen der SMTP-Adresse des Absenders eines E-Mail-Elements

In diesem Beispiel wird die SMTP-Adresse (Simple Mail Transfer Protocol) des Absenders für ein E-Mail-Element abgerufen.

Beispiel

Zum Ermitteln der SMTP-Adresse für ein empfangenes E-Mail-Element verwenden Sie die SenderEmailAddress-Eigenschaft des MailItem-Objekts. Befindet sich der Absender jedoch innerhalb Ihrer Organisation, gibt SenderEmailAddress keine SMTP-Adresse zurück, d. h. Sie müssen das PropertyAccessor-Objekt verwenden, damit die SMTP-Adresse des Absenders zurückgegeben wird.

Im folgenden Codebeispiel ruft GetSenderSMTPAddress mithilfe des PropertyAccessor-Objekts Werte ab, die im Outlook-Objektmodell nicht direkt verfügbar gemacht werden. GetSenderSMTPAddress verwendet ein MailItem. Ist der Wert der SenderEmailType -Eigenschaft des empfangenen MailItem-Elements "EX", befindet sich der Absender der Nachricht auf einem Exchange-Server innerhalb Ihrer Organisation. GetSenderSMTPAddress ruft mithilfe der Sender-Eigenschaft des MailItem-Objekts den Absender ab, der durch das AddressEntry-Objekt dargestellt wird. Stellt das AddressEntry-Objekt einen Exchange-Benutzer dar, wird im Beispielcode die GetExchangeUser() -Methode aufgerufen, damit das ExchangeUser -Objekt des AddressEntry-Objekts zurückgegeben wird. Anschließend verwendet GetSenderSMTPAddress die PrimarySmtpAddress-Eigenschaft des ExchangeUser-Objekts, um die SMTP-Adresse des Absenders zurückzugeben. Wenn das AddressEntry-Objekt für den Absender kein ExchangeUser-Objekt darstellt, wird die GetProperty(String) -Methode des PropertyAccessor-Objekts mit PR_SMTP_ADDRESS (PidTagSmtpAddress) als Argument verwendet, um die SMTP-Adresse des Absenders zurückzugeben.

Wenn Sie Visual Studio verwenden, um dieses Codebeispiel zu testen, müssen Sie der Microsoft Outlook 15.0-Objektbibliothekkomponente zuerst einen Verweis hinzufügen und die Outlook-Variable angeben, wenn Sie den Microsoft.Office.Interop.Outlook-Namespace importieren. Die using-Anweisung darf im Codebeispiel nicht direkt vor den Funktionen stehen, sondern muss vor der öffentlichen Class-Deklaration hinzugefügt werden. Die folgende Codezeile zeigt, wie Sie den Import und die Zuweisung in C# vornehmen.

using Outlook = Microsoft.Office.Interop.Outlook;
private string GetSenderSMTPAddress(Outlook.MailItem mail)
{
    string PR_SMTP_ADDRESS =
        @"http://schemas.microsoft.com/mapi/proptag/0x39FE001E";
    if (mail == null)
    {
        throw new ArgumentNullException();
    }
    if (mail.SenderEmailType == "EX")
    {
        Outlook.AddressEntry sender =
            mail.Sender;
        if (sender != null)
        {
            //Now we have an AddressEntry representing the Sender
            if (sender.AddressEntryUserType ==
                Outlook.OlAddressEntryUserType.
                olExchangeUserAddressEntry
                || sender.AddressEntryUserType ==
                Outlook.OlAddressEntryUserType.
                olExchangeRemoteUserAddressEntry)
            {
                //Use the ExchangeUser object PrimarySMTPAddress
                Outlook.ExchangeUser exchUser =
                    sender.GetExchangeUser();
                if (exchUser != null)
                {
                    return exchUser.PrimarySmtpAddress;
                }
                else
                {
                    return null;
                }
            }
            else
            {
                return sender.PropertyAccessor.GetProperty(
                    PR_SMTP_ADDRESS) as string;
            }
        }
        else
        {
            return null;
        }
    }
    else
    {
        return mail.SenderEmailAddress;
    }
}

Siehe auch