通过SES发送邮件不起作用

时间:2016-07-05 13:54:23

标签: bash amazon-web-services

我写过这个剧本

#!/bin/bash

TO="abc@gmail.com"
FROM="def@gmail.com"
SUBJECT="test"
MESSAGE="test message"

date="$(date -R)"
echo $date
priv_key="my_access_key"
access_key="my_access_key_id"
signature="$(echo -n "$date" | openssl dgst -sha256 -hmac "$priv_key" -binary | base64 -w 0)"
echo $signature
auth_header="X-Amzn-Authorization: AWS3-HTTPS AWSAccessKeyId=$access_key, Algorithm=HmacSHA256, Signature=$signature ,Date=$date"
endpoint="https://email.us-east-1.amazonaws.com/"

action="Action=SendRawEmail"
source="Source=$FROM"
to="Destination.ToAddresses.member.1=$TO"
subject="Message.Subject.Data=$SUBJECT"
message="Message.Body.Text.Data=$MESSAGE"

curl -v -X POST -H "Date: $date" -H "$auth_header" --data-urlencode "$message" --data-urlencode "$to" --data-urlencode "$source" --data-urlencode "$action" --data-urlencode "$subject"  "$endpoint"

但是我收到了这个错误:

<ErrorResponse xmlns="http://ses.amazonaws.com/doc/2010-12-01/">
  <Error>
    <Type>Sender</Type>
    <Code>InvalidClientTokenId</Code>
    <Message>The security token included in the request is invalid</Message>
  </Error>
</ErrorResponse>

我无法解决问题,即它正在谈论的安全令牌。这是关于我的凭据。我创建了一个具有发送原始电子邮件角色的IAM用户。

1 个答案:

答案 0 :(得分:0)

首先,您需要转到IAM控制台并创建角色或用户,并向用户添加策略以使用SES发送电子邮件。

您永远不应该将凭据写入您的代码。有更安全,更正确的方法。例如,如果您使用的是EC2,则应将该角色添加到EC2实例中。另一种解决方案是使用环境变量(http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)。

当用户拥有此策略时,您还需要在AWS账户的SES仪表板中验证发件人电子邮件。您可以验证接收方电子邮件,也可以创建向未注册的接收方发送电子邮件的请求。

但首先,尝试添加IAM权限并尝试使其正常工作。