Служба Windows не может отправлять электронную почту через службу SMTP - PullRequest
0 голосов
/ 11 июля 2019

Я создал службу Windows в C #, но часть электронной почты SMTP НЕ отправляет электронную почту, как следует.Служба подключается к нашей базе данных, выполняет траление и возвращает данные для отправки по электронной почте.Электронная почта настроена с использованием SmtpClient.

Код работает нормально на тестовом стенде, который НЕ находится в сервисе.Учетные данные и SMTP-клиент работают с другими веб-приложениями

  1. Служба устанавливается правильно:

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319> installutil.exe C: \ Sites \ ibas-email-service \ ibasEmailService.exe Microsoft (R) .NET Framework Утилита установки Версия 4.7.3062.0 Авторские права (C) Корпорация Майкрософт.Все права защищены.Запуск транзакционной установки.

Начало фазы установки установки.См. Содержимое файла журнала для выполнения сборки C: \ Sites \ ibas-email-service \ ibasEmailService.exe.Файл находится по адресу C: \ Sites \ ibas-email-service \ ibasEmailService.InstallLog.Установка сборки "C: \ Sites \ ibas-email-service \ ibasEmailService.exe".Затрагиваемые параметры: logtoconsole = assemblypath = C: \ Sites \ ibas-email-service \ ibasEmailService.exe logfile = C: \ Sites \ ibas-email-service \ ibasEmailService.InstallLog Установка службы IbasEmailService ... Служба IbasEmailService успешно установлена,Создание источника EventLog IbasEmailService в журнале приложения ...

Фаза установки успешно завершена, и фаза фиксации начинается.См. Содержимое файла журнала для выполнения сборки C: \ Sites \ ibas-email-service \ ibasEmailService.exe.Файл находится по адресу C: \ Sites \ ibas-email-service \ ibasEmailService.InstallLog.Фиксация сборки 'C: \ Sites \ ibas-email-service \ ibasEmailService.exe'.Затрагиваемые параметры: logtoconsole = assemblypath = C: \ Sites \ ibas-email-service \ ibasEmailService.exe logfile = C: \ Sites \ ibas-email-service \ ibasEmailService.InstallLog

Фаза фиксации успешно завершена.

Транзакционная установка завершена.

Это основной код SMTP (учетные данные выделены)

MailMessage mailMsg = new MailMessage(); 
mailMsg.To.Add(new MailAddress(to));
mailMsg.From = new MailAddress(from, "MyApp"); 
mailMsg.Subject = subject; 
mailMsg.Body = message;
mailMsg.IsBodyHtml = true; 
SmtpClient smtpClient = new SmtpClient("smtp.sendgrid.net", Convert.ToInt32(587));
smtpClient.UseDefaultCredentials = false; 
NetworkCredential
credentials = new NetworkCredential("-------", "-----");  
// note credentials are correct in code 
smtpClient.Credentials = credentials;
smtpClient.Send(mailMsg);

Служба была изначально установлена ​​с использованием локальной системной учетной записи, которая является службой по умолчанию для служб.

Служба запускается, получает доступ к базе данных sql server, выбирает данные изатем не удается отправить электронное письмо.

Я знаю, что программа работает, поскольку я помещаю весь код в веб-приложение для тестирования и получаю электронные письма обратно.Это доказывает работу кода и учетных данных, что оставляет проблему с разрешениями либо для моей службы, либо для службы SMTP.

Я попытался запустить свою службу с использованием: Учетная запись локальной системы Учетная запись локальной службы Сетевая службаучетная запись wd-admin (это наша учетная запись администратора для сервера) - после создания имени пользователя / пароля в установщике:

this.serviceProcessInstaller1.Password = "*****************";
this.serviceProcessInstaller1.Username = "wd-admin";

и затем убедитесь, что wd-admin использовался длязапустите службу.

Ни один из этих показателей не сработал, службе не удалось получить доступ к службе SMTP.Средство просмотра событий не показывало ошибок входа в систему, и мой код не сообщал об ошибках в добавленных строках Try / catch / throw.

Вопросы:

  1. Как я знаю, служба SMTPработает правильно, мне нужно указать это специально, чтобы разрешить доступ пользователю домена?
  2. Это мера Azure?Служба SMTP очень проста, позволяя анонимный доступ (идея состоит в том, чтобы заблокировать его, как только мы правильно запустим службу).

  3. Я прочитал на stackoverflow, что пользователь домена должен иметь возможностьразрешить доступ, так как локальная служба и системные учетные записи не разрешают доступ к сетевым службам.Как мне указать SMTP, чтобы разрешить моему пользователю доступ из другой службы?

  4. Никаких ошибок не возникает, и кроме сообщений «Запуск / остановка службы», Просмотр событий приложений не показывает ошибок или Невозможно подключиться.

Любая помощь или руководство с благодарностью принимаются.

...