亚马逊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