我正在使用Koolwired.Imap通过iMAP检索附件
本文关键字:iMAP 通过 检索 Imap Koolwired | 更新日期: 2023-09-27 17:55:54
我正在使用Koolwired.Imap来检索附件。以下是我编写的代码。
使用 K = Koolwired.Imap;
public void GetAttachmentsTest(string thread, string selectFolder, string fileName)
{
K.ImapConnect connect = new K.ImapConnect(Global.host);
K.ImapCommand command = new K.ImapCommand(connect);
K.ImapAuthenticate auth = new K.ImapAuthenticate(connect, Global.username, Global.password);
connect.Open();
auth.Login();
K.ImapMailbox mailBox = command.Select(Global.inbox);
mailBox = command.Fetch(mailBox);
K.ImapMailboxMessage mbstructure = new K.ImapMailboxMessage();
while (true)
{
try
{
int mailCount = mailBox.Messages.Count;
if (mailCount == 0)
{
Console.WriteLine("no more emails");
break;
}
for (int i = 0; i < mailCount; ++i)
{
mbstructure = mailBox.Messages[mailCount - 1];
mbstructure = command.FetchBodyStructure(mbstructure);
for (int j = 0; j < mbstructure.BodyParts.Count; ++j)
{
if (mbstructure.BodyParts[j].Attachment)
{
//Attachment
command.FetchBodyPart(mbstructure, mbstructure.BodyParts.IndexOf(mbstructure.BodyParts[j]));
//Write Binary File
string tempPath = Path.GetTempPath();
FileStream fs = new FileStream(tempPath + mbstructure.BodyParts[j].FileName, FileMode.Create);
int length = Convert.ToInt32(mbstructure.BodyParts[j].DataBinary.Length);
fs.Write(mbstructure.BodyParts[j].DataBinary, 0,length);
fs.Flush();
fs.Close();
}
}
}
}
catch (Exception ex)
{
Console.WriteLine("T1 " + ex.Message);
Console.WriteLine("T1 " + ex.StackTrace);
if (ex.InnerException != null)
Console.WriteLine("T1 " + ex.InnerException.Message);
}
}
}
我在语句上收到错误:
int length = Convert.ToInt32(mbstructure.身体部位[J].DataBinary.Length);
和
司 司长。写入(mbstructure.身体部位[J].数据二进制, 0,长度);
错误是:
输入不是有效的 Base-64 字符串,因为它包含非 base 64 字符、两个以上的填充字符或填充字符中的非法字符。
上面的代码在只有 1 个附件时显示的行处分解。
如果有多个附件:
然后代码在线分解
mbstructure = 命令。FetchBodyStructure(mbstructure);
错误是:
无效格式无法分析正文部分标题。
我非常接近完成这项任务。任何人都可以帮助我。
我还想知道如何在检索电子邮件后删除它们。
谢谢。
我遇到了同样的问题如果有人关心,我解决了从 codeplex 下载库的最新源代码。编译后,无需更改即可工作。看起来他们已经修复了它。
同样要删除电子邮件,只需将其标记为删除:命令。SetDeleted(n, true);-> 其中 n 是消息编号。
如果是IMAP连接,实际上您必须清除已删除的邮件才能完成删除。
命令。清除();
希望它对某人有所帮助。