我使用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服务器,但是我无法发出SOAP请求以在Exchange服务器下发送电子邮件。如果我有想要看到的代码,那么
在此先感谢您的帮助!
答案 0 :(得分:0)
AHAAA! ;-)解决!
问题是我的VS2017在具有管理员权限的帐户下运行,但是安装的服务未在具有此权限的帐户下使用。
Services.exe->右键单击服务->属性->“启动会话”选项卡,然后检查正确的帐户。
PS:对不起,我的“西班牙语屏幕截图”;-)