web-dev-qa-db-ja.com

AmazonSESを使用したCodeigniterSMTPメール

昨日、AmazonはSES(Simple Email Service)のSMTPサポートを発表したと思います。

CodeigniterでSMTPメールを送信しようとしましたがうまくいきませんでした。

確認済みの送信者がいますが、すべて問題ないようです。

$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('[email protected]', 'Test From');
$this->email->to('[email protected]', '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.

これらのテストは、mediatemple(gs)サーバーで実行されます。

19
AFRC

次の行を追加するまで、タイムアウトメッセージが表示されました:-

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

ホストをssl://email-smtp.us-east-1.amazonaws.comに設定しています

27
Stephen

CIをAmazonSimple Email Service(SES)と連携させるには、3つのことを行う必要があります。

  1. newline = \r\nを設定する必要があります。そうしないと、タイムアウトが発生します。
  2. smtp_cryptoを何かに設定する必要があります。 (新しい要件)
  3. 「差出人」のEメールアドレスがAmazonSESで承認されていることを確認する必要があります。 「差出人」のメールアドレスを「[email protected]」にしました

さらに、「差出人」の電子メールアドレスにDKIMを設定して、電子メールがスパムフォルダに入れられないようにする必要があります。これには、Amazon SES-> Identity Management-> Email Addresses-> DKIMに移動し、有効化ボタンを押して、WebサイトのDNSに3つのDNSエントリを追加することが含まれます。

SPFを設定するために特別なことをする必要はありません。エンベロープドメインamazones.comはSPFを渡します。

最後に、承認された「差出人」の電子メールアドレスとは異なる電子メールアドレスにユーザーが返信できるようにする場合は、必ず「返信先」を使用してください。

作業コードの例:

$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();
9
AdmiralAdama
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;

    } 
6
Junior Ferreira

私も行を追加する必要がありました

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

私の設定配列に

これは CI 2.1.0以降でサポートされています

4
Joe Lipson

私のために働いたセットアップは次のようになります:

$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('[email protected]', 'From at Test.com');
$this->email->to('[email protected]');

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

$this->email->send();

改行文字は「\ r\n」に設定する必要があり、上記のように「\ r\n」ではなく「\ r\n」として適切に設定されている場合は、構成ファイルで設定できます。

2
Emile Bourquin