jstedfast / MailKit

A cross-platform .NET library for IMAP, POP3, and SMTP.

Home Page:http://www.mimekit.net

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Unable to delete certain e-mails - Index was outside the bounds of the array.

AndreasIsengaard opened this issue · comments

Describe the bug
When trying to delete certain e-mails (that I suspect is malformed in some way) or possibly that it is a very large inbox with 20k+ emails - it throws this exception for certain e-mails and kills the whole Pop3Client. So even if I try catch and simply ignore and try to proceed, the client is disconnected.

The code is reading e-mails from an account at outlook.office365.com.

Platform (please complete the following information):

  • OS: Windows (debugging in Visual Studio 2022)
  • .NET Runtime: .NET runtime for Azure Functions / dotnet-isolated
  • .NET Framework: .NET 7
  • MailKit Version: 4.1.0

Exception
Exception Message: System.IndexOutOfRangeException: 'Index was outside the bounds of the array.'
StackTrace: at MailKit.ByteArrayBuilder.TrimNewLine() at MailKit.Net.Pop3.Pop3Engine.ReadLine(CancellationToken cancellationToken) at MailKit.Net.Pop3.Pop3Engine.ReadResponse(Pop3Command pc, CancellationToken cancellationToken) at MailKit.Net.Pop3.Pop3Engine.Run(Boolean throwOnError, CancellationToken cancellationToken) at MailKit.Net.Pop3.Pop3Client.SendCommand(CancellationToken token, String command) at MailKit.Net.Pop3.Pop3Client.DeleteMessage(Int32 index, CancellationToken cancellationToken)

To Reproduce
Sadly it is very hard to reproduce this issue and I've never seens this type of issue before (and I've been using the mailkit for many years). It seems to be a marketing or spam e-mail of some sort.

Expected behavior
At least if it fails, it would be great if it didn't throw an exception and stopped the flow. I expected e-mail to only be marked for deletion and then committed upon disconnect.

Code Snippets
I simply do a:

using (var mkPop3Client = new MailKit.Net.Pop3.Pop3Client())
{
for (int i = 0; i < mkPop3Client.Count; i++)
{
var message = mkPop3Client.GetMessage(i);
mkPop3Client.DeleteMessage(i);
}
mkPop3Client.Disconnect(true)
}

Protocol Logs
I only get the System.IndexOutOfRangeException: 'Index was outside the bounds of the array.' at MailKit.ByteArrayBuilder.TrimNewLine()

Note: if the protocol log contains sensitive information, feel free to email it to me at
jestedfa@microsoft.com instead of including it in the GitHub issue.

Thanks for the bug report - the stack trace you provided should be enough for me to fix this, but I'll let you know if I need any more info.

Yep, easy fix.

thx for the swift fix, is it possible to get it from somewhere and test it? I pulled down https://www.myget.org/feed/mimekit/package/nuget/MimeKit/4.1.0.916 but same issue persists in that build.

BR Andreas

You can get it from MyGet like you tried to do, but I think the issue is that you grabbed the MimeKit package instead of the MailKit package

You want to grab the package from here: https://www.myget.org/feed/mimekit/package/nuget/MailKit - v4.1.0.760