Вход Связаться

Персональная страничка-блог

Amazon SES или "правильный" емайл из Амазон облака

amazon-logoВ Этой статье я расскажу как "правильно" отсылать почту из Амазон облака.

Проблема в том, что по умолчанию все айпи присвоенные амазону не являются доверенными и могут даже быть занесены во всякие black-listы. Кроме того, для отправки почты, необходимо внести reverse DNS записи. Вобщем все не очень тривиально.

Поэтому Amazon не так давно анонсировало новый сервис SES (Amazon Simple Email Service). Они позиционируюn его как транзакционный (это значит если амазон ответил ОК значит емейл был выслан и без вариантов) и доверенный центр рассылки информации. Действительно ни один емейл, высланный мной через этот сервис, пока не был замечен в спаме. Использование этого сервиса позволяет вообще не запускать sendmail на Amazon VPC. Интересно не правда ли!?

Смотрите также аналогичную статью о Amazon SQS с примерами

Основная информация о SES

  • По умолчанию отправлять емайл можно только на проверенные емайл
  • По умолчанию ограничение: 200 емайл в день и не чаще чем 1 сообщение в секунду
  • Все ограниченя можно снять заполнив и отправив запрос на получение полноценного доступа (подробнее тут Requesting Production Access). Ребята из Amazon сами решают дать его вам или нет. 
  • Отправлять можно какие угодно письма, есть все стандартные настройки как в обычной mail функции и кроме того можно самому формировать письмо и отсыоать его в raw виде.
  • ВНИМАНИЕ: На момент написания статьи сервис продолжал быть в "beta" варианте поэтому он доступен только для одного региона

Что касается обычных емайл:

1) Вам придётся стартовать sendmail

#service sendmail start

2) Вам понадобится заполнить и отправить форму Request to Remove Email Sending Limitations

Теперь пример работы с SES

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>';
  }

Собственно всё очень просто.

Удачи :).

Комментарии  

 
Administrator
0 #3 Administrator 02.09.2014 11:38
Цитирую Guest:
Здравствуйте! Подскажите пожалуйста как правильно подать заявку для увеличения лимитов? дело в том, что я зарегистрировался отправил заявку, но мне почему-то отказали, дайте пожалуйста инструкцию как обойти лимиты!

Боюсь я вам тут не помогу. Лимиты для этого и созданы.

Но если вы будете пользоваться API и отсылать письма только с подтвержденного емейла, то после бесплатного блока (:You can send 62,000 messages per month for free) вы будете платить по $0,1 за тысячу писем. И лимиты забыты... Там есть ещё одна планка в милиардах но она решается звонком в суппорт Amazon
 
 
Guest
0 #2 Guest 01.09.2014 22:24
Здравствуйте! Подскажите пожалуйста как правильно подать заявку для увеличения лимитов? дело в том, что я зарегистрировал ся отправил заявку, но мне почему-то отказали, дайте пожалуйста инструкцию как обойти лимиты!
 
 
Guest
0 #1 Guest 21.02.2014 06:52
Amazon SES действительно здоровская вещь. Я был очень рад когда этот сервис интегрировали в ***Скрыто***. С их решениями я могу отправлять письма с нескольких SMTP на свой выбор и в том числе через Amazon SES API.
 

Помощь по сайтам

Уважаемые посетители.

  • Если вы хотите создать WEB-сайт;
  • Если у вас есть сайт, и вы хотите его изменить/дополнить, но не знаете как;
  • Если у вас возникли какие-нибудь вопросы относительно настройки вашей CMS;

Вы можете абсолютно не стесняясь задавать мне вопросы я обязательно отвечу. Пишите ваши вопросы письмом по адресу Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. .