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;
}
}