IMAP选择多措辞邮箱

时间:2017-04-26 09:03:20

标签: c# imap

我正在尝试在C#上创建自己的Imap库,到目前为止,我已经能够完成我尝试过的所有事情(连接,登录,列表,选择,获取等)。

但是,在选择名称中包含多个单词的邮箱时,我遇到了问题。

例如,无法选择邮箱名称“新标签”,而成功选择“INBOX”。

0002 LIST "" "%"
* LIST (\HasNoChildren) "/" "INBOX"
* LIST (\HasNoChildren) "/" "New"
* LIST (\HasNoChildren) "/" "New Label"
* LIST (\HasChildren \Noselect) "/" "[Gmail]"
0002 OK Success

0003 SELECT INBOX
0003 OK [READ-WRITE] INBOX selected. (Success)

0004 SELECT New Label
0004 BAD Could not parse command

IMAP规范(RFC 3501 5.1邮箱命名)未引用应如何处理此规范。它确实提到了国际命名5.1.3,但它声明US-ASCII可打印字符代表它们自己。

this question的答案显示邮箱名称应该随其中的空格一起发送,但这显然不适用于我的情况。

这是我用来创建命令的代码(对于我迄今为止尝试的每个命令都可以正常工作):

    public ResponseStatusEnum sendCommandReceiveResponse(out List<String> responseArray, string command, params string[] cmdParams)
    {
        ResponseStatusEnum response;
        if (command == null) throw new Exception("No command passed in to send to the server");
        // Increment the id before getting the id string
        m_nCommandId++;
        StringBuilder sbCommand = new StringBuilder(CommandId + " ");

        // Include the Imap command
        sbCommand.Append(command);

        //Include the parameters specific to the command
        for (int i = 0; i < cmdParams.Length; i++)
        {
            sbCommand.Append(" " + cmdParams[i]);
        }
        sbCommand.Append(ImapEol);

1 个答案:

答案 0 :(得分:1)

RFC 3501确实指定了,第87页的第一行指定要使用astring语法。在IMAP中,Astring用于很多事情,在这种情况下它只是:

0004 SELECT "New label"

请在语法中读取astring / string / nstring / literal产品,必须使它们正确才能在hello-world阶段之外解析或生成IMAP。或者如果你想外包它,可以使用一个库,C#上有很好的库。