Mailkit: MimeKit.ParseException: Invalid local-part at offset 0 on Gmail Imap

Created on 19 Apr 2017  路  13Comments  路  Source: jstedfast/MailKit

This just started getting an exception being thrown from inside of Imap.ImapFolder.Fetch() with my gmail account. See below.

I understand that local-part refers to the part to the left of the @ in the email address. With the Imap diagnostic turned on, i found a French language messages a few messages before the location with the stack trace. It that has this in the local-part:

From: =?UTF-8?Q?Lib=C3=A9ration?= <[email protected]>

The gmail "show original" shows it as

From: "Lib茅ration" <[email protected]>

Disclaimer: I'm guessing that this is the messages that's causing the crash. I cant be sure since the parse and download streams appear to be on different threads.

This is the full stack trace:

MimeKit.ParseException: Invalid local-part at offset 0
   at MimeKit.InternetAddress.TryParseLocalPart(Byte[] text, Int32& index, Int32 endIndex, Boolean throwOnError, String& localpart)
   at MimeKit.InternetAddress.TryParseAddrspec(Byte[] text, Int32& index, Int32 endIndex, Byte[] sentinels, Boolean throwOnError, String& addrspec, Int32& at)
   at MimeKit.MailboxAddress.set_Address(String value)
   at MimeKit.MailboxAddress..ctor(Encoding encoding, String name, String address)
   at MailKit.Net.Imap.ImapUtils.EnvelopeAddress.ToMailboxAddress()
   at MailKit.Net.Imap.ImapUtils.ParseEnvelopeAddressList(InternetAddressList list, ImapEngine engine, String format, CancellationToken cancellationToken)
   at MailKit.Net.Imap.ImapUtils.ParseEnvelope(ImapEngine engine, CancellationToken cancellationToken)
   at MailKit.Net.Imap.ImapFolder.FetchSummaryItems(ImapEngine engine, ImapCommand ic, Int32 index)
   at MailKit.Net.Imap.ImapEngine.ProcessUntaggedResponse(CancellationToken cancellationToken)
   at MailKit.Net.Imap.ImapCommand.Step()
   at MailKit.Net.Imap.ImapEngine.Iterate()
   at MailKit.Net.Imap.ImapEngine.Wait(ImapCommand ic)
   at MailKit.Net.Imap.ImapFolder.Fetch(IList`1 uids, MessageSummaryItems items, HashSet`1 fields, CancellationToken cancellationToken)
bug compatibility server-bug

Most helpful comment

The MailboxAddress .ctor is not meant to parse anything. Use MailboxAddress.Parse() instead.

All 13 comments

I'll need a protocol log (see the FAQ.md file on how to get one) because it's not parsing the raw message, it's parsing the pre-parsed address that the IMAP server is giving MailKit.

Also, I guarantee that's not the problematic email address. It has a perfectly valid local-part.

I've generated the protocol log and zipped it.. I think its too big for github 315K?? I will send it to your microsoft email account.

Many thanks for looking into this.

Okay, it's fixed now.

Works. many thanks!

No problem :)

Think i found another variation.

    address "=?UTF-8?Q?\"N=C3=BA=C3=B1ez_y_Navarro\"?=" string
    name    "<[email protected]>"  string

MimeKit.ParseException: Invalid addr-spec token at offset 0
at MimeKit.InternetAddress.TryParseAddrspec(Byte[] text, Int32& index, Int32 endIndex, Byte[] sentinels, Boolean throwOnError, String& addrspec, Int32& at)
in C:\dev\ServerStandalone\MimeKit.git\MimeKit\InternetAddress.cs:line 362
at MimeKit.MailboxAddress.set_Address(String value)
in C:\dev\ServerStandalone\MimeKit.git\MimeKit\MailboxAddress.cs:line 280
at MimeKit.MailboxAddress..ctor(Encoding encoding, String name, String address)
in C:\dev\ServerStandalone\MimeKit.git\MimeKit\MailboxAddress.cs:line 181
at MimeKit.MailboxAddress..ctor(String name, String address)
in C:\dev\ServerStandalone\MimeKit.git\MimeKit\MailboxAddress.cs:line 201
at MailKit.Net.Imap.ImapUtils.EnvelopeAddress.ToMailboxAddress()
in C:\dev\ServerStandalone\MailKit.git\MailKit\Net\Imap\ImapUtils.cs:line 993
at MailKit.Net.Imap.ImapUtils.ParseEnvelopeAddressList(InternetAddressList list, ImapEngine engine, String format, CancellationToken cancellationToken)
in C:\dev\ServerStandalone\MailKit.git\MailKit\Net\Imap\ImapUtils.cs:line 1075
at MailKit.Net.Imap.ImapUtils.ParseEnvelope(ImapEngine engine, CancellationToken cancellationToken)
in C:\dev\ServerStandalone\MailKit.git\MailKit\Net\Imap\ImapUtils.cs:line 1125
at MailKit.Net.Imap.ImapFolder.FetchSummaryItems(ImapEngine engine, ImapCommand ic, Int32 index)
in C:\dev\ServerStandalone\MailKit.git\MailKit\Net\Imap\ImapFolder.cs:line 3420
at MailKit.Net.Imap.ImapEngine.ProcessUntaggedResponse(CancellationToken cancellationToken)
in C:\dev\ServerStandalone\MailKit.git\MailKit\Net\Imap\ImapEngine.cs:line 1698
at MailKit.Net.Imap.ImapCommand.Step()
in C:\dev\ServerStandalone\MailKit.git\MailKit\Net\Imap\ImapCommand.cs:line 679
at MailKit.Net.Imap.ImapEngine.Iterate()
in C:\dev\ServerStandalone\MailKit.git\MailKit\Net\Imap\ImapEngine.cs:line 1783
at MailKit.Net.Imap.ImapEngine.Wait(ImapCommand ic)
in C:\dev\ServerStandalone\MailKit.git\MailKit\Net\Imap\ImapEngine.cs:line 1803
at MailKit.Net.Imap.ImapFolder.Fetch(IList1 uids, MessageSummaryItems items, HashSet1 fields, CancellationToken cancellationToken)
in C:\dev\ServerStandalone\MailKit.git\MailKit\Net\Imap\ImapFolder.cs:line 3812

imap-4-19-1-01.txt

In this one it appears that the address and name are reversed?

lol, yes, that is what it looks like...

I meant to get to this tonight, but spent the night debugging YDecoder in MimeKit instead :-\

I'll fix this up in the morning.

Works. Thanks for the quick turnaround!!!

Still I'm facing below issue with version 1.14.0 and higher versions when I use email address as "xyz <xyz@test.com>"

MimeKit.ParseException: Invalid addr-spec token at offset 0 at MimeKit.InternetAddress.TryParseAddrspec(Byte[] text, Int32& index, Int32 endIndex, Byte[] sentinels, Boolean throwOnError, String& addrspec, Int32& at) at MimeKit.MailboxAddress.set_Address(String value)

The MailboxAddress .ctor is not meant to parse anything. Use MailboxAddress.Parse() instead.

Was this page helpful?
0 / 5 - 0 ratings