再次:从EC2实例发送邮件(通过php)

时间:2012-10-03 13:10:57

标签: amazon-ec2 postfix-mta php amazon-ses

我已经看到很多关于使用php的邮件功能从亚马逊EC2实例发送邮件的问题的讨论。这些建议都没有对我有用。

这是我的设置:

  • 我有ubuntu EC2实例。
  • 我按照Amazon的SES上的步骤使用为我创建的凭据安装postfix。我尝试了stunnel和直接方法。
  • 我根据this使用swiftmail传输发送邮件。发送邮件的传输功能返回0。
  • 我只是单独使用php邮件,它返回true。但是,即使垃圾邮件也没有发送邮件。

顺便说一句,我没有在SES上使用生产服务。我的限制很好,我只是想让它起作用。

我怀疑我没有正确认证,我不明白为什么。我试图telnet ... amazonaws.com 25它连接起来。但是当我在telnet中尝试命令Mail From:...时,它说需要身份验证。

我已经想到了另一种选择:sendgrid。我的使用太贵了。

有什么想法?

2 个答案:

答案 0 :(得分:2)

以下是我如何使用Sendgrid使用PHP从EC2实例发送邮件:

  1. 注册一个Sendgrid帐户。您将收到用于发送电子邮件的用户名和密码。此外,Sendgrid将手动验证您的帐户(可能是为了防止垃圾邮件)。
  2. 在ubuntu中安装PHP curl库: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);
    

答案 1 :(得分:1)

后缀的一种替代方法是使用“simple smtp”(ssmtp),它将提供其他程序/框架可能使用的工作 sendmail 。在此示例中,ssmtp将通过Gmail帐户发送电子邮件。

  1. 如果您还没有
  2. ,请先打开一个Gmail帐户
  3. 确保您绝对不已安装xmail或postfix等并发邮件应用,否则会干扰
  4. 然后安装ssmtp:sudo apt-get install ssmtp
  5. 然后修改/etc/ssmtp/ssmtp.conf(见下文)
  6. 然后修改/etc/ssmtp/revaliases(见下文)
  7. 然后测试:echo message content | sendmail -v test@something.com
  8. (可选)查看日志是否无效:ll /var/log/mail.*cat ...
  9. ssmtp.conf 的内容应为:(取自我的puppet模块,将<%=%>部分替换为您的数据)

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

    警告:conf文件应该有unix eols。

    revaliases 的内容应为:

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

    这种技术非常简单,但我想如果你需要发送数百封电子邮件,它就无法扩展。

    另一个很好的链接(法语):http://doc.ubuntu-fr.org/ssmtp