我正在研究C#MailClient,它遵循IMAP协议,但我得到错误的响应,这意味着响应会给我一些重复的结果。 就像我第一次发送这样的命令一样。
byte[] commandBytes = System.Text.Encoding.ASCII.GetBytes(("$ UID FETCH " + index + " (BODY[HEADER.FIELDS (SUBJECT FROM DATE)])\r\n"));
第二次我这样发送。
byte[] commandBytes = System.Text.Encoding.ASCII.GetBytes(("$ UID FETCH " + index + " (BODYSTRUCTURE)" + "\r\n"));
所以我再次获得第一次命令结果两次或两次以上; 有时它会继续给我第一个结果。
我的Response()方法是这样的。
private string Response()
{
string response = string.Empty;
byte[] data = new byte[_imapClient.ReceiveBufferSize];
int ret = _imapNs.Read(data, 0, data.Length);
response = Encoding.ASCII.GetString(data,0,ret);
return response;
}
_imapClient是
的对象private TcpClient _imapClient;
我正在接受_imapClient的价值就是这样。
public string GetMessageBodyStructure(int index)
{
byte[] commandBytes = System.Text.Encoding.ASCII.GetBytes(("$ UID FETCH " + index + " (BODYSTRUCTURE)" + "\r\n"));
_imapNs.Write(commandBytes, 0, commandBytes.Length);
_imapNs.Flush();
return Response();
}
我错了,纠正我,谢谢..
答案 0 :(得分:0)
不要使用char数组:
byte[] commandBytes = System.Text.Encoding.ASCII.GetBytes("$ UID FETCH " + index + " (BODYSTRUCTURE)" + "\r\n");
TCP基于流,而不是消息。
这意味着没有任何东西可以保证使用相同的Read
收到整个邮件。 Read
可以收到一半消息,一条完整消息或两条消息。你需要相应地处理它。
3使用return Encoding.ASCII.GetString(data, 0, ret);
4有几个开源IMAP库。为什么不使用其中一个,因为你不熟悉套接字编程?