在SendMail异常AWS SES PHP SDK中获取未验证身份的错误代码

时间:2016-07-06 13:30:38

标签: php amazon-web-services amazon-ses

我目前正在捕获使用以下代码验证身份时的异常 -

use Aws\Ses\SesClient;
use Aws\Ses\Exception;

try {
       $result = $ses->sendEmail($data);
} catch (Exception $e) {

    echo $e->getResponse();

}

打印出以下内容 -

PHP Fatal error:  Uncaught exception 'Aws\Ses\Exception\SesException' 
with message 'Error executing "SendEmail" on "https://email.us-
west-2.amazonaws.com"; AWS HTTP error: Client error: `POST 
https://email.us-west-2.amazonaws.com` resulted in a `400 Bad Request` 
response:

<ErrorResponse xmlns="http://ses.amazonaws.com/doc/2010-12-01/">
    <Error>
    <Type>Sender</Type>
    <Code>MessageReje (truncated...)
    MessageRejected (client): Email address is not verified. The 
following identities failed the check in region US-WEST-2: 
arn:aws:ses:us-west-2:**************** - <ErrorResponse 
xmlns="http://ses.amazonaws.com/doc/2010-12-01/">
    <Error>
    <Type>Sender</Type>
    <Code>MessageRejected</Code>
    <Message>Email address is not verified. The following identities 
failed the check in region US-WEST-2: arn:aws:ses:us-
west-2:************</Message>
    </Error>
  <RequestId>*****************</RequestId>
</ErrorResponse>

exception 'GuzzleHttp\Exception\ClientException' with  in /var/www
/html/data/aws/Aws/WrappedHttpHandler.php on line 159

我无法获得下一页中列出的任何方法来打印出任何不同的方法 -

http://docs.aws.amazon.com/aws-sdk-php/v2/api/class-Aws.Ses.Exception.SesException.html

我是如何从这个异常中获取实际错误代码的任何想法,以便我可以在我的其余脚本中采取适当的操作?

2 个答案:

答案 0 :(得分:0)

为了捕获所有异常,最好使用

} catch (\Exception $e) {

确保您没有从错误的命名空间中获取错误的Exception类。

关于您遇到的问题 - 使用Amazon SES发送电子邮件时,您必须先verify your email/domain(请注意,如果未经过验证,任何From, source, sender, return-path标头都会导致您出现问题)。

如果您可以发布有关您的$ses对象或您使用的$data的一些信息,则可能有所帮助。

答案 1 :(得分:0)

Class MessageRejectedException 表示操作失败,无法发送消息。检查错误堆栈以获取有关错误原因的更多信息。

Exception
    Extended by RuntimeException
        Extended by Aws\Common\Exception\RuntimeException implements Aws\Common\Exception\AwsExceptionInterface
            Extended by Aws\Common\Exception\ServiceResponseException
                Extended by Aws\Ses\Exception\SesException
                    Extended by Aws\Ses\Exception\MessageRejectedException

试试这个 - &gt;使用Aws \ Ses \ Exception \ MessageRejectedException; 或使用Aws \ Ses \ Exception \ SesException;并将类名替换为catche块

因为Aws \ Ses \ Exception是类MessageRejectedException的命名空间。 你必须使用带有命名空间的类,而不仅仅是命名空间。

use Aws\Ses\SesClient;
use Aws\Ses\Exception\MessageRejectedException;

try {
       $result = $ses->sendEmail($data);
} catch (MessageRejectedException $e) {

    echo $e->getResponse();

}

我希望有所帮助。 祝你好运