使用 PHP 开发工具包从 Amazon SES 发送 HTML 邮件

Posted

技术标签:

【中文标题】使用 PHP 开发工具包从 Amazon SES 发送 HTML 邮件【英文标题】:Sending HTML Mails from Amazon SES using PHP SDK 【发布时间】:2013-05-12 12:28:45 【问题描述】:

我正在开发一项从 AWS SES 服务发送电子邮件的服务。我已经能够发送纯文本邮件,但在其中一种情况下我需要发送丰富的 html 邮件。这是我使用的代码:

header("MIME-Version: 1.0; Content-type: text/html; charset=iso-8859-1");

    require_once(dirname(__FILE__).'/AWSSDKforphp/sdk.class.php');

// Instantiate the Amazon class
$ses = new AmazonSES();


$source = 'abc@www..com';

$dest = array('ToAddresses'=>array($to));

$message = CFComplexType::map(array('Subject.Data'=>$subject, 'Body.Html.Data'=>$message_mail));

$rSendEmail = $ses->send_email($source, $dest, $message);

message_mail 是一些放在表格中的 HTML 文本。 我已经尝试过 send_email 和 send_raw_email 但它们都没有工作。我需要做一些额外或不同的事情吗?

【问题讨论】:

【参考方案1】:

我知道这是个老问题,但仍在写一个答案。并希望它对将来的人有所帮助。

$m = new SimpleEmailServiceMessage();
$m->addTo('receiver email address');
$m->setFrom('send email address');
$m->setSubject('testing!');

$body= '<b>Hello world</b>';
$plainTextBody = '';

$m->setMessageFromString($plainTextBody,$body);    
print_r($ses->sendEmail($m));

【讨论】:

【参考方案2】:

这对我有用(不使用 sdk 或 smtp):

require_once('ses.php');

$ses = new SimpleEmailService('accessKey', 'secretKey');

$m = new SimpleEmailServiceMessage();
$m->addTo('addressee@example.com');
$m->setFrom('Name <yourmail@example.com>');
$m->setSubject('You have got Email!');
$m->setMessageFromString('Your message');
$ses->sendEmail($m);

你可以从http://www.orderingdisorder.com/aws/ses/获取ses.php

【讨论】:

您是否知道print_r($ses-&gt;sendEmail($m)); 是否会以亚马逊的 JSON 格式返回退回和滥用通知?还是在 ses.php 中没有实现? docs.aws.amazon.com/ses/latest/DeveloperGuide/…【参考方案3】:

我尝试使用 SES SDK,但使用起来并不容易。我最终使用 PHPMailer 通过 SMTP 连接到 SES。首先,从 Amazon SES 中设置 SMTP 访问,然后将这些行添加到 PHPMailer 以使其通过 TLS 连接到 SES:

$mail = new PHPMailer();

$mail->IsSMTP(true);
$mail->SMTPAuth = true;
$mail->Mailer = "smtp";
$mail->Host= "tls://email-smtp.us-east-1.amazonaws.com";
$mail->Port = 465;
$mail->Username = "";  // SMTP username (Amazon Access Key)
$mail->Password = "";  // SMTP Password (Amazon Secret Key)

// ... the rest of PHPMailer code here ...

PHPMailer 非常擅长丰富的电子邮件(带有文本回退)、嵌入的图像和附件。

【讨论】:

你在哪里粘贴你的访问密钥和秘密密钥? 您的访问密钥和秘密只是 SMTP 用户名和密码字段!我更新了答案:) 谢谢!顺便问一下,您认为哪个更快:SMTP 还是 Amazon API? 我不确定,但 SMTP 很慢。我们的每个线程每秒只能发送大约 2 封电子邮件。如果您有时间设置 Amazon API,那么值得一试。

以上是关于使用 PHP 开发工具包从 Amazon SES 发送 HTML 邮件的主要内容,如果未能解决你的问题,请参考以下文章

Amazon SES 中的特殊字符

Amazon SES:发送电子邮件标头

Amazon SES 返回的 SMTP 响应代码 530

Amazon SES 从实例配置文件元数据服务器检索凭证时出错。 (客户端错误:404)

Amazon SES 电子邮件地址未验证

Node.js:使用 AWS SES 发送电子邮件