编程语言
首页 > 编程语言> > 亚马逊EC2-再次:从EC2实例发送邮件(通过php)

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

作者:互联网

我已经看到了很多有关使用php的mail函数从Amazon EC2实例发送邮件的问题的讨论.没有任何建议对我有用.

这是我的设置:

>我有ubuntu EC2实例.
>我按照Amazon SES上的步骤使用为我创建的凭据安装后缀.我尝试了stunnel和直接方法.
>我使用swiftmail传输根据this发送我的邮件.用于发送邮件的传输功能返回0已交付.
>我只使用php邮件,它返回true.但是,即使是垃圾邮件也不会发送邮件.

顺便说一句,我没有在SES中使用生产服务.限制对我来说很好,我只是希望它能正常工作.

我怀疑我没有通过正确的身份验证,也看不出为什么.我尝试通过telnet … amazonaws.com 25进行连接.但是,当我在telnet中尝试命令Mail From:…时,它说需要身份验证.

我已经想到了一种替代方法:sendgrid.对我来说太贵了.

有什么想法吗?

解决方法:

这是我使用Sendgrid使用PHP从EC2实例发送邮件的方式:

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

标签:postfix-mta,amazon-ses,amazon-ec2,php
来源: https://codeday.me/bug/20191127/2075156.html