IMAP 选择多词邮箱
IMAP Selecting multi-worded mailboxes
我正在尝试在 C# 上创建我自己的 Imap 库,到目前为止,我已经能够完成我尝试过的所有事情(连接、登录、列表、select、获取等)。
但是,我在 select 发送名称中包含多个单词的邮箱时遇到了问题。
例如,邮箱名称 "New Label" 无法 selected 而 "INBOX" 成功 selected。
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 35015.1 邮箱命名)未提及应如何处理。它确实提到了国际命名 5.1.3,但它声明 US-ASCII 可打印字符代表它们自己。
this question的回答显示邮箱名称应该在其中发送space,但这显然不适用于我的情况。
这是我用来创建命令的代码(它适用于我目前尝试过的每个命令):
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);
RFC 3501 确实指定,第 87 页的第一行指定要使用字符串语法。 Astring 在 IMAP 中用于很多事情,在这种情况下它只是:
0004 SELECT "New label"
请阅读语法中的 astring/string/nstring/literal 产品,您必须正确理解它们才能在 hello-world 阶段之外解析或生成 IMAP。或者如果你想外包就使用一个库,C#上有很好的库。
我正在尝试在 C# 上创建我自己的 Imap 库,到目前为止,我已经能够完成我尝试过的所有事情(连接、登录、列表、select、获取等)。
但是,我在 select 发送名称中包含多个单词的邮箱时遇到了问题。
例如,邮箱名称 "New Label" 无法 selected 而 "INBOX" 成功 selected。
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 35015.1 邮箱命名)未提及应如何处理。它确实提到了国际命名 5.1.3,但它声明 US-ASCII 可打印字符代表它们自己。
this question的回答显示邮箱名称应该在其中发送space,但这显然不适用于我的情况。
这是我用来创建命令的代码(它适用于我目前尝试过的每个命令):
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);
RFC 3501 确实指定,第 87 页的第一行指定要使用字符串语法。 Astring 在 IMAP 中用于很多事情,在这种情况下它只是:
0004 SELECT "New label"
请阅读语法中的 astring/string/nstring/literal 产品,您必须正确理解它们才能在 hello-world 阶段之外解析或生成 IMAP。或者如果你想外包就使用一个库,C#上有很好的库。