Есть ли законный способ создать папку IMAP с символом разделителя иерархии в имени? - PullRequest
1 голос
/ 13 ноября 2009

В протоколе IMAP есть символ иерархии папок. Если вы попытаетесь создать папку с таким символом в имени, почтовый сервер создаст две папки. Например, если символ разделителя равен «/», команда CREATE "aaa/bbb" создаст две папки aaa и bbb в папке aaa.

Можно ли создать одну папку с символом разделителя внутри? Например, одна папка с именем aaa/bbb, без aaa и bbb в папке aaa.

Ответы [ 3 ]

4 голосов
/ 20 октября 2013

@ Pawel - попробовал трюк, не работал с голубятней. Прибегнул к чтению RFC.

Правильный способ, это создать папку с трейлингом /

Вот пример (взятый непосредственно из сеанса IMAP вручную):

[root@mailer-daemon ~]# telnet localhost imap
Trying 127.0.0.1...
Connected to mailer-daemon.co (127.0.0.1).
Escape character is '^]'.
* OK Dovecot ready.
A1 LOGIN user password
A1 OK Logged in.
A1 LIST "" *
* LIST (\NoInferiors \UnMarked) "/" "Drafts"
* LIST (\NoInferiors \UnMarked) "/" "Deleted Messages"
* LIST (\NoInferiors \UnMarked) "/" "INBOX"
A1 OK List completed.
A1 CREATE test/
A1 OK Create completed.
A1 CREATE test/case
A1 OK Create completed.
A1 LIST "" test*
* LIST (\Noselect \HasChildren) "/" "test"
* LIST (\NoInferiors \UnMarked) "/" "test/case"
A1 OK List completed.

А вот RFC говорит то же самое

  If the mailbox name is suffixed with the server's hierarchy
  separator character (as returned from the server by a LIST
  command), this is a declaration that the client intends to create
  mailbox names under this name in the hierarchy.  Server
  implementations that do not require this declaration MUST ignore
  the declaration.  In any case, the name created is without the
  trailing hierarchy delimiter.

  If the server's hierarchy separator character appears elsewhere in
  the name, the server SHOULD create any superior hierarchical names
  that are needed for the CREATE command to be successfully
  completed.  In other words, an attempt to create "foo/bar/zap" on
  a server in which "/" is the hierarchy separator character SHOULD
  create foo/ and foo/bar/ if they do not already exist.

  If a new mailbox is created with the same name as a mailbox which
  was deleted, its unique identifiers MUST be greater than any
  unique identifiers used in the previous incarnation of the mailbox
  UNLESS the new incarnation has a different unique identifier
  validity value.  See the description of the UID command for more
  detail.

Я думаю, что это выстрел денег:

Example:   C: A003 CREATE owatagusiam/
           S: A003 OK CREATE completed
           C: A004 CREATE owatagusiam/blurdybloop
           S: A004 OK CREATE completed

    Note: The interpretation of this example depends on whether
    "/" was returned as the hierarchy separator from LIST.  If
    "/" is the hierarchy separator, a new level of hierarchy
    named "owatagusiam" with a member called "blurdybloop" is
    created.  Otherwise, two mailboxes at the same hierarchy
    level are created.
2 голосов
/ 13 ноября 2009

Вы можете попробовать кодировку UTF7:

CREATE "one&AC8-two"

Но RFC говорит:

Если разделитель иерархии сервера персонаж появляется в другом месте в имя, сервер ДОЛЖЕН создать любой вышестоящие иерархические имена, которые необходимо, чтобы команда CREATE была успешно завершено. В других слова, попытка создать "foo / bar / zap" на сервере, на котором "/" является символом разделителя иерархии ДОЛЖЕН создавать foo / и foo / bar / if они еще не существуют. "

http://www.faqs.org/rfcs/rfc3501.html

1 голос
/ 27 июля 2012

Строго говоря, нет, протокол официально не разрешен.

Принятый ответ нарушает протокол:

В модифицированном UTF-7 печатные символы US-ASCII, за исключением символа «&», представляют себя; то есть символы со значениями октетов 0x20-0x25 и 0x27-0x7e. […] Модифицированный BASE64 НЕ ДОЛЖЕН использоваться для представления любого печатного символа US-ASCII, который может представлять сам себя.

- 5.1.3. Международное соглашение по именованию почтовых ящиков

Хак работает только потому, что большинство серверов не строго придерживаются вышеуказанного правила.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...