如何使用 AWS SES 最新 SDK 3.33 和 PHP7 将文件作为附件发送?

Ram*_*pta 1 php amazon-web-services aws-sdk

我试图使用 PHP AWS SES 最新 SDK 3.33 将文件作为附件发送。

搜索解决方案后,我从这里得到了答案,但这适用于较旧版本的 AWS SDK,而不适用于当前版本。

AWS提供两个API方法sendEmailsendRawEmail,sendRawEmail用来发送文件作为附件的电子邮件。

Ram*_*pta 5

所以下面是最新的 AWS SDK 3.33 的更新代码

require __DIR__ . '/aws/vendor/autoload.php';
$s3_config = [
    'region' => 'us-east-1',
    'version' => 'latest',
    'credentials' => [
        'key' => '<keyxxx>',
        'secret' => '<secretxxx>'
    ]
];
$aws = new \Aws\Sdk($s3_config);
$client = $aws->createSes();
$content = "";
$filename = "";
$mailto = "to@test.com"
$content = file_get_contents($file);
$content = chunk_split(base64_encode($content));
$filename = basename($file);
$subject = "Test Email";
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$FILEINFO_MIME_TYPE = finfo_file($finfo, $file);
try {
    $separator = md5(time());
    $separator_multipart = md5($subject . time());
    $message = "MIME-Version: 1.0\n";
    $message .= "Subject: $subject\n";
    $message .= "From: Test Name <from@test.com>\n";
    $message .= "To: $mailto\n";
    $message .= "Content-Type: multipart/mixed; boundary=\"$separator_multipart\"\n";
    $message .= "\n--$separator_multipart\n";

    $message .= "Content-Type: multipart/alternative; boundary=\"$separator\"\n";
    $message .= "\n--$separator\n";
    $message .= "Content-Type: text/plain; charset=\"UTF-8\"\n";
    $message .= "\n$body\n";
    $message .= "\n--$separator--\n";

    $message .= "--$separator_multipart\n";
    $message .= "Content-Type: $FILEINFO_MIME_TYPE; name=\"$filename\"\n";
    $message .= "Content-Disposition: attachment; filename=\"$filename\"\n";
    $message .= "Content-Transfer-Encoding: base64\n";
    $message .= "$content\n";
    $message .= "--$separator_multipart--";

    $result = $client->sendRawEmail([
        'RawMessage' => [
            'Data' => $message
        ]
    ]);
    echo "\nEmail Sent\n";
} catch (\Exception $e) {
    echo $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)