mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-02-01 09:39:58 +09:00
Merge branch 'rhymix:develop' into develop
This commit is contained in:
commit
c572d34465
10 changed files with 452 additions and 12 deletions
|
|
@ -13,7 +13,7 @@ class MailFunction extends Base implements \Rhymix\Framework\Drivers\MailInterfa
|
|||
protected function __construct()
|
||||
{
|
||||
include_once \RX_BASEDIR . 'common/libraries/swift_mail.php';
|
||||
$this->mailer = new \Swift_Mailer(new \Swift_MailTransport);
|
||||
$this->_mailer = new \Swift_Mailer(new \Swift_MailTransport);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -23,7 +23,7 @@ class MailFunction extends Base implements \Rhymix\Framework\Drivers\MailInterfa
|
|||
*/
|
||||
public static function getName()
|
||||
{
|
||||
return 'mail() Function';
|
||||
return 'PHP mail() Function';
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -60,7 +60,8 @@ class MailFunction extends Base implements \Rhymix\Framework\Drivers\MailInterfa
|
|||
{
|
||||
try
|
||||
{
|
||||
$result = $this->mailer->send($message->message, $errors);
|
||||
$errors = [];
|
||||
$result = $this->_mailer->send($message->message, $errors);
|
||||
}
|
||||
catch(\Exception $e)
|
||||
{
|
||||
|
|
|
|||
184
common/framework/drivers/mail/ncloud_mailer.php
Normal file
184
common/framework/drivers/mail/ncloud_mailer.php
Normal file
|
|
@ -0,0 +1,184 @@
|
|||
<?php
|
||||
|
||||
namespace Rhymix\Framework\Drivers\Mail;
|
||||
|
||||
/**
|
||||
* The NAVER Cloud Outbound Mailer mail driver.
|
||||
*/
|
||||
class Ncloud_Mailer extends Base implements \Rhymix\Framework\Drivers\MailInterface
|
||||
{
|
||||
/**
|
||||
* The API URL.
|
||||
*/
|
||||
protected static $_url = 'https://mail.apigw.ntruss.com/api/v1/mails';
|
||||
protected static $_timeout = 10;
|
||||
|
||||
/**
|
||||
* Get the human-readable name of this mail driver.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function getName()
|
||||
{
|
||||
return 'NAVER Cloud Outbound Mailer';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of configuration fields required by this mail driver.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function getRequiredConfig()
|
||||
{
|
||||
return array('api_key', 'api_secret');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the SPF hint.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function getSPFHint()
|
||||
{
|
||||
return 'include:email.ncloud.com';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the DKIM hint.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function getDKIMHint()
|
||||
{
|
||||
return 'mailer._domainkey';
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the current mail driver is supported on this server.
|
||||
*
|
||||
* This method returns true on success and false on failure.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public static function isSupported()
|
||||
{
|
||||
return function_exists('hash_hmac');
|
||||
}
|
||||
|
||||
/**
|
||||
* Create signature for NAVER Cloud gateway server
|
||||
*
|
||||
* @param string $timestamp
|
||||
* @param string $access_key
|
||||
* @param string $secret_key
|
||||
* @return string
|
||||
*/
|
||||
protected static function _makeSignature($timestamp, $access_key, $secret_key): string
|
||||
{
|
||||
$method = 'POST';
|
||||
$uri = '/api/v1/mails';
|
||||
$content = "$method $uri\n$timestamp\n$access_key";
|
||||
return base64_encode(hash_hmac('sha256', $content, $secret_key, true));
|
||||
}
|
||||
|
||||
/**
|
||||
* Send a message.
|
||||
*
|
||||
* This method returns true on success and false on failure.
|
||||
*
|
||||
* @param object $message
|
||||
* @return bool
|
||||
*/
|
||||
public function send(\Rhymix\Framework\Mail $message)
|
||||
{
|
||||
// Prepare data for Requests.
|
||||
$data = array(
|
||||
'title' => $message->getSubject(),
|
||||
'body' => $message->getBody(),
|
||||
'senderAddress' => '',
|
||||
'senderName' => '',
|
||||
'recipients' => array(),
|
||||
);
|
||||
|
||||
// Fill the sender info.
|
||||
$from = $message->message->getFrom();
|
||||
foreach($from as $email => $name)
|
||||
{
|
||||
$data['senderAddress'] = $email;
|
||||
$data['senderName'] = trim($name) ?: substr($email, 0, strpos($email, '@'));
|
||||
break;
|
||||
}
|
||||
|
||||
// Fill the recipient info.
|
||||
if ($to = $message->message->getTo())
|
||||
{
|
||||
foreach($to as $email => $name)
|
||||
{
|
||||
$receiver = array();
|
||||
$receiver['address'] = $email;
|
||||
$receiver['name'] = str_replace(',', '', trim($name) ?: substr($email, 0, strpos($email, '@')));
|
||||
$receiver['type'] = "R";
|
||||
|
||||
$data['recipients'][] = $receiver;
|
||||
}
|
||||
}
|
||||
if ($cc = $message->message->getCc())
|
||||
{
|
||||
foreach($cc as $email => $name)
|
||||
{
|
||||
$receiver = array();
|
||||
$receiver['address'] = $email;
|
||||
$receiver['name'] = str_replace(',', '', trim($name) ?: substr($email, 0, strpos($email, '@')));
|
||||
$receiver['type'] = "C";
|
||||
|
||||
$data['recipients'][] = $receiver;
|
||||
}
|
||||
}
|
||||
if ($bcc = $message->message->getBcc())
|
||||
{
|
||||
foreach($bcc as $email => $name)
|
||||
{
|
||||
$receiver = array();
|
||||
$receiver['address'] = $email;
|
||||
$receiver['name'] = str_replace(',', '', trim($name) ?: substr($email, 0, strpos($email, '@')));
|
||||
$receiver['type'] = "B";
|
||||
|
||||
$data['recipients'][] = $receiver;
|
||||
}
|
||||
}
|
||||
|
||||
// Generate the NAVER cloud gateway signature.
|
||||
$timestamp = floor(microtime(true) * 1000);
|
||||
$signature = self::_makeSignature($timestamp, $this->_config['api_key'], $this->_config['api_secret']);
|
||||
$headers = array(
|
||||
'x-ncp-apigw-timestamp' => $timestamp,
|
||||
'x-ncp-iam-access-key' => $this->_config['api_key'],
|
||||
'x-ncp-apigw-signature-v2' => $signature,
|
||||
);
|
||||
|
||||
// Send the API request.
|
||||
try
|
||||
{
|
||||
$request = \Rhymix\Framework\HTTP::post(self::$_url, [], $headers, [], [
|
||||
'timeout' => self::$_timeout,
|
||||
'json' => $data,
|
||||
]);
|
||||
$result = @json_decode($request->getBody()->getContents());
|
||||
}
|
||||
catch (\Exception $e)
|
||||
{
|
||||
$message->errors[] = 'NAVER Cloud Outbound Mailer: ' . $e->getMessage();
|
||||
return false;
|
||||
}
|
||||
|
||||
if (isset($result->error))
|
||||
{
|
||||
$message->errors[] = 'NAVER Cloud Outbound Mailer: ' . $result->error->message . PHP_EOL . $result->error->details;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -179,7 +179,7 @@ class Woorimail extends Base implements \Rhymix\Framework\Drivers\MailInterface
|
|||
$request = \Rhymix\Framework\HTTP::post(self::$_url, $data, $headers, [], ['timeout' => self::$_timeout]);
|
||||
$result = @json_decode($request->getBody()->getContents());
|
||||
}
|
||||
catch (\Requests_Exception $e)
|
||||
catch (\Exception $e)
|
||||
{
|
||||
$message->errors[] = 'Woorimail: ' . $e->getMessage();
|
||||
return false;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue