首页 > 解决方案 > Topshelf 服务不发送电子邮件

问题描述

我使用 Topshelf 开发了一项服务,通过电子邮件发送一些服务器统计信息。在 Visual Studio 2017 执行下一切正常,但(始终存在于...)当服务安装并启动时,只需向 gmail.com、yahoo.com 和其他流行的电子邮件服务发送电子邮件。但不适用于与我公司关联的电子邮件。这很奇怪,因为当我在 VS2017 下将服务作为解决方案执行时,它可以很好地发送到任何电子邮件地址。

总结一下: - 如果我通过 VS2017 IDE 执行解决方案,那么解决方案将发送到任何电子邮件地址。- 如果我安装并启动该服务,它通常只会发送到电子邮件地址,例如 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 服务器,但我无法在 Exchange 服务器下发出 SOAP 请求来发送电子邮件,如果有人想看到我有代码的话。

在此先感谢您的帮助!

标签: c#.nettopshelf

解决方案


啊啊啊!;-) 解决了!

问题是我的 VS2017 是在我的具有管理员权限的帐户下运行的,但是安装的服务没有使用我的具有此权限的帐户。

Services.exe --> 右键单击​​服务 --> 属性 --> 启动会话选项卡,然后检查正确的帐户。

服务权限

PS:对不起我的“西班牙截图”;-)


推荐阅读