Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MailKit.Net.Pop3.Pop3ProtocolException - HResult=0x80131500 Message=Unexpected response from server: #1636

Closed
AndreasIsengaard opened this issue Sep 4, 2023 · 2 comments
Labels
server-bug The bug appears to be in the server

Comments

@AndreasIsengaard
Copy link

Describe the bug
It is very similar to bug #1634 but now with a different exception. 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.765

Exception
MailKit.Net.Pop3.Pop3ProtocolException
HResult=0x80131500
Message=Unexpected response from server:
Source=MailKit
StackTrace:
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)
}

I emailed the log to you.

@jstedfast
Copy link
Owner

jstedfast commented Sep 4, 2023

The problem is line 16936 in the log file.

The server prematurely terminates the message by sending ".\r\n" (which is the special sequence that marks the end of the message data).

Then, when the Pop3Client sends the DELE 2 command, it gets more message data and barfs because it doesn't know how to handle that.

I'm not sure there's any sort of easy fix for this and it's not technically a bug in MailKit, it's really a server bug.

@jstedfast jstedfast added the server-bug The bug appears to be in the server label Sep 4, 2023
@AndreasIsengaard
Copy link
Author

thx for the update, I will write some workaround then to handle it

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
server-bug The bug appears to be in the server
Projects
None yet
Development

No branches or pull requests

2 participants