使用ImapX阅读电子邮件时返回了意外字符 [英] Unexpected characters returned when reading email using ImapX

查看:62
本文介绍了使用ImapX阅读电子邮件时返回了意外字符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用ImapX阅读电子邮件正文时,结尾会出现意外文本.该代码的简化版本是

When reading the body of an email using ImapX there is unexpected text at the end. A simplified version of the code is

using (var imapClient = new ImapClient(host, port, useSSL))
{
    if (!imapClient.Connect()) 
        throw new Exception(string.Format("Failed to connect to {0}:{1}", host, port));
    if (!imapClient.Login(username, password)) 
        throw new Exception(string.Format("Login failed for {0} connecting to {1}:{2}", username, host, port));
    imapClient.Folders.Inbox.Messages.Download();
    foreach (var message in imapClient.Folders.Inbox.Messages)
    {
        var body = message.Body.HasText ? message.Body.Text : message.Body.Html;
        //Other stuff
    }
    imapClient.Disconnect();
}

以及发送带有正文的测试电子邮件时

and when a test email was sent with body

qwertyqwerqewrqwrqerwqreqrewrq

qwertyqwerqewrqwrqerwqreqrewrq

使用该代码读取的正文为

the body which was read using that code was

qwertyqwerqewrqwrqerwqreqrewrq
)
IMAPX10 OK UID已完成

qwertyqwerqewrqwrqerwqreqrewrq
)
IMAPX10 OK UID completed

有什么方法可以返回正文而最后没有多余的内容吗?邮件服务器发送了以下内容

Is there any way I can return the body text without the extra stuff at the end? The mail server sent the following

SENT: * OK IMAPrev1  
RECEIVED: IMAPX1 CAPABILITY  
SENT: * CAPABILITY IMAP4 IMAP4rev1 CHILDREN IDLE QUOTA SORT ACL NAMESPACE RIGHTS=texk[nl]IMAPX1 OK CAPABILITY completed  
RECEIVED: IMAPX2 LOGIN "the email address" ***  
SENT: IMAPX2 OK LOGIN completed  
RECEIVED: IMAPX3 LIST "" %  
SENT: * LIST (\HasNoChildren) "." "INBOX"[nl]* LIST (\HasNoChildren) "." "Trash"[nl]IMAPX3 OK LIST completed  
RECEIVED: IMAPX4 EXAMINE "INBOX"  
SENT: * 1 EXISTS[nl]* 1 RECENT[nl]* FLAGS (\Deleted \Seen \Draft \Answered \Flagged)[nl]* OK [UIDVALIDITY 1453984022] current uidvalidity[nl]* OK [UIDNEXT 9] next uid[nl]* OK [PERMANENTFLAGS ()] limited[nl]IMAPX4 OK [READ-ONLY] EXAMINE completed  
RECEIVED: IMAPX5 EXAMINE "Trash"  
SENT: * 0 EXISTS[nl]* 0 RECENT[nl]* FLAGS (\Deleted \Seen \Draft \Answered \Flagged)[nl]* OK [UIDVALIDITY 1454000202] current uidvalidity[nl]* OK [UIDNEXT 1] next uid[nl]* OK [PERMANENTFLAGS ()] limited[nl]IMAPX5 OK [READ-ONLY] EXAMINE completed  
RECEIVED: IMAPX6 SELECT "INBOX"  
SENT: * 1 EXISTS[nl]* 1 RECENT[nl]* FLAGS (\Deleted \Seen \Draft \Answered \Flagged)[nl]* OK [UIDVALIDITY 1453984022] current uidvalidity[nl]* OK [UIDNEXT 9] next uid[nl]* OK [PERMANENTFLAGS (\Deleted \Seen \Draft \Answered \Flagged)] limited[nl]IMAPX6 OK [READ-WRITE] SELECT completed  
RECEIVED: IMAPX7 EXAMINE "INBOX"  
SENT: * 1 EXISTS[nl]* 0 RECENT[nl]* FLAGS (\Deleted \Seen \Draft \Answered \Flagged)[nl]* OK [UIDVALIDITY 1453984022] current uidvalidity[nl]* OK [UIDNEXT 9] next uid[nl]* OK [PERMANENTFLAGS ()] limited[nl]IMAPX7 OK [READ-ONLY] EXAMINE completed  
RECEIVED: IMAPX8 UID SEARCH ALL  
SENT: * SEARCH 8  
SENT: IMAPX8 OK UID completed  
RECEIVED: IMAPX9 UID FETCH 8 (FLAGS INTERNALDATE RFC822.SIZE BODY.PEEK[HEADER.FIELDS (FROM TO DATE SUBJECT CC CONTENT-TYPE)] BODYSTRUCTURE)  
SENT: * 1 FETCH (UID 8 RFC822.SIZE 2553 FLAGS (\Seen) INTERNALDATE "29-Jan-2016 14:47:58 +0000" BODYSTRUCTURE (("TEXT" "PLAIN" ("CHARSET" "UTF-8") NIL NIL "7bit" 6 2)("TEXT" "HTML" ("CHARSET" "UTF-8") NIL NIL "7bit" 27 2) "ALTERNATIVE" ("BOUNDARY" "001a113fefbe6b8657052a7a1da1") NIL NIL) BODY[HEADER.FIELDS (FROM TO DATE SUBJECT CC CONTENT-TYPE)] {235}  
SENT: )  
SENT: IMAPX9 OK UID completed  
RECEIVED: IMAPX10 UID FETCH 8 (BODY.PEEK[1.MIME] BODY.PEEK[1])  
SENT: * 1 FETCH (UID 8 BODY[1.MIME] {43}  
SENT:  BODY[1] {6}  
SENT: )  
SENT: IMAPX10 OK UID completed  
RECEIVED: IMAPX11 UID FETCH 8 (BODY.PEEK[2.MIME] BODY.PEEK[2])  
SENT: * 1 FETCH (UID 8 BODY[2.MIME] {42}  
SENT:  BODY[2] {27}  
SENT: )  
SENT: IMAPX11 OK UID completed  
RECEIVED: IMAPX12 SELECT "INBOX"  
SENT: * 1 EXISTS[nl]* 0 RECENT[nl]* FLAGS (\Deleted \Seen \Draft \Answered \Flagged)[nl]* OK [UIDVALIDITY 1453984022] current uidvalidity[nl]* OK [UIDNEXT 9] next uid[nl]* OK [PERMANENTFLAGS (\Deleted \Seen \Draft \Answered \Flagged)] limited[nl]IMAPX12 OK [READ-WRITE] SELECT completed  
RECEIVED: IMAPX13 UID STORE 8 +FLAGS (\Seen \Deleted)  
SENT: * 1 FETCH (FLAGS (\Deleted \Seen) UID 8)  
SENT: IMAPX13 OK UID completed  
RECEIVED: IMAPX14 SELECT "INBOX"  
SENT: * 1 EXISTS[nl]* 0 RECENT[nl]* FLAGS (\Deleted \Seen \Draft \Answered \Flagged)[nl]* OK [UIDVALIDITY 1453984022] current uidvalidity[nl]* OK [UIDNEXT 9] next uid[nl]* OK [PERMANENTFLAGS (\Deleted \Seen \Draft \Answered \Flagged)] limited[nl]IMAPX14 OK [READ-WRITE] SELECT completed  
RECEIVED: IMAPX15 EXPUNGE  

推荐答案

我也抛出了同样的问题.经过几个小时后,我发现正则表达式模式序列存在问题.

I have gone threw the same issue. After passing couple of hours I found that there was issue in regex pattern sequence.

从codeplex下载最新的源代码,只需更改下面描述的顺序即可.

Download the latest source from codeplex and just change the sequence describe below.

转到>>

MessageContent.CS

MessageContent.CS

&找到以下代码

& locate following code

else if (CommandEndRex.IsMatch(data))
            {
                for (var i = _contentBuilder.Length - 1; i >= 0; i--)
                {
                    if (_contentBuilder[i] == ')')
                    {
                        _contentBuilder.Remove(i, _contentBuilder.Length - i);
                        return;
                    }
                }
            }

并使其保持比先前的else if语句高出一步,并且已经完成.

and keep up it one step above the previous else if statement and it's done.

让我知道您是否仍然面临同样的问题.

Let me know if u still face the same issue..

快乐的编码.

这篇关于使用ImapX阅读电子邮件时返回了意外字符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆