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)
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
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.
Most helpful comment
The MailboxAddress .ctor is not meant to parse anything. Use MailboxAddress.Parse() instead.