Не удается отправить SMTP письмо из службы Windows на Win7 - PullRequest
5 голосов
/ 20 марта 2012

Я пишу службу Windows, используя c # .NET 4.0 (моя рабочая станция для разработки - Windows 7). Целью является отправка электронного письма непосредственно из сервиса в случае ошибок при обработке. Я включил фрагмент кода, чтобы показать, чего я пытаюсь достичь:

try
        {
                string emailAddresses = "me@sample.com";
                string emailCCAddresses = "you@sample.com";

                //Send the email
                using (MailMessage mailMsg = new MailMessage())
                {
                    mailMsg.To.Add(emailAddresses);
                    mailMsg.From = new MailAddress("winService@sample.com");
                    mailMsg.CC.Add(emailCCAddresses);
                    mailMsg.Subject = " Error Message ";
                    mailMsg.Body = DateTime.Now + " : Invalid File Encountered." ;

                    ////Creating the file attachment
                    using (Attachment data = new Attachment("C:\\users\\sample.xml", MediaTypeNames.Application.Octet))
                    {
                        //Add timestamp info for the file
                        ContentDisposition disposition = data.ContentDisposition;
                        disposition.ModificationDate = File.GetLastWriteTime("C:\\users\\sample.xml");
                        mailMsg.Attachments.Add(data);

                    SmtpClient emailClient = new SmtpClient("example.Sample.com", 25);
                    emailClient.DeliveryMethod = SmtpDeliveryMethod.Network;
                    emailClient.UseDefaultCredentials = true;
                    emailClient.Send(mailMsg);
                    }
                }//end using

            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }

Проблема, с которой я сталкиваюсь, заключается в том, что опция электронной почты не работает из службы win на любом компьютере с Windows 7. Однако точно такой же код будет отлично работать на машине с Win XP. Будьте осторожны, это не может быть протестировано как консольное приложение. Он должен быть запущен как сервис, чтобы увидеть поведение. Я поместил тот же код в консольное приложение, и он отлично работал на моей машине win 7.

Кроме того, я включил функции окон клиента и сервера telnet и смог успешно отправлять электронную почту через командную строку.

Я попробовал несколько вещей, чтобы попытаться определить причину (ничего не помогло) -

  • Установка NetworkCredential в явном виде и установка UseDefaultCredentials = false. emailClient.Credentials = new System.Net.NetworkCredential ("имя пользователя", "pwd", "Domain1");

  • изменив опцию «Вход в систему как» службы на мои ИД пользователя и pwd

  • Адреса электронной почты От и До являются подлинными, а не фиктивными (в моем реальном коде это!)

Единственное отличие, которое я могу найти, заключается в том, что служба windows установлена ​​под локальной системной учетной записью. Но изменение входа в систему на должно было привести к использованию моих данных аутентификации / учетных данных, указанных в коде. ИТ-специалист в моем офисе сказал, что единственное различие, которое он увидел, было то, что мое сообщение было отправлено как ретранслятор (не уверен, что это означает, что от / до и вход в систему как учетные записи при обновлении до моего логина не изменил результат)

Исключение, которое я вижу, будучи пойманным:

Возникло исключение SMTP: System.Net.Mail.SmtpException: сбой отправки почты. ---> System.Net.WebException: невозможно подключиться к удаленному серверу ---> System.Net.Sockets.SocketException: была сделана попытка получить доступ к сокету способом, запрещенным его правами доступа XXX.XXX.XXX .XXX XX в System.Net.Sockets.Socket.DoConnect (EndPoint endPointSnapshot, SocketAddress socketAddress) в System.Net.ServicePoint.ConnectSocketInternal (логическое connectFailure, сокет s4, сокет s6, сокет и сокет, IP-адрес и адрес, состояние ConnectSocketState, IAsyncResult asyncResult, тайм-аут Int32, исключение и исключение)

Любые идеи приветствуются!

Я чувствую, что это связано с политикой / функцией безопасности Windows 7, и, надеюсь, может быть так же просто, как изменить настройку по умолчанию.

Ответы [ 2 ]

1 голос
/ 23 октября 2014

Вы можете запустить службу в качестве текущего пользователя. Просто выберите опцию USER в сервисном инсталляторе, и он будет работать как текущий пользователь. Я получил ту же ошибку сегодня, и я нашел это решение. Я надеюсь, что это будет полезно для всех. enter image description here

0 голосов
/ 08 декабря 2012

Я обнаружил, что это была политика безопасности на наших новых рабочих ноутбуках, и ИТ-отдел отказался позволить нам изменить ее. Наш тестовый сервер не имеет такой же проблемы, но это не Windows 7, поэтому я не могу быть уверен на 100%. Попробуйте отправить письмо через командную строку, чтобы узнать, разрешено ли smtp с вашего компьютера.

Тот же код работал нормально при запуске на компьютере с Win XP или Windows Server, который не имел никаких ограничений

...