Плагин CakePHP для электронной почты - проблемы с его настройкой для моей установки CakePHP - PullRequest
0 голосов
/ 17 августа 2011

Я пытаюсь добавить этот плагин для электронной почты в мою CakePHP v1.3.3 установку, но у меня проблемы новичка.

Вот плагин: GitHub SourceCode

Я пытался следовать довольно четкому примеру, но я не уверен, что указать некоторые параметры для соединения с источником данных.

У меня есть учетная запись Gmail, к которой я хочу подключиться через IMAP. Вот мой код базы данных. Я не уверен, что поставить для «подключения» и «источника данных».

public $emailCardOrder = array(
    'datasource' => 'Emails.Imap',
    'server' => 'imap.gmail.com',
    'connect' => 'imap/tls/novalidate-cert',
    'username' => 'abcd@gmail.com',
    'password' => '#######',
    'port' => '993',
    'ssl' => true,
    'encoding' => 'UTF-8',
    'error_handler' => 'php',
    'auto_mark_as' => array(
        'Seen',
        // 'Answered',
        // 'Flagged',
        // 'Deleted',
        // 'Draft',
    ),
);

Я получаю ошибку: PHP Fatal error: ConnectionManager::loadDataSource - Unable to import DataSource class Emails.ImapSource in /repos/intranet/trunk/cake/libs/model/connection_manager.php on line 185

Любая помощь приветствуется.

Ответы [ 3 ]

2 голосов
/ 15 января 2013

Вам нужно изменить свой источник данных на то, что вы называете источником данных. По умолчанию это не Emails.Imap. Плагин называется CakePHP-Email-Plugin, поэтому он должен быть «CakePHP-Email-Plugin.ImapSource».

public $emailCardOrder = array(
    'datasource' => 'CakePHP-Email-Plugin.ImapSource',
    'server' => 'imap.gmail.com',
    'connect' => 'imap/tls/novalidate-cert',
    'username' => 'abcd@gmail.com',
    'password' => '#######',
    'port' => '993',
    'ssl' => true,
    'encoding' => 'UTF-8',
    'error_handler' => 'php',
    'auto_mark_as' => array(
        'Seen' //,
        // 'Answered',
        // 'Flagged',
        // 'Deleted',
        // 'Draft',
    ),

);

Два года, лучше поздно, чем никогда!

1 голос
/ 09 января 2012

Будьте осторожны. Файл imap_source.php действительно находится на правильном пути: app/plugins/emails/! Возможно, эти файлы находятся в подкаталоге, когда вы распаковываете его с помощью WinZip; -)

Итак, во-вторых, я должен изменить код в функции connect, чтобы окончательно получить строку для соединения с именем папки в почтовом ящике следующим образом:
{<server_name_or_ip>:<port><connect_string>}<folder_name>

например: {server.name.cz:143/imap/notls}INBOX

Может быть, это специальность серверов windows imap, таких как IceWarp или MS Exchange server.

Вы можете контролировать успешность соединения в строке 504 в файле imap_source.php

-
Mareg

0 голосов
/ 21 августа 2013

Вот мои настройки для этого плагина

Я поместил источник данных в /app/models/datasource/imap_source.php

в database.php добавил эту переменную

var $emailTicket = array(
        'datasource' => 'imap',
        'server' => 'imap.gmail.com',
        //'connect' => 'imap/tls/novalidate-cert', //comment it out
        'username' => 'username',
        'password' => '*******',
        'port' => '993',
        'ssl' => true,
        'encoding' => 'UTF-8',
        'error_handler' => 'php',
        'auto_mark_as' => array(
            'Seen',
            // 'Answered',
            // 'Flagged',
            // 'Deleted',
            // 'Draft',
        )
    );

и в моей модели

var $useDbConfig = 'emailTicket';

Это работает нормально, пока вы не попытаетесь извлечь вложения

для извлечения вложений, я раскомментировал эти две строки и прокомментировал еще одну строку для флага is_attachment

protected function _awesomePart($Part, $uid) {
    if (!($Part->format = @$this->encodingTypes[$Part->type])) {
        $Part->format = $this->encodingTypes[0];
    }

    if (!($Part->datatype = @$this->dataTypes[$Part->type])) {
        $Part->datatype = $this->dataTypes[0];
    }

    $Part->mimeType = strtolower($Part->datatype . '/' . $Part->subtype);

    $Part->is_attachment = false;
    $Part->filename      = '';
    $Part->name          = '';
    $Part->uid           = $uid;

    if ($Part->ifdparameters) {
        foreach ($Part->dparameters as $Object) {
            if (strtolower($Object->attribute) === 'filename') {
                #$Part->is_attachment = true; //uncomment this line
                $Part->filename      = $Object->value;
            }
        }
    }

    if ($Part->ifparameters) {
        foreach ($Part->parameters as $Object) {
            if (strtolower($Object->attribute) === 'name') {
                #$Part->is_attachment = true; //uncomment this line
                $Part->name          = $Object->value;
            }
        }
    }

    if (false !== strpos($Part->path, '.')) {
        $Part->is_attachment = true; //comment this line
    }

    return $Part;
}

надеюсь, что это работает для вас

...