$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; } } }