C# “标题中有什么?我想知道SmarterMail是否发送了NIL,因为这在技术上是无效的语法,可能SmarterMail无法解析它

C# “标题中有什么?我想知道SmarterMail是否发送了NIL,因为这在技术上是无效的语法,可能SmarterMail无法解析它,c#,.net,imap,mailkit,C#,.net,Imap,Mailkit,只是一个想法 关于你帖子中的“新问题”: 是的,您可以请求作为对标题的回复并手动解析它-这很好。事实上,MessageSummaryItems.References的工作方式是它请求header.FIELDS(References)然后解析原始标题。由于您也在发送MessageSummaryItems.Headers,MailKit知道再次请求引用是毫无意义的,因为它将是标题响应的一部分 我可能会建议不要请求完整的MessageSummaryItems.Headers(除非您有特殊的需要获取它们

只是一个想法

关于你帖子中的“新问题”:

是的,您可以请求
作为对
标题的回复并手动解析它-这很好。事实上,
MessageSummaryItems.References
的工作方式是它请求
header.FIELDS(References)
然后解析原始标题。由于您也在发送
MessageSummaryItems.Headers
,MailKit知道再次请求
引用是毫无意义的,因为它将是
标题
响应的一部分

我可能会建议不要请求完整的
MessageSummaryItems.Headers
(除非您有特殊的需要获取它们),因为这是很多您不需要的额外数据。然后,在处理损坏的IMAP服务器时,可能最好请求
Headers
,而不是
信封

Envelope
的思想是,它或多或少是您需要客户机了解的所有信息,以便向用户显示消息列表

MailKit具有
MessageSummaryItems.References
(而不是任何其他单独的头)的原因是,为了使用
MailKit.MessageThreader.Thread()执行正确的线程,需要
References
方法。它还将使用
信封.InReplyTo
值,但我认为这不是必需的,因为从技术上讲,
引用
应该具有与其值之一相同的
msg id
标记


References
头是
消息Id
头值链,返回到“对话”的根(这比这个要复杂一些,因为一旦列表过长,客户端可以修剪一些
消息Id
值,但这是一般的想法).

您能看一下更新的问题吗?更新了我的答案。希望我的解释有帮助!太棒了!感谢您的深入解释。要回答问题,我使用的实际邮件Id格式为fb1c45@mypc.local我假设邮件服务器可以解析它,因此它看起来确实像Smarter中的一个bug邮件。因此,我的安全赌注是请求回复邮件头并使用其值。还有一个问题。如果我想将完整接收的邮件文件和邮件头存储在数据库中,我应该向谁一次请求所有内容?:)您不能在邮件包中一次请求所有内容(API不支持它)。我不确定这是否是一个好主意,因为它必须将用户的所有邮件下载到内存中才能将其返回给呼叫方。这可能是千兆字节的数据。好的,那么我知道了!非常感谢。:)
Connected to imap://127.0.0.1:143/
S: * OK IMAP4rev1 SmarterMail
C: A00000000 CAPABILITY
S: * CAPABILITY IMAP4rev1 AUTH=CRAM-MD5 AUTH=PLAIN UIDPLUS QUOTA XLIST CHILDREN ENABLE IDLE
S: A00000000 OK CAPABILITY completed
C: A00000001 AUTHENTICATE CRAM-MD5
S: + PDE5MTIwMTU2NjMugwNDIzQFJvamFuUEM+
C: cm9qYW5Acm9qYW5wYy5sb2NhbCAyNGRiYMTNjNzk5YTkyYjBhZjkxYTU3ZQ==
S: A00000001 OK CRAM authentication successful
C: A00000002 CAPABILITY
S: * CAPABILITY IMAP4rev1 AUTH=CRAM-MD5 AUTH=PLAIN UIDPLUS QUOTA XLIST CHILDREN ENABLE IDLE
S: A00000002 OK CAPABILITY completed
C: A00000003 LIST "" ""
S: * LIST (\Noselect) "/" ""
S: A00000003 OK LIST completed
C: A00000004 LIST "" "INBOX"
S: * LIST (\HasNoChildren \Inbox) "/" "Inbox"
S: A00000004 OK LIST completed
C: A00000005 XLIST "" "*"
S: * XLIST (\HasNoChildren \Trash) "/" "Deleted Items"
S: * XLIST (\HasNoChildren) "/" "Drafts"
S: * XLIST (\HasNoChildren \Inbox) "/" "Inbox"
S: * XLIST (\HasNoChildren \Spam) "/" "Junk E-Mail"
S: * XLIST (\HasNoChildren \Sent) "/" "Sent Items"
S: A00000005 OK XLIST completed
C: A00000006 SELECT Inbox
S: * 1 EXISTS
S: * 0 RECENT
S: * OK [UNSEEN 1] Message 1 is first unseen
S: * OK [UIDVALIDITY 1] UIDs valid
S: * OK [UIDNEXT 35] Predicted next UID
S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft \Recent)
S: * OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \Recent)] Folder flags
S: A00000006 OK [READ-WRITE] SELECT completed
C: A00000007 FETCH 1:* (UID FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODY BODY.PEEK[HEADER])
S: * 1 FETCH (UID 34 FLAGS () INTERNALDATE "7-Apr-2020 18:36:29 +0200" RFC822.SIZE 1536 ENVELOPE ("Tue, 07 Apr 2020 16:36:22 GMT" "Re: Hi dear friend" (({15}
S: test@mypc.local NIL "test" "mypc.local")) (({15}
S: test@mypc.local NIL "test" "mypc.local")) ((NIL NIL "test" "mypc.local")) ((NIL NIL "someone" "mypc.local")) NIL NIL NIL "<e938d94ca6ac4be085192f00cdc7fdd6@mypc.local>") BODY (("text" "plain" ("charset" "utf-8") NIL NIL "quoted-printable" 242 11) ("text" "html" ("charset" "utf-8") NIL NIL "quoted-printable" 482 8) "alternative") BODY[HEADER] {468}
S: From: "test@mypc.local" <test@mypc.local>
S: To: <my@mypc.local>
S: Subject: Re: Hi dear friend
S: Date: Tue, 07 Apr 2020 16:36:22 GMT
S: Reply-To: test@mypc.local
S: Message-ID: <e938d94ca6ac4be085192f00cdc7fdd6@mypc.local>
S: MIME-Version: 1.0
S: Content-Type: multipart/alternative; 
S:  boundary=de8794cbb22d4f6ea5a415917f9287ee
S: In-Reply-To: <specified-message-id>
S: References: <specified-message-id>
S: Disposition-Notification-To: test@mypc.local
S: X-SmarterMail-TotalSpamWeight: 0 (Authenticated)
S: 
S: )
S: A00000007 OK FETCH completed
envelope        = "(" env-date SP env-subject SP env-from SP
                  env-sender SP env-reply-to SP env-to SP env-cc SP
                  env-bcc SP env-in-reply-to SP env-message-id ")"

env-bcc         = "(" 1*address ")" / nil

env-cc          = "(" 1*address ")" / nil

env-date        = nstring

env-from        = "(" 1*address ")" / nil

env-in-reply-to = nstring

env-message-id  = nstring

env-reply-to    = "(" 1*address ")" / nil

env-sender      = "(" 1*address ")" / nil

env-subject     = nstring

env-to          = "(" 1*address ")" / nil
... ENVELOPE ("Tue, 07 Apr 2020 16:36:22 GMT" "Re: Hi dear friend" (({15}
S: test@mypc.local NIL "test" "mypc.local")) (({15}
S: test@mypc.local NIL "test" "mypc.local")) ((NIL NIL "test" "mypc.local")) ((NIL NIL "someone" "mypc.local")) NIL NIL NIL "<e938d94ca6ac4be085192f00cdc7fdd6@mypc.local>")