C # Проверка SmtpAddress со всех учетных записей в Outlook - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь отправить электронное письмо через C # и Outlook. Иногда это срабатывало, а не то, что никогда не работает Кодекс, который высыпает этот

            //Look for our account in the Outlook
            foreach (Microsoft.Office.Interop.Outlook.Account account in accounts)
            {
                if (account.SmtpAddress.Equals(sFromAddress, StringComparison.CurrentCultureIgnoreCase))
                {
                    //Use it
                    acc = account;
                    break;
                }
            }

В предложении If оно всегда ложно, даже если оно должно быть правильным. Я проверил это вручную. Похоже, что учетная запись из учетных записей не может быть создана ...

стек ошибок:

bei ConsoleApp2.Program.sendEmailViaOutlook(String sFromAddress, String sToAddress, String sCc, String sSubject, String sBody, BodyType bodyType, List`1 arrAttachments, String sBcc) in C:\Users\z003th6d\Documents\Visual Studio 2017\Projects\ConsoleApp2\ConsoleApp2\Program.cs:Zeile 252.

И сообщение об исключении:

System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
   bei ConsoleApp2.Program.sendEmailViaOutlook(String sFromAddress, String sToAddress, String sCc, String sSubject, String sBody, BodyType bodyType, List`1 arrAttachments, String sBcc) in C:\Users\z003th6d\Documents\Visual Studio 2017\Projects\ConsoleApp2\ConsoleApp2\Program.cs:Zeile 252.

Для дальнейшего кодирования здесь есть ссылка: https://gist.github.com/1524045patrick/400b3676c0e95627334a09ba9cc39c2e

1 Ответ

0 голосов
/ 27 апреля 2018

Если у учетной записи нет SMTP-адреса, SmtpAddress возвращает пустую строку.

Я бы рекомендовал проверить свойство Account.AccountType , которое возвращает константу в перечислении OlAccountType, которая указывает тип Account.

В случае olExchange учетной записи вам необходимо получить SMTP-адрес следующим образом:

    Outlook.AddressEntry sender =
        account.CurrentUser.AddressEntry;
    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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...