3

PHP のメール機能を使用して Amazon EC2 インスタンスからメールを送信する際の問題について、多くの議論を見てきました。どの提案も私にはうまくいきませんでした。

これが私のセットアップです:

  • ubuntu EC2 インスタンスがあります。
  • Amazon の SES の手順に従って、作成された資格情報を使用して postfix をインストールしました。stunnel と直接の両方の方法を試しました。
  • this に従ってメールを送信するためにswiftmail transportを使用しまし。メールを送信するトランスポート関数は 0 を返します。
  • 私はphpメールを単独で使用しましたが、trueを返します。ただし、迷惑メールでもメールは届きません。

ちなみに私はSESで本番サービスは使っていません。制限は私にとっては問題ありません。私はそれを機能させたいだけです。

適切に認証されていないと思われますが、その理由がわかりません。...amazonaws.com 25 に telnet しようとしたところ、接続されました。しかし、コマンド Mail From: ... を telnet で試したところ、認証が必要であると表示されました。

私はすでに別の方法を考えています: sendgrid. 私の使用には高すぎます。

何かご意見は?

4

2 に答える 2

2

Sendgrid を使用して、PHP を使用して EC2 インスタンスからメールを送信する方法を次に示します。

  1. Sendgrid アカウントにサインアップします。メールの送信に使用するユーザー名とパスワードを受け取ります。また、Sendgrid は手動でアカウントを確認します (おそらくスパムを防ぐため)。
  2. PHP curl ライブラリを ubuntu: にインストールしますsudo apt-get install php5-curl
  3. この PHP コードを使用してメールを送信します。

    $url = 'http://sendgrid.com/';
    $user = 'sendgrid_user';
    $pass = 'sendgrid_password'; 
    
    $params = array(
        'api_user'  => $user,
        'api_key'   => $pass,
        'to'        => $dest_addr,
        'subject'   => $subject,
        'html'      => $body,
        //'text'      => 'testing body',
        'from'      => $from_addr,
      );
    
    $request =  $url.'api/mail.send.json';
    
    $session = curl_init($request);
    // Tell curl to use HTTP POST
    curl_setopt ($session, CURLOPT_POST, true);
    // Tell curl that this is the body of the POST
    curl_setopt ($session, CURLOPT_POSTFIELDS, $params);
    // Tell curl not to return headers, but do return the response
    curl_setopt($session, CURLOPT_HEADER, false);
    curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
    
    // obtain response
    $response = curl_exec($session);
    
    //If the result is {"message":"success"}, then the mail is sent.  
    curl_close($session);
    
于 2012-10-18T01:21:17.167 に答える
1

postfixの代替手段の1つは、「simple smtp」(ssmtp)を使用することです。これにより、他のプログラム/フレームワークが使用する可能性のある有効なsendmailが提供されます。この例では、ssmtpはGmailアカウントを介してメールを送信します。

  1. Gmailアカウントをまだお持ちでない場合は、最初に開設してください
  2. xmailやpostfixのような同時メールアプリがすでにインストールされていないことを確認してください。そうしないと干渉します
  3. 次に、ssmtpをインストールします。sudo apt-get install ssmtp
  4. 次に編集します/etc/ssmtp/ssmtp.conf(以下を参照)
  5. 次に編集します/etc/ssmtp/revaliases(以下を参照)
  6. 次にテストします:echo message content | sendmail -v test@something.com
  7. (オプション)ログが機能しない場合はログを確認します:ll /var/log/mail.*およびcat ...

ssmtp.confのコンテンツは次のようになります:(私のpuppetモジュールから取得し、<%=%>セクションをデータに置き換えます)

root=<%= email %>
mailhub=smtp.googlemail.com:465
AuthUser=<%= email %>
AuthPass=<%= password %>
FromLineOverride=YES
UseTLS=YES

警告:confファイルにはunixeolsが必要です。

そして、改訂の内容は次のようになります。

root:<%= email %>:smtp.googlemail.com:465

この手法は非常に単純ですが、何百もの電子メールを送信する必要がある場合は拡張できないと思います。

別の優れたリンク(フランス語):http ://doc.ubuntu-fr.org/ssmtp

于 2012-10-17T21:58:30.150 に答える