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.BodyParts [j] .DataBinary.Length);
と
fs.Write(mbstructure.BodyParts [j] .DataBinary、0、length);
エラーは次のとおりです。
入力には、Base 64以外の文字、2つを超えるパディング文字、またはパディング文字の中に不正な文字が含まれているため、有効なBase-64文字列ではありません。
上記のコードは、添付ファイルが1つしかない場合に表示される行で分類されます。
複数の添付ファイルがある場合:
次に、コードはオンラインで分解されます
mbstructure = command.FetchBodyStructure(mbstructure);
エラーは次のとおりです。
無効な形式では、本体部分のヘッダーを解析できませんでした。
私はこの任務の面倒を見るのにとても近いです。誰か助けてくれませんか。
また、メールを取得したら削除する方法も知りたいです。
ありがとう。