PHP imap不会附加大邮件

时间:2018-07-13 19:05:37

标签: php imap

我正在通过套接字处理imap中的php。一切正常。我构建了邮件快速对象,然后将其转换为字符串并使用附加命令发送到imap,它可以工作,我得到了OK [APPENDUID 1 4497] (Success),但是如果我附加了大于3kb的文件-imap服务器我什么也没回复,邮件也没有追加!问题是什么?可能我应该做一些类似的附加部分吗?我的意思是将邮件主体切成几个部分,然后做成几个fwrite()

这些是我代码的几个部分。但是我认为问题不在于代码,而在于一些常见的imap东西:

/**
 * @param string $command
 * @param string $successPattern
 * @param bool $withCounter
 * @return false|string
 */
protected function sendCommand($command, $successPattern = '', $withCounter = true)
{
    $counter = $withCounter ? "{$this->commandHash}{$this->commandCounter} " : "";
    $successPattern = !$successPattern ? $counter . 'OK' : $successPattern;

    fwrite($this->stream, "{$counter}{$command}\r\n");
    $this->commandCounter++;

    $previousLine = '';
    $buf = '';
    $time = time();

    while ((time() - $time) < $this->timeOut) {
        $newLine = fread($this->stream, 4096);
        if(!strlen($newLine)) continue;
        $buf .= $newLine;

        file_put_contents("/LOG2.txt", $newLine, FILE_APPEND);


        if (strripos($previousLine.$newLine, $successPattern) !== FALSE){
            $this->responseContainer->setLastResponseText($buf);
            return $buf;
        }
        if (strripos($previousLine.$newLine, $this->commandHash . ($this->commandCounter - 1) . ' NO') !== FALSE
            || strripos($previousLine.$newLine, $this->commandHash . ($this->commandCounter - 1) . ' BAD') !== FALSE){
            $this->responseContainer->setLastErrorText($buf);
            return false;
        }
        $previousLine = $newLine;
    }

    var_dump(" Time out");

    $this->responseContainer->setLastErrorText("{$command} {$counter} Time out");
    return false;
}




/**
 * @param $mailString
 * @param string $folder
 * @return false|int
 */
public function append($mailString, $folder = "INBOX")
{
    if($this->sendCommand("APPEND {$folder} {".strlen($mailString)."}", "go ahead")){
        $response = $this->sendCommand($mailString, '', false);
        return $this->imapParser->parseAppendResult($response);
    }
    return false;
}




    $message = new \Swift_Message();
    $message->setSubject($mail->subject);
    $message->setFrom($mail->from);
    $message->setTo($mail->to);
    $message->addPart($mail->body, 'text/html');

    foreach($mail->files as $file){
        $attachment = \Swift_Attachment::fromPath($file->getPath());
        $attachment->setFilename($file->name.".".$file->type);
        $message->attach($attachment);
    }


    $appendUid = $this->imapService->getCommander()->append($message->toString());

创建流:

/**
 * @param string $host
 * @param integer $port
 * @return bool
 */
protected function createStream($host, $port)
{
    //@todo proxy authentication
    if($this->stream = @stream_socket_client("ssl://{$host}:{$port}", $errno, $errstr, $this->timeOut, STREAM_CLIENT_CONNECT, $this->context)) {
        stream_set_timeout($this->stream, $this->timeOut);
        return $this->stream;
    }
    $this->responseContainer->setLastErrorText("Failed connection to imap. Without proxy. " . $errstr);
    return false;
}

0 个答案:

没有答案