Модуль E-mail

Комментарии: 36  Просмотры: 28 784

Первое, что вам надо сделать — это зарегистрировать почтовый ящик, через который будет отправляться вся почта. Отправлять письма мы будем через 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 коммент.

Спасибо за статью!
Завтра попытаюсь использовать данный модуль в бою.
Об успехах отпишу.

Попробуй. У меня все заработало. С нуля поставил вот прям по шагам, как здесь описал.

в модуле нужно строчку поправить
($config === NULL) and $config = Kohana::config(‘email’);

в 3.2 такой метод подгрузки конфигурации не катит

не подскажешь на что поменять?

мало ли кому пригодится
Kohana::config(‘email’);
С версии 3.4 пишем:
Kohana::$config->load(‘email’)

Ну тут же есть уже в описании
$config = Kohana::$config->load(‘email’);
Email::connect($config);

Или это, чтобы сразу писать Email::connect(); ?

лучше всего добавиь в метод connect() проверку на переданый конфиг. т.е. есть конфиг по умолчанию который лежит в application/config или в modules/email/config не важно, он идет как стандартный. и грузится если вызывать connect() без параметров. Если при вызове connect($config) передавать конфигурацию, то будет использоваться переданый конфиг. тогда модуль становится гибче.

Куда вставить то, что после слов:
«И собственно все. Сама отправка выглядит так:»?

В контроллер, в котором производится отправка, по всей видимости.

наверное не нужно пока использовать фреймворк. может лучше что-то из основ поучить?

Наверное не нужно быть таким высокомерным снобом. Тем более в свое время (думаю не очень давнее) вы были таким же обычным чайником.
Да и основы PHP здесь не очень-то пригодятся.
Фреймворки — это вообще отдельная тема и чтобы так вот налету в ней разбираться, нужно как минимум знать патерны и общую методологию проектирования приложений, что обычному юзеру нафик не надо.
Юзеру нужен обычный внятный мануал как всем этим добром полноценно пользоваться.

наверное обычному юзеру программирвоание и нафиг не нужно. это «добро» обычный каркас для решения однотипных задач не более. Когда я был чайником, то я как раз сидел разбирался с основами, потом ООП и прочее, а не канючил «обычный внятный мануал». Что бы на лету разбираться нужно читать офф документацию, комментарии в коде и сам код(основы, ООП и прочее), чего большинство юзеров(чайников) делать абсолютно не хочет, потому что лень. Хотите полноценно пользоваться есть вордпресс, джумла и тд. но и там сможете клепать только шаблонные сайты и визитки, так как для не стандартных задач прийдется разбираться с тем как это все простроенно и работает.

А у меня не получилось Gmail.
Выбрасывает эксепшн:
Unable to find the socket transport "ssl" — did you forget to enable it when you configured PHP?
Вот скрин: http://img818.imageshack.us/img818/3480/kohanax.png
А так понимаю в самом PHP что-то не включено? Это можно исправить локально с помощью htaccess?

Я установил модуль email под Денвером и у меня выдается такая же ошибка:
Unable to find the socket transport «ssl» — did you forget to enable it when you configured PHP?

Не подскажете где «подкрутить» ? Меня устроит если письма будут приходить в папку Денвера:
C:\WebServers\tmp\!sendmail\

В гугле много информации по этому поводу. Вот навскидку два:

•added C:\PHP\ext to the Windows path
•added libeay32.dll and ssleay32.dll to C:\WINDOWS\system32\inetsrv
•rebooted the server

и

Windows with XAMP:
1.Stop your Apache service
2.Find libeay32.dll and ssleay32.dll in xampp\php\ folder, and copy it into xampp\apache\bin\ folder. Overwrite the older files in there.
3.Edit php.ini file in xampp\apache\bin, remove the semicolon in “;extension=php_openssl.dll”
4.Start the Apache service

Windows with WAMP2:
1.From WAMP tray menu, go to PHP Extension
2.Check php_openssl
3.Apache will be restarted

Доброго дня, Денис Васильевич!
Спасибо Вам за материал по Kohana. Все толково и понятно!

По поводу ошибки в Денвере. Можно мне в вкратце объяснить в чем суть данной ошибки?

Заранее спасибо.

Это не ошибка Коханы. Не установлен модуль, который требуется для работы почты.

Не просто почты, а именно SSL соединения.
Для Денвера — Z:\usr\local\php5\php.ini
Раскомментировать строчку extension=php_openssl.dll

Угу. Выше я давал для ксампа
3.Edit php.ini file in xampp\apache\bin, remove the semicolon in “;extension=php_openssl.dll”
Для денвера тоже самое, только путь к файлу другой.

>>3.Edit php.ini file in xampp\apache\bin, remove the semicolon in “;extension=php_openssl.dll”

По мойму php.ini находиться в папке xampp\php, но это пол беды, я не могу найти в нём ни одного словосочетание содержащего символы ssl, не подскажете в чём беда? При установке хампа ставил только apache и mysql, может обязательно было ставить ftp клиент и остальное?

Ну и еще не факт что у вашего хостера это расширение будет включено. У моего (Укрхост) отключено, и я уже неделю не могу добиться от техподдержки решения этой проблемы.

Здравствуйте, не знаю в чём дело, но уменя постоянно выдаёт ошибку:

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

подскажите в чем проблема?

File(/var/tmp/) не находится в допустимой части, т.е. он вне /home/dttftekv/data где есть доступ для веб сервера. Вне этой папки нет доступа.

Надо найти где происходит обращение к /var/tmp/ и переопределить на /home/dttftekv/data/tmp например

а есть идеи где найти этот файл?

у меня ошибка
testtask.16mb.com/auth/reg
код 1
во время регстрации выдает ошибку
fsockopen() [function.fsockopen]: php_network_getaddresses: getaddrinfo failed: Name or service not known



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

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