php - 将旧的 FuelPHP Amazon SES 包迁移到签名版本 4
问题描述
我正在支持具有旧 FuelPHP Web 应用程序的客户端。电子邮件正在使用这个 FuelPHP 包发送,Github 上不再存在该包。
- FuelPHP 的 Amazon 电子邮件交付库
- @link http://github.com/unforeseen/fuel-amazon-ses
在亚马逊迁移到签名版本 4 之前,该软件包一直有效。谁能帮我在软件包中升级什么,以便我使其符合这个新的签名版本。这是包代码。
<?php
/**
* Amazon Email Delivery library for FuelPHP
*
* @package Amazon
* @version 1.1
* @author Rob McCann (rob@robmccann.co.uk)
* @link http://github.com/unforeseen/fuel-amazon-ses
*
*/
class Email_Driver_SES extends \Email_Driver {
public $region = null;
protected $debug = true;
public function __construct($config)
{
parent::__construct($config);
\Config::load('ses', true);
$this->region = \Config::get('ses.region','us-east-1');
}
/**
* Sends the email using the Amazon SES email delivery system
*
* @return boolean True if successful, false if not.
*/
protected function _send()
{
$params = array(
'Action' => 'SendEmail',
'Source' => static::format_addresses(array($this->config['from'])),
'Message.Subject.Data' => $this->subject,
'Message.Body.Text.Data' => $this->alt_body,
'Message.Body.Html.Data' => $this->body
);
$i = 0;
foreach($this->to as $value)
{
$params['Destination.ToAddresses.member.'.($i+1)] = static::format_addresses(array($value));
++$i;
}
$i = 0;
foreach($this->cc as $value)
{
$params['Destination.CcAddresses.member.'.($i+1)] = static::format_addresses(array($value));
++$i;
}
$i = 0;
foreach($this->bcc as $value)
{
$params['Destination.BccAddresses.member.'.($i+1)] = static::format_addresses(array($value));
++$i;
}
$i = 0;
foreach($this->reply_to as $value)
{
$params['ReplyToAddresses.member.'.($i+1)] = static::format_addresses(array($value));
++$i;
}
$date = date(DATE_RSS);
$signature = $this->_sign_signature($date);
$curl = \Request::forge('https://email.' . $this->region . '.amazonaws.com/', array(
'driver' => 'curl',
'method' => 'post'
))->set_header('Content-Type','application/x-www-form-urlencoded')
->set_header('X-Amzn-Authorization','AWS3-HTTPS AWSAccessKeyId='.\Config::get('ses.access_key').', Algorithm=HmacSHA256, Signature=' . $signature)
->set_header('Date', $date);
$response = $curl->execute($params);
if (intval($response->response()->status / 100) != 2)
{
return false;
}
return true;
}
/**
* Calculate signature
* @param string date used in the header
* @return string RFC 2104-compliant HMAC hash
*/
private function _sign_signature($date)
{
$hash = hash_hmac('sha256', $date, \Config::get('ses.secret_key'), TRUE);
return base64_encode($hash);
}
}
我想我需要更新这些标题,但目前如何击败我:
$curl = \Request::forge('https://email.' . $this->region . '.amazonaws.com/', array(
'driver' => 'curl',
'method' => 'post'
))->set_header('Content-Type','application/x-www-form-urlencoded')
->set_header('X-Amzn-Authorization','AWS3-HTTPS AWSAccessKeyId='.\Config::get('ses.access_key').', Algorithm=HmacSHA256, Signature=' . $signature)
->set_header('Date', $date);
解决方案
推荐阅读
- r - 如何从此列表中提取值(来自 rgbif)并将其转换为 R 中的数据框?
- javascript - ReactJS Moment 没有正确格式化日期
- python - “\z”锚在 Python 正则表达式中不起作用
- android - Xamarin Android INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
- pyspark - 如何遍历 spark 数据框的一列并逐个访问其中的值?
- angular - 角度反应形式 - 将 formArray 传递给子组件时出错
- r - 在 R 中创建 *NEW* 多条件(函数)列
- javascript - 如何仅随机显示一次来自对象的值
- c++ - 如何在功能实现之间交换?
- python - 函数内的 Pandas 数据类型更改