我正在使用一个电子邮件客户端,它将连接到Gmail邮箱并检索特定的电子邮件。
现在,我可以连接到我的邮箱,并可以检索部分电子邮件,而不是全部,无论我的缓冲区有多大,我仍然只能从我的电子邮件中获得1400个字符,然后其余的邮件主体为空。
您可以在此链接中找到电子邮件正文的屏幕截图
http://www.elzouhery.com/Mail 快照.png
提前感谢
编辑
请参阅下面的完整代码
static void Main(string[] args)
{
TcpIMAP imap = ConnectToEmail();
Console.WriteLine("Total Messages " + imap.MailCount());
Console.WriteLine("Total Unread Messages " + imap.MailUnreadCount());
Console.WriteLine("******************************************************");
imap.SelectInbox();
StreamWriter writer = null;
int mailCount = imap.MailCount();
var mailSize = string.Empty;
var content = string.Empty;
var subject = string.Empty;
for (int i = 1; i < mailCount; i++)
{
try
{
writer = new StreamWriter(@"c:\Mails\" + i + ".txt", true);
content = imap.GetMessage(i).ToString();
writer.Write(content);
writer.Close();
}
catch(Exception ex)
{
writer.Write(content);
Console.Write(ex.Message);
writer.Close();
}
}
}
private static TcpIMAP ConnectToEmail()
{
string host = "imap.gmail.com";
string username = "************";
string password = "************";
TcpIMAP imap = new TcpIMAP();
imap.Connect(host, 993);
imap.AuthenticateUser(username, password);
return imap;
}
public static string GetMailSubject(string Header)
{
var headerLines = Header.Split(Environment.NewLine.ToCharArray());
foreach (var line in headerLines)
{
if (line.IndexOf("Subject") > -1)
{
return line.Replace("Subject: ", "");
}
}
return "";
}
/***************************************************/
class TcpIMAP
{
private TcpClient _imapClient;
private Stream _imapNs;
private StreamWriter _imapSw;
private StreamReader _imapSr;
public TcpIMAP()
{
}
public TcpIMAP(string hostname, int port)
{
InitializeConnection(hostname, port);
}
public void Connect(string hostname, int port)
{
InitializeConnection(hostname, port);
}
private void InitializeConnection(string hostname, int port)
{
try
{
_imapClient = new TcpClient(hostname, port);
System.Net.Security.SslStream sslstream = new System.Net.Security.SslStream(_imapClient.GetStream());
sslstream.AuthenticateAsClient("imap.gmail.com");
_imapNs = sslstream;
_imapSw = new StreamWriter(_imapNs);
_imapSr = new StreamReader(_imapNs);
Console.WriteLine("*** Connected ***");
Response();
}
catch (SocketException ex)
{
Console.WriteLine(ex.Message);
}
}
public void AuthenticateUser(string username, string password)
{
_imapSw.WriteLine("$ LOGIN " + username + " " + password);
_imapSw.Flush();
Response();
}
public int MailCount()
{
_imapSw.WriteLine("$ STATUS INBOX (messages)");
_imapSw.Flush();
string res = Response();
Match m = Regex.Match(res, "[0-9]*[0-9]");
return Convert.ToInt32(m.ToString());
}
public int MailUnreadCount()
{
_imapSw.WriteLine("$ STATUS INBOX (unseen)");
_imapSw.Flush();
string res = Response();
Match m = Regex.Match(res, "[0-9]*[0-9]");
return Convert.ToInt32(m.ToString());
}
public string SelectInbox()
{
_imapSw.WriteLine("$ SELECT INBOX");
_imapSw.Flush();
return Response();
}
public object GetMessageHeaders(int index)
{
_imapSw.WriteLine("$ FETCH " + index + " (body[header.fields (from subject date)])");
_imapSw.Flush();
return Response();
}
public object GetMessage(int index)
{
_imapSw.WriteLine("$ FETCH " + index + " BODY.PEEK[]");
_imapSw.Flush();
return Response();
}
private string Response()
{
byte[] data = new byte[_imapClient.ReceiveBufferSize];
int ret = _imapNs.Read(data, 0, data.Length);
string output = Encoding.ASCII.GetString(data).TrimEnd().Replace("\0", "");
return output;
}
public void Disconnect()
{
_imapSw.WriteLine("$ LOGOUT");
_imapSw.Flush();
_imapClient.Close();
}
public string SendCommand(string command)
{
_imapSw.WriteLine("$ " + command);
_imapSw.Flush();
return Response();
}
你只需要改变你的接收缓冲区大小
看起来您正在使用此处或类似的代码:
http://www . code project . com/Articles/29594/How-to-Access-Emails-Using-the-IMAP-Protocol
编写的代码是错误的,不能用于更大的消息。Response()调用需要循环调用.Read(),并附加结果,直到方法返回0(表示没有更多可用数据)。请查看NetworkStream.Read的文档。
此外,使用 IMAP 库会更好(请参阅在 C# 中访问 Imap)。
我正在为gmail编写一个简单的IMAP客户端。由于这是使用套接字等的赋值,因此我无法使用python的imaplib库。我在这段代码中遇到了一个问题: 一切正常,直到第二个命令发出。我不太清楚我现在在干什么。 这是被问到的sendData: 启动程序后,我只得到对第一个命令的响应: > 好,Gimap已准备好接受IPGOESHERE 47if12049394eef.11的请求 功能IMAP4re
问题内容: 我正在通过jQuery的getJson()调用跨域Web服务。由于响应对象的大小很大,因此我在Web服务中使用了最大的JSon大小。我已经检查过getJson()提供正确的响应对象。但是仍然没有调用我的回调函数。Firebug表示已超过(firefox)响应大小。 谁能告诉我标准浏览器(例如,Firefox)处理的最大浏览器响应大小限制是多少,以及如何处理该问题? 这是相同的代码段。
我想使用具有大量数据的HTTP客户端来测试我们的应用程序。是否可以使用 WireMock 创建无限或几千兆字节长度的输出,而无需分配具有该大小的字节数组或字符串? 据我所知有三个的方法: 我已经尝试但我得到了以下异常: 另外两个需要一个巨大的内存数组或字符串,这也是我想要避免的。 我还检查了枚举,但它似乎不可扩展。
我正在使用Spring WebFlux编写http爬虫程序,它很容易并行执行和设置http超时: 但是如何限制页面响应大小,比如我不想为每个URL下载超过500KB的数据。读取HTTP头Content-Length是不可靠的。我想我需要降低一个级别,直接使用字节缓冲区和Netty事件,但最好使用flux/mono来包装它,以继续使用这些原语
我现在正在开发一个简单的IMAP-客户端。要接收消息正文,我使用命令“UID FETCH mage-UID BODY. PEEK[]”。问题是我能确定命令上的服务器响应之一将是“*消息序列号FETCH(UID mage-UID BODY[]mage-body)”吗?或者我应该准备好接收任何可能的FETCH响应(如消息信封)?我知道我可以以“*消息序列号FETCH(FLAGS标志)”的形式接收消息标
请问react native如何处理或者做响应式字体?例如,在iphone 4s中,我的字体大小是:14,而在iphone 6中,我的字体大小是:18。