3

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

这是我的设置:

  • 我有 ubuntu EC2 实例。
  • 我按照亚马逊 SES 上的步骤使用为我创建的凭据安装后缀。我尝试了 stunnel 和直接方法。
  • 我使用 swiftmail transport 根据this发送我的邮件。发送邮件的传输函数返回 0 已投递。
  • 我单独使用了php邮件,它返回true。但是,即使是垃圾邮件,也不会发送任何邮件。

顺便说一句,我没有使用 SES 的生产服务。限制对我来说很好,我只想让它工作。

我怀疑我的身份验证不正确,我不明白为什么。我尝试远程登录 ...amazonaws.com 25 并且它已连接。但是当我在 telnet 中尝试命令 Mail From: ... 时,它说需要身份验证。

我已经想到了一个替代方案:sendgrid。对我来说太贵了。

有什么想法吗?

4

2 回答 2

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);
    
于 2012-10-18T01:21:17.167 回答
1

postfix 的一种替代方法是使用“simple smtp”(ssmtp),它将提供其他程序/框架可能使用的工作发送邮件。在此示例中,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 文件应该有 unix eols。

重命名的内容应该是:

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

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

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

于 2012-10-17T21:58:30.150 回答