Codeigniter SMTP Электронная почта с Amazon SES - PullRequest
18 голосов
/ 16 декабря 2011

Я думаю, вчера Amazon объявил о поддержке SMTP для SES (Simple Email Service).

Я попытался отправить сообщение SMTP с Codeigniter безуспешно.

У меня есть подтвержденный отправитель, и все выглядит хорошо:

$this->load->library('email');

$config = array(
    'protocol' => 'smtp',
    'smtp_host' => 'email-smtp.us-east-1.amazonaws.com',
    'smtp_user' => 'SMTP USERNAME',
    'smtp_pass' => 'SMTP PASSWORD',
    'smtp_port' => 465,
    'mailtype' => 'html'
);

$this->email->initialize($config);
$this->email->print_debugger();

$this->email->from('verified_email_address@something.com', 'Test From');
$this->email->to('email@example.com', 'Test To');
$this->email->subject('Test');
$this->email->message('test');

$this->email->send();

Я попробовал следующий smtp_host:

  • email-smtp.us-east-1.amazonaws.com
  • TLS: //email-smtp.us-east-1.amazonaws.com
  • SSL: //email-smtp.us-east-1.amazonaws.com

Когда я повторяю print_debugger (), я получаю:

220 email-smtp.amazonaws.com ESMTP SimpleEmailService-194655181
hello: 421 Timeout waiting for data from client.

Эти тесты выполняются на сервере среднего уровня (gs).

Ответы [ 5 ]

27 голосов
/ 16 декабря 2011

Я получил это сообщение о тайм-ауте, пока не добавил строку: -

$this->email->set_newline("\r\n");

Мой хост установлен как ssl://email-smtp.us-east-1.amazonaws.com

9 голосов
/ 09 февраля 2018

Вам нужно сделать 3 вещи, чтобы настроить КИ для работы с Amazon Simple Email Service (SES)

  1. Необходимо установить newline = \r\n, иначе вы получите тайм-аут.
  2. Нужно установить smtp_crypto на что-то.(Новое требование)
  3. Необходимо убедиться, что адрес электронной почты «от» утвержден в Amazon SES.Я сделал свой адрес электронной почты "from" no-reply@mydomain.com "

Кроме того, вы должны настроить DKIM для своего адреса электронной почты" from ", чтобы сообщения не попадали в папки со спамом.Это включает в себя переход на Amazon SES -> Управление идентификацией -> Адреса электронной почты -> DKIM, нажатие кнопки включения и добавление 3 DNS-записей в DNS вашего веб-сайта.

Нет необходимости делать что-то особенное для настройки SPF.Домен конверта amazonses.com проходит SPF.

Наконец, убедитесь, что вы используете "reply-to", если хотите, чтобы пользователи могли отвечать на адрес электронной почты, отличный от вашего одобренного "from" e-mail.почтовый адрес.

Пример рабочего кода:

$obj = &get_instance();

$config['protocol'] = 'smtp';
$config['smtp_host'] = 'email-smtp.us-west-2.amazonaws.com';
$config['smtp_user'] = 'USER';
$config['smtp_pass'] = 'PASS';
$config['smtp_port'] = '587';
$config['newline'] = "\r\n";
$config['smtp_crypto'] = 'tls';
$obj->email->initialize($config);

$obj->email->set_mailtype('html');
// don't html_escape email header variables
$obj->email->from(MV_FROM_EMAIL, $from_name);
$obj->email->reply_to($from_email, $from_name);
$obj->email->to($to);
$obj->email->subject($subject);
$obj->email->message($obj->load->view($path, html_escape($data), true));
$obj->email->send();
6 голосов
/ 09 марта 2013
public function enviar_email($para, $assunto, $mensagem, $formato='html'){
            $this->CI->load->library('email');
            $config['mailtype']     = $formato;
            $config['useragent']    = 'Post Title';
            $config['protocol']     = 'smtp';
            $config['smtp_host']    = 'tls://email-smtp.us-east-1.amazonaws.com';
            $config['smtp_user']    = 'smtpuser';
            $config['smtp_pass']    = 'smtppass';
            $config['smtp_port']    = '465';
            $config['wordwrap']     = TRUE;
            $config['newline']      = "\r\n"; 

            $this->CI->email->initialize($config);

            $this->CI->email->from('Your Verified Sender Email', 'Post Title');
            $this->CI->email->to($para);
            $this->CI->email->subject($assunto);
            $this->CI->email->message($mensagem);


            if($this->CI->email->send()):
                    return TRUE;
            else:
                    $this->CI->email->print_debugger();
            endif;

    } 
4 голосов
/ 15 января 2014

Мне также нужно было добавить строку

$config['smtp_crypto']  = 'tls';

в мой конфигурационный массив

это поддерживается CI 2.1.0 и выше

2 голосов
/ 17 сентября 2013

Настройка, которая работала для меня, выглядит следующим образом:

$test_config['protocol'] = 'smtp';
$test_config['smtp_host'] = 'ssl://email-smtp.us-east-1.amazonaws.com';
$test_config['smtp_port'] = '465';
$test_config['smtp_user'] = 'XXXXXXXXXXXXXXXXXXX';
$test_config['smtp_pass'] = 'YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY';
$test_config['newline']      = "\r\n"; 

$this->email->initialize($test_config);

$this->email->from('from@test.com', 'From at Test.com');
$this->email->to('To@Test.com');

$this->email->subject('Email Test');
$this->email->message('Testing the email class.');

$this->email->send();

Символ новой строки должен быть установлен на "\ r \ n", и его можно ставить в файле конфигурации, если он правильно установлен как\ r \ n ", а не '\ r \ n', как отмечено выше.

...