26.08.2011 06:34
В Этой статье я расскажу как "правильно" отсылать почту из Амазон облака.
Проблема в том, что по умолчанию все айпи присвоенные амазону не являются доверенными и могут даже быть занесены во всякие black-listы. Кроме того, для отправки почты, необходимо внести reverse DNS записи. Вобщем все не очень тривиально.
Поэтому Amazon не так давно анонсировало новый сервис SES (Amazon Simple Email Service). Они позиционируюn его как транзакционный (это значит если амазон ответил ОК значит емейл был выслан и без вариантов) и доверенный центр рассылки информации. Действительно ни один емейл, высланный мной через этот сервис, пока не был замечен в спаме. Использование этого сервиса позволяет вообще не запускать sendmail на Amazon VPC. Интересно не правда ли!?
Смотрите также аналогичную статью о Amazon SQS с примерами
1) Вам придётся стартовать sendmail
#service sendmail start
2) Вам понадобится заполнить и отправить форму Request to Remove Email Sending Limitations
1) Вам понадобится Amazon SDK
2) Напишем небольшой скрипт для тестирования SES на PHP
Инициализация
define('AWS_KEY', '<value>'); define('AWS_SECRET_KEY', '<value>'); define('AWS_ACCOUNT_ID', '<value>'); define('AWS_CANONICAL_ID', '<value>'); require_once '../sdk.class.php'; // тут конечно ваше расположение должно быть $ses = new AmazonSES(); $region = AmazonSES::REGION_US_E1; // не забывйте что доступен этот сервис всеголишь для одного региона $ses->set_region($region);
Запрос на верификацию емайл (иначе ничего не заработает)
Верифицировать надо оба емайла и From и To
$answer = $ses->verify_email_address('<Ваш емайл>'); if (!is_int($answer) && !$answer->isOk()) { echo '<p style="color:red;">ERROR</p>'; echo 'ErrorCode:'.$answer->status; echo '<pre>'; print_r($answer->body->Error); echo '</pre>'; }
Собственно отправка емайл
$params = array( 'ToAddresses' => '<Ваш емайл>' ); $message = array( 'Subject' => array('Charset'=>'UTF-8','Data'=>'Hello world. Second edition'.date('Y-m-d H:s', time())), 'Body' => array( 'Html' => array('Charset'=>'UTF-8','Data'=>'<p>Hello world.</p> <p>Server time:'.date('Y-m-d H:s', time()).'</p> <p><a href="http://www.ivanchenko.by">Public <b>web site</b></a><p> <p>This message is just SES testing</p>')) , ); $opt = array( // Optional parameters 'ReplyToAddresses' => '<Ваш емайл2>' ); $answer = $ses->send_email('<Ваш емайл2>', $params, $message, $opt); if (!is_int($answer) && !$answer->isOk()) { echo '<p style="color:red;">ERROR</p>'; echo 'ErrorCode:'.$answer->status; echo '<pre>'; print_r($answer->body->Error); echo '</pre>'; }
Собственно всё очень просто.
Удачи :).
Уважаемые посетители.
Вы можете абсолютно не стесняясь задавать мне вопросы я обязательно отвечу. Пишите ваши вопросы письмом по адресу sergey@ivanchenko.by.