Сервис Topshelf не отправляет электронную почту - PullRequest
0 голосов
/ 03 октября 2018

Я разработал сервис, используя Topshelf для отправки статистики сервера по электронной почте.Все в порядке и прекрасно работает при выполнении Visual Studio 2017, но (всегда существует около ...), когда служба установлена ​​и запущена, просто отправьте электронные письма на gmail.com, yahoo.com и другие популярные почтовые сервисы.Но не для электронной почты, связанной с моей компанией.Это любопытно, потому что когда я выполняю службу как решение в соответствии с VS2017, она отправляет штраф на ЛЮБОЙ адрес электронной почты.

Подводя итог: -Если я выполняю решение через IDE VS2017, то решение отправляет на любой адрес электронной почты.-Если я установил службу и запустил ее, она просто отправляла на обычные адреса электронной почты, такие как gmail.com, yahoo.com и т. Д. НО не на адрес, связанный с моей компанией.

Кстати: Outlook нефильтрация любого адреса электронной почты.

#region Send email using a simple SMPT .net client
private bool SendEmail(Email d)
{
    bool resul = false;

    try
    {
        MailMessage mail = new MailMessage();
        SmtpClient SmtpClient = new SmtpClient("smtp.gmail.com");
        mail.From = new MailAddress(d.EmailAddress);
        mail.To.Add(d.EmailAddress);
        mail.Subject = d.Subject;
        LinkedResource linkedImg = new LinkedResource(@"charts\\mockChart.jpg");
        linkedImg.ContentId = "mockChart";
        linkedImg.ContentType = new ContentType(MediaTypeNames.Image.Jpeg);

        AlternateView htmlView = AlternateView.CreateAlternateViewFromString(
            "Dear Mr/Ms " + d.Name + " " + d.surname1 +
            "</br></br>" + d.Body + "\n <img src=charts\\mockChart.jpg>",
            null, "text/html");

        htmlView.LinkedResources.Add(linkedImg);
        mail.AlternateViews.Add(htmlView);

        mail.Attachments.Add(new System.Net.Mail.Attachment("charts\\mockChart.jpg"));

        SmtpClient.UseDefaultCredentials = false;
        SmtpClient.Port = 587;
        SmtpClient.Credentials = new NetworkCredential("anemail@address.com", "blablabla");
        SmtpClient.EnableSsl = true;

        SmtpClient.Send(mail);
        resul = true;
        Console.WriteLine(FileController.writeDataIntoALog("MAIL SENT TO " + d.EmailAddress, FileController.fileStr));
    }
    catch (Exception e)
    {
        StringBuilder sb = new StringBuilder();
        sb.Append(e.Message);
        sb.Append(e.StackTrace);
        FileController.writeDataIntoALog(sb.ToString(), FileController.fileStr);
        Console.WriteLine(e.Message);
        resul = false;
    }

    return resul;
}

Это простой код, который работает! ... но ... :( но такой я сказал, просто отправляйте корпоративные электронные письма при выполнении Visual Studio.

Кстати: я использую сервер Exchange, но я не могу сделать SOAP-запрос для отправки электронной почты под сервером Exchange, если у меня есть код, если кто-то хочет его увидеть.

Заранее спасибо за вашепомощь!

1 Ответ

0 голосов
/ 08 октября 2018

AHAAA! ;-) Решено!

Проблема заключалась в том, что мой VS2017 работал под моей учетной записью с правами администратора, но установленная служба не использовала мою учетную запись с этимразрешения.

Services.exe -> щелкните правой кнопкой мыши службу -> Свойства -> вкладка «Начать сеанс» и проверьте правильность учетной записи.

Service Permisssions

PS: Извините за мой "Испанский скриншот"; -)

...