Модуль E-mail

Комментарии: 36  Просмотры: 24 940

Первое, что вам надо сделать — это зарегистрировать почтовый ящик, через который будет отправляться вся почта. Отправлять письма мы будем через smtp, так как многие почтовики типа mail.ru отбраковывают письма, отправленные через mail(). Крайне рекомендую регистрироваться на gmail.com.
Теперь скачайте архив с модулем e-mail Отсюда и распакуйте его в папку modules.
Следующее, что нужно сделать — это создать файл конфигурации /application/config/email.php

<?php defined('SYSPATH') OR die('No direct access allowed.');
return array(
	/**
	 * SwiftMailer driver, used with the email module.
	 *
	 * Valid drivers are: native, sendmail, smtp
	 */
         'driver' => 'smtp',
 
	/**
	 * To use secure connections with SMTP, set "port" to 465 instead of 25.
	 * To enable TLS, set "encryption" to "tls".
	 * 
	 * Note for SMTP, 'auth' key no longer exists as it did in 2.3.x helper
	 * Simply specifying a username and password is enough for all normal auth methods
	 * as they are autodeteccted in Swiftmailer 4
	 * 
	 * PopB4Smtp is not supported in this module as I had no way to test it but 
	 * SwiftMailer 4 does have a PopBeforeSMTP plugin so it shouldn't be hard to implement
	 * 
	 * Encryption can be one of 'ssl' or 'tls' (both require non-default PHP extensions
	 *
	 * Driver options:
	 * @param   null    native: no options
	 * @param   string  sendmail: executable path, with -bs or equivalent attached
	 * @param   array   smtp: hostname, (username), (password), (port), (encryption)
	 */
//       'options' => NULL
         'options' => array('hostname' => 'smtp.gmail.com',
                                    'username' => 'логин',
                                    'password' => 'пароль',
                                    'port'     => '465',
                                    'encryption' => 'ssl'
         ));

Если ваша почта находится на gmail.com, то вам нужно поменять только логин и пароль в массиве (логин выглядит как почтовый адрес, т.е. вместе с @gmail.com). Если нет, то еще hostname и port (эти параметры есть в настройках почтового клиента).

Теперь нужно подключить наш модуль, чтобы фреймворк «увидел» его. Для этого в файле bootstrap.php в массиве со списком модулей добавьте строку:

    'email'       => MODPATH.'email', // E-mail

И собственно все. Сама отправка выглядит так:

    $config = Kohana::$config->load('email');
    Email::connect($config);
 
    $to = 'kohanablog@gmail.com';
    $subject = 'Сообщение от Коханой..т.е. Коханы.';
    $from = 'kohanaframework@test.ru';
    $message = 'Проверка связи';
 
    Email::send($to, $from, $subject, $message, $html = false);

Т.е. вначале мы получаем наши конфигурационные настройки, потом определяем параметры и наконец отправляем письмо.
Все работает. Я только что проверил. Пришло и на gmail.com, и на mail.ru. До ума код вы уже сами доведете. Например, желательно сделать проверку, произошла ли отправка. Успешная отправка возвращает число — количество отправленных писем. Т.к. параметр $to может быть массивом с несколькими адресами. Например:

$to = array('to' => 'test@example.com', 
            'cc' => array('test2@example.com', 'Jane Doe'), 
            'bcc' => 'another@example.com'
           );

Для демонстрации работы почты я хотел сделать страничку, где бы вы могли ввести свой адрес и отправить сами себе письмо. Но боюсь, что это будет использоваться для рассылки спама. Так что может быть позже, когда мы изучим модуль с капчей :)

P.S. Если вы все-таки не хотите использовать smtp, то просто не создавайте конфигурационный файл и не загружайте его. Будет использоваться конфигурация по умолчанию. Но я бы не рекомендовал так делать.

Обсудить на форуме


К записи оставлено 36 коммент.

Сделал, работает. Для настройки выполнил следующие операции, — возможно какие то из них были лишними, разбираться времени не было:
1) Скопировал файлы ssleay32.dll и libeay32.dll из «\xampp\apache\bin», и php_openssl.ddl из «\xampp\php\ext» в system32
2) Настройках php.ini ф-ии sendmail без «;» оставил только sendmail_path = «\xampp\sendmail\sendmail.exe -t»
3) В php.ini добавил строку extension=php_openssl.dll
4) Настройки sendmail.ini (для гугла) следующие:
smtp_port=465
error_logfile=error.log
debug_logfile=debug.log
auth_username=(ваш логин на гугле)
auth_password=(ваш пароль)
hostname=gmail.com
5) Грузим сервер, — проще просто перезагрузить комп — надёжнее.

Если поможет — буду рад))

Подскажите, а с помощью чего можно читать письма с почты?

Я вопроса лично не понял.

Imap функции посмотри + minion

У тебя какой то трабл, что нужно еще что то открывать?

ErrorException [ Warning ]: is_writable() [function.is-writable]: open_basedir restriction in effect. File(/var/tmp/) is not within the allowed path(s): (/home/

не проходит эту проверку:

if (function_exists(‘sys_get_temp_dir’) && is_writable(sys_get_temp_dir()))
{
Swift_Preferences::getInstance()
-> setTempDir(sys_get_temp_dir())
-> setCacheType(‘disk’);
}

Используя класс View и его метод render можно формировать письма из шаблонов. Может кому будет полезно)

А можно еще данным методом отправлять вложения? если да, то подскажите, как это сделать?

сделал но ошибка = ErrorException [ Fatal Error ]: Call to undefined method Kohana::config(). в классе Email эта строка ругается ($config === NULL) and $config = Kohana::config(‘email’); . Добавил
$config = Kohana::$config->load(‘email’);
Email::connect($config);
так же не отправляет.

Кто сталкивался? Отправляю почту через smtp.yandex.ru с помощью этого модуля Мне приходит по 2 письма почему-то. И так и сяк крутил. В общем отправляет по 2 раза почему-то. Ставил time() в заголовок письма, при отправке. Разница в 3 секунды.

Выложи кусок кода, который отправляет письмо



Оставить комментарий или два

Пожалуйста, зарегистрируйтесь для комментирования.