Исполняемый файл не может отправить электронное письмо при вызове планировщика заданий

Я написал исполняемый файл С# .net, который отправляет электронное письмо через сервер обмена Outlook. Все работает нормально, когда я запускаю его вручную, но когда я использую запланированную задачу для вызова исполняемого файла, он не отправляет электронное письмо. Все остальное работает нормально, но письмо не отправляется. Я установил запланированную задачу для запуска под моей учетной записью пользователя. Когда задача выполняется, я вижу в диспетчере задач, что исполняемый файл выполняется под моим именем пользователя. Это исключает любые очевидные проблемы с разрешениями.

Во время отладки я заставил программу выводить некоторый текст в файл на сетевом ресурсе на той же машине, на которой работает Exchange. Этот файл выводится нормально, поэтому я знаю, что программа может подключиться к этой машине.

Кто-нибудь может помочь?


person user2320861    schedule 16.05.2013    source источник
comment
Как выглядит ваш SMTPClient. В частности, покажите нам общую конструкцию для client.UseDefaultCredentials, client.Credentials и client.DeliveryMethod. Является ли DeliveryMethod SmtpDeliveryMethod.Network? Нужен код.   -  person Apollo SOFTWARE    schedule 16.05.2013
comment
Спасибо за быстрый ответ, @AmitApollo. Outlook.Application myOutlook = новый Outlook.Application(); Outlook.MailItem mailMessage = (Outlook.MailItem)myOutlook.CreateItem(Outlook.OlItemType.olMailItem); Outlook.NameSpace olNameSpace = myOutlook.GetNamespace(MAPI); Outlook.Accounts olAccounts = olNameSpace.Accounts; Outlook.Account myAccount = новый Outlook.Account(); foreach (Outlook.Account olAccount в olAccounts) { if (olAccount.SmtpAddress == [email protected]) { myAccount = olAccount; } }   -  person user2320861    schedule 18.05.2013
comment
Кажется, у меня возникли проблемы с форматированием кода в этом поле для комментариев... Я едва могу выполнить возврат каретки без публикации. В любом случае, я продолжу копаться.   -  person user2320861    schedule 18.05.2013


Ответы (1)


Хорошо, как вы можете видеть выше, я пытался отправить почту через запущенный экземпляр Outlook. Хотя я не мог опубликовать код без поля для комментариев, не дергая себя за волосы, @amitapollo дал мне ключ к использованию пространства имен System.Net.Mail. В конце дня я заставил его работать. Вот мой код:

System.Net.Mail.SmtpClient smtpClient = new System.Net.Mail.SmtpClient("myExchangeServerIPAddress");
        smtpClient.UseDefaultCredentials = false;
        smtpClient.Credentials = new System.Net.NetworkCredential("myDomain\\myUsername", "myPassword");
        smtpClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;            
        smtpClient.EnableSsl = true;

System.Security.Cryptography.X509Certificates.X509Store xStore = new System.Security.Cryptography.X509Certificates.X509Store();
        System.Security.Cryptography.X509Certificates.OpenFlags xFlag = System.Security.Cryptography.X509Certificates.OpenFlags.ReadOnly;
        xStore.Open(xFlag);
        System.Security.Cryptography.X509Certificates.X509Certificate2Collection xCertCollection = xStore.Certificates;
        System.Security.Cryptography.X509Certificates.X509Certificate xCert = new System.Security.Cryptography.X509Certificates.X509Certificate();
        foreach (System.Security.Cryptography.X509Certificates.X509Certificate _Cert in xCertCollection)
        {
            if (_Cert.Subject.Contains("[email protected]"))
            {                    
                xCert = _Cert;
            }
        }

smtpClient.ClientCertificates.Add(xCert);

//I was having problems with the remote certificate no being validated so I had to override all security settings with this line of code...

System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate(object s, System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors) { return true; };
smtpClient.Send("[email protected]", "[email protected]", "mySubject", "myBody");
person user2320861    schedule 17.05.2013