【问题标题】:Why doesn't validating my SMTP server domain name and port work when running as a service under the local system account?在本地系统帐户下作为服务运行时,为什么验证我的 SMTP 服务器域名和端口不起作用?
【发布时间】:2015-12-21 07:09:21
【问题描述】:

如果我通过以管理员权限运行的控制台应用程序运行此代码块,它就可以正常工作:

 public static bool ValidSMTP(string hostName, int port)
    {
        bool valid = false;
        TcpClient smtpTest = new TcpClient();
        smtpTest.Connect(hostName, port);
        if (smtpTest.Connected)
        {
            NetworkStream ns = smtpTest.GetStream();
            StreamReader sr = new StreamReader(ns);
            if (sr.ReadLine().Contains("220"))
            {
                valid = true;
            }
            smtpTest.Close();
        }
        return valid;
    }

但是当我尝试从位于本地系统帐户下的 C:\Code:\ServiceTesting\bin\ServiceHost.exe 的服务中运行它时,它无法验证服务器并在调用时出现以下消息超时to smtpTest.Connect:连接尝试失败,因为连接方在一段时间后没有正确响应,或者连接失败,因为连接的主机没有响应。

【问题讨论】:

  • 尝试将应用程序作为“NETWORK_SERVICE”运行。
  • 我认为这可能是权限问题,但问题是网络服务导致该服务逻辑的其他部分失败。
  • @jgauffin - 本地系统帐户是否已知不适用于与 SMTP 服务器的 TCP 连接或其他什么?
  • 本地系统应该可以工作,但本地服务不行。 msdn.microsoft.com/en-us/library/windows/desktop/…。但是,我会避免将网络服务作为本地系统运行,因为该服务会获得很多权限。最好为服务运行的自定义帐户配置文件访问等。
  • 网络服务的问题是它获得的权限太少。不幸的是,我的项目范围远不止发送电子邮件......现在我真的不知道该怎么做老实说。

标签: c# sockets tcp smtp client


【解决方案1】:

您是否尝试过同时从控制台应用程序和服务运行它?另外,您能否通过发出一系列请求来收集一些统计数据来测试这两种方法?

关键是它可以帮助将问题与不同的操作系统用户(如各种网络问题等)隔离开来。

如果您能找到新的或有趣的东西,请随时提供新的细节。

【讨论】:

    猜你喜欢
    • 2022-10-10
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-23
    • 2014-03-15
    相关资源
    最近更新 更多