【发布时间】: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