我正在尝试通过POP3协议从live.com帐户中读取邮件。
我发现服务器为pop3.live.com,端口为995。
我不打算使用预制库,而是要使用NetworkStream和StreamReader / StreamWriter。我需要弄清楚这一点。因此,此处给出的任何答案:Reading Email using Pop3 in C#都没有用。
它是一个较大程序的一部分,但我进行了一个小测试,看它是否有效。无论如何,我什么都没收到。这是我正在使用的代码,我认为应该是正确的。
编辑:此代码很旧,请参阅第二个已解决的问题。
public Program() {
string temp = "";
using(TcpClient tc = new TcpClient(new IPEndPoint(IPAddress.Parse("127.0.0.1"),8000))) {
tc.Connect("pop3.live.com",995);
using(NetworkStream nws = tc.GetStream()) {
using(StreamReader sr = new StreamReader(nws)) {
using(StreamWriter sw = new StreamWriter(nws)) {
sw.WriteLine("USER " + user);
sw.Flush();
sw.WriteLine("PASS " + pass);
sw.Flush();
sw.WriteLine("LIST");
sw.Flush();
while(temp != ".") {
temp += sr.ReadLine();
}
}
}
}
}
Console.WriteLine(temp);
}
Visual Studio调试器不断掉下
tc.Connect("pop3.live.com",995);
,该错误引发“尝试套接字操作到无法访问的网络65.55.172.253:995”错误。因此,我将从机器上的端口8000发送到端口995(hotmail pop3端口)。
而且我什么也没得到,而且我也没主意。
第二步:问题显然是我没有写quit命令。
代码:
public Program() {
string str = string.Empty;
string strTemp = string.Empty;
using(TcpClient tc = new TcpClient()) {
tc.Connect("pop3.live.com",995);
using(SslStream sl = new SslStream(tc.GetStream())) {
sl.AuthenticateAsClient("pop3.live.com");
using(StreamReader sr = new StreamReader(sl)) {
using(StreamWriter sw = new StreamWriter(sl)) {
sw.WriteLine("USER " + user);
sw.Flush();
sw.WriteLine("PASS " + pass);
sw.Flush();
sw.WriteLine("LIST");
sw.Flush();
sw.WriteLine("QUIT ");
sw.Flush();
while((strTemp = sr.ReadLine()) != null) {
if(strTemp == "." || strTemp.IndexOf("-ERR") != -1) {
break;
}
str += strTemp;
}
}
}
}
}
Console.WriteLine(str);
}
最佳答案
如果使用Wireshark查看网络流量会怎样?它发送任何东西吗?
编辑:我也不能通过telnet在该端口连接到pop3.live.com。您是否曾经成功通过pop3电子邮件客户端成功连接?
关于c# - 仅使用TcpClient和StreamWriter/StreamReader读取POP3服务器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2440151/