【问题标题】:How to prepare an APPEND IMAP Command?如何准备一个 APPEND IMAP 命令?
【发布时间】:2014-02-15 12:22:06
【问题描述】:

我尝试使用 PHP 以编程方式在 GMail 中创建草稿。

我正在使用VivOAuthIMAP 库成功使用 OAuth 进行 IMAP 登录,但该库仅支持一些命令来获取数据。我想扩展库以支持 APPEND 命令并实现我的目的:创建草稿。

但是我对这个 IMAP 的东西很迷茫,我不知道如何构建有效的 IMAP APPEND 命令,我总是收到“A3 BAD 无法解析命令错误”或“A3 BAD [CLIENTBUG] 太命令的许多参数:APPEND”。我正在尝试关注RFC2060 示例:

 C: A003 APPEND saved-messages (\Seen) {310}
 C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)
 C: From: Fred Foobar <foobar@Blurdybloop.COM>
 C: Subject: afternoon meeting
 C: To: mooch@owatagu.siam.edu
 C: Message-Id: <B27397-0100000@Blurdybloop.COM>
 C: MIME-Version: 1.0
 C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
 C:
 C: Hello Joe, do you think we can meet at 3:30 tomorrow?
 C:
 S: A003 OK APPEND completed

我认为问题在于我没有正确构建多行消息。例如:

这行得通:

$this->writeCommannd("A" . $this->codeCounter, "APPEND \"$mailbox\" (\Seen) {$size} \"Subject: hello world\"");

但这些不是(如果我添加空格,IMAP 将其解释为新参数并且我得到了太多参数)。

// A3 BAD [CLIENTBUG] Too many arguments for command: APPEND
$this->writeCommannd("A" . $this->codeCounter, "APPEND \"$mailbox\" (\Seen) {$size} \"Subject: hello world\" \"To: myemail@email.com\"");

// A3 BAD Could not parse command
$this->writeCommannd("A" . $this->codeCounter, "APPEND \"$mailbox\" (\Seen) {$size} \"Subject: hello world\"\r\n\"To: myemail@email.com\"");

【问题讨论】:

  • 我认为你想遵循 RFC3501,而不是 RFC2060。这不是你的问题的原因,但我只是让你知道你没有遵循最新的标准。 (都是IMAP4rev1,但RFC3501是最新的)

标签: php sockets command append imap


【解决方案1】:

两件事:

  1. 大小后需要一个 CRLF。正文不是命令的一部分。
  2. 除非服务器支持 LITERAL+ 扩展,否则您需要等待服务器告诉您在大小之后继续。

示例对话框:

C: A01 APPEND INBOX {100}\r\n
S: + go ahead\r\n
C: {message here}

使用 LITERAL+ 扩展名:

C: A01 APPEND INBOX {100+}\r\n
C: {message here}

【讨论】:

    猜你喜欢
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 2019-02-23
    • 1970-01-01
    • 2016-08-21
    • 2022-08-08
    相关资源
    最近更新 更多