【问题标题】:Issue with AWS SES for attachment with zip带有 zip 附件的 AWS SES 问题
【发布时间】:2018-02-27 21:55:17
【问题描述】:

我尝试使用 SES API 将附件作为 csv 文件的压缩内容发送。 csv 文件大小接近 3MB。我没有使用任何 SDK,而是使用 curl 和 API 端点从 bash shell 执行此操作。

代码有效,我也将 zip 作为附件放入我的邮箱。但是当我尝试下载相同的文件时,它告诉我文件已损坏或损坏。

$REPORTOUTFILE 是 csv 文件

在这方面需要您的帮助,因为我无法找到解决此问题的方法。

CURRENT_PATH=$(pwd)
zip $CURRENT_PATH/message.zip $REPORTOUTFILE
ATTACHMENT_CONTENTS=`zcat $CURRENT_PATH/message.zip`
ATTACHMENT_TEXT="stuck_order_report_tmp_$DATE.zip"
ATTACHMENT_CONTENTS_ENCODED="$(echo "$ATTACHMENT_CONTENTS" | base64)"

VALUE="To:"$TO"
Subject: Email with Attachment
Content-Type: multipart/mixed;
    boundary="a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a"

--a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a
Content-Type: multipart/alternative;
    boundary="sub_a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a"

--sub_a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable

--sub_a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a
Content-Type: text/html; charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable

Hello ! This is the text content for the email body.

--sub_a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a--

--a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a
Content-Type: attachment/zip; name="$ATTACHMENT_TEXT"
Content-Description: "$ATTACHMENT_TEXT"
Content-Disposition: attachment;filename="$ATTACHMENT_TEXT";
Content-Transfer-Encoding: base64

$ATTACHMENT_CONTENTS_ENCODED
--a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a--"

MESSAGE="$(echo "$VALUE" | base64)"
echo "$MESSAGE" > $CURRENT_PATH/message_new.txt
message="RawMessage.Data=$MESSAGE"
echo "$message" > $CURRENT_PATH/message.txt

curl  -v -X POST --trace "$CURRENT_PATH/trace.log" -H "Date: $date" -H "$auth_header" -H "$content_encoding" --data-binary "@$CURRENT_PATH/message.txt" --data-urlencode "$source" --data-urlencode "$action" "$endpoint"

【问题讨论】:

    标签: amazon-web-services amazon-ses


    【解决方案1】:

    下面的sn-p终于奏效了

    ## AWS SES Invocation ##
    CURRENT_PATH=$(pwd)
    zip $CURRENT_PATH/message.zip $REPORTOUTFILE
    ATTACHMENT_TEXT="stuck_order_report_tmp_$DATE.zip"
    ATTACHMENT_CONTENTS_ENCODED="$( base64  $CURRENT_PATH/message.zip )"
    
    VALUE="To:"$TO"
    Subject: Email with Attachment
    Content-Type: multipart/mixed;
        boundary="a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a"
    
    --a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a
    Content-Type: multipart/alternative;
        boundary="sub_a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a"
    
    --sub_a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a
    Content-Type: text/plain; charset=iso-8859-1
    Content-Transfer-Encoding: quoted-printable
    
    --sub_a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a
    Content-Type: text/html; charset=iso-8859-1
    Content-Transfer-Encoding: quoted-printable
    
    Hello ! This is the text content for the email body. Whatever modification is required has to happen here.
    Ensure that the boundaries values are changed. Feel free to change the last two digits only.
    Remember that the same change  must reflect in both start of boundary and end of boundary.
    
    --sub_a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a--
    
    --a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a
    Content-Type: attachment/zip; name="$ATTACHMENT_TEXT"
    Content-Description: "$ATTACHMENT_TEXT"
    Content-Disposition: attachment;filename="$ATTACHMENT_TEXT";
    Content-Transfer-Encoding: base64
    
    $ATTACHMENT_CONTENTS_ENCODED
    --a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a--"
    MESSAGE="$(echo "$VALUE" | base64)"
    message="RawMessage.Data=$MESSAGE"
    #message_edited=${message%??}
    last_two_character=${message:(-2)}
    last_one_character=${message:(-1)}
    echo $last_two_character
    echo $last_one_character
    if [ "$last_two_character" == "==" ]; then
    message_edited=${message%??}
     else
    message_edited=${message}
    fi
    if [ "$last_one_character" == "=" ]; then
    message_edited=${message%??}
     else
    message_edited=${message}
    fi
    echo "$message_edited" > $CURRENT_PATH/message.txt
    chmod 777 $CURRENT_PATH/message.txt
    # trigger email
    curl  -v -X POST --trace "$CURRENT_PATH/trace.log" -H "Date: $date" -H "$auth_header" -H "$content_encoding" --data-binary "@$CURRENT_PATH/message.txt" --data-urlencode "$source" --data-urlencode "$action" "$endpoint"
    
    rm -f $CURRENT_PATH/message.txt
    rm -f $CURRENT_PATH/message.zip
    rm -f $REPORTOUTFILE
    

    【讨论】:

      【解决方案2】:

      我不明白。让我知道我是否正确。您正在发送 csv,但您想以 .zip 格式获取它?

      可能会引发该错误,因为文件未编码为 zip,即使它是作为 zip 接收的。这就像当你尝试用 word 打开一个 pdf 时,它会显示所有加密的内容。

      您是否尝试在发送邮件之前制作 zip? (用 zip 命令什么的)

      【讨论】:

      • 是的。我想压缩 csv 文件并将其作为电子邮件附件发送。但是根据 SES API 要求,您必须对附件进行 base 64 编码,然后发送它,这就是我正在做的事情。如果在最后一行我压缩内容然后发送它,AWS SES API 将引发错误。如果您认为编码不正确,请纠正方法。
      猜你喜欢
      • 1970-01-01
      • 2017-09-28
      • 1970-01-01
      • 2019-12-07
      • 2019-06-04
      • 2014-05-27
      • 1970-01-01
      • 2017-11-23
      • 2015-03-19
      相关资源
      最近更新 更多