Fix: send test mail (complete)
This commit is contained in:
@@ -10,12 +10,62 @@ class MailSender {
|
|||||||
private $senderName = "";
|
private $senderName = "";
|
||||||
private $senderEmail = "";
|
private $senderEmail = "";
|
||||||
|
|
||||||
|
private $isPost = false;
|
||||||
|
private $postParam = null;
|
||||||
|
|
||||||
|
|
||||||
|
private function showParameters($params) {
|
||||||
|
if($params == null || count($params) == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
echo "=====\n";
|
||||||
|
// echo count($params)."\n";
|
||||||
|
// echo $params."\n";
|
||||||
|
foreach($params as $pKey => $pValue) {
|
||||||
|
echo " ".$pKey." : ".$pValue."\n";
|
||||||
|
}
|
||||||
|
echo "=====\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
private function showRecipients($params) {
|
||||||
|
if($params == null || count($params) == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
echo "=====\n";
|
||||||
|
echo count($params)."\n";
|
||||||
|
echo $params."\n";
|
||||||
|
foreach($params as $pKey => $pValue) {
|
||||||
|
echo " ".$pKey." : ".$pValue."\n";
|
||||||
|
foreach($params[$pKey] as $aKey => $aValue) {
|
||||||
|
echo " ".$aKey." : ".$aValue."\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
echo "=====\n";
|
||||||
|
}
|
||||||
|
|
||||||
public function showSettings() {
|
public function showSettings() {
|
||||||
|
echo "\n";
|
||||||
echo "mailSetting : ".$this->mailSetting->hostNameUrl."\n\r";
|
echo "mailSetting : ".$this->mailSetting->hostNameUrl."\n\r";
|
||||||
echo "senderName : ".$this->senderName."\n\r";
|
echo "senderName : ".$this->senderName."\n\r";
|
||||||
echo "senderEmail : ".$this->senderEmail."\n\r";
|
echo "senderEmail : ".$this->senderEmail."\n\r";
|
||||||
|
|
||||||
|
if($this->postParam == null) {
|
||||||
|
echo "no postParam\n";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "\n*************************\n";
|
||||||
|
foreach($this->postParam as $key => $value) {
|
||||||
|
echo $key." : ".$value."\n";
|
||||||
|
if($key == "parameters") {
|
||||||
|
$this->showParameters($value);
|
||||||
|
} else if($key == "recipients") {
|
||||||
|
$this->showRecipients($value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
echo "*************************\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setMailSetting($setting) {
|
public function setMailSetting($setting) {
|
||||||
$this->mailSetting = $setting;
|
$this->mailSetting = $setting;
|
||||||
}
|
}
|
||||||
@@ -25,92 +75,132 @@ class MailSender {
|
|||||||
$this->senderEmail = $email;
|
$this->senderEmail = $email;
|
||||||
}
|
}
|
||||||
|
|
||||||
function makeSignature($secretKey, $method, $uri, $timestamp, $accessKey) {
|
private function makeSignature($secretKey, $method, $uri, $timestamp, $accessKey) {
|
||||||
$space = " ";
|
$space = " ";
|
||||||
$newLine = "\n";
|
$newLine = "\n";
|
||||||
$hmac = $method.$space.$uri.$newLine.$timestamp.$newLine.$accessKey;
|
$hmac = $method.$space.$uri.$newLine.$timestamp.$newLine.$accessKey;
|
||||||
$signautue = base64_encode(hash_hmac('sha256', $hmac, $secretKey,true));
|
$signautue = base64_encode(hash_hmac('sha256', $hmac, $secretKey,true));
|
||||||
echo "this is signiture : ".$signautue."\n";
|
// echo "this is signiture : ".$signautue."\n";
|
||||||
return $signautue;
|
return $signautue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setParameters($params) {
|
||||||
|
$this->postParam["parameters"] = $params;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addRecipient($mail, $name, $type, $parameters) {
|
||||||
|
$recipient = array(
|
||||||
|
"address" => $mail,
|
||||||
|
"name" => $name,
|
||||||
|
"type" => $type,
|
||||||
|
"parameters" => $parameters
|
||||||
|
);
|
||||||
|
array_push($this->postParam["recipients"], $recipient);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setRecipients($array) {
|
||||||
|
$this->postParam["recipients"] = $array;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function makePostParam($templateSid) {
|
||||||
|
$this->isPost = false;
|
||||||
|
|
||||||
|
if($this->mailSetting->method == "POST") {
|
||||||
|
$this->postParam = array(
|
||||||
|
// 광고메일여부 default: false
|
||||||
|
"advertising" => false,
|
||||||
|
// 첨부파일ID
|
||||||
|
"attachFileIds" => array(),
|
||||||
|
// Email 본문
|
||||||
|
"body" => "",
|
||||||
|
// 개인발송여부 (개인발송 시 참조인, 숨은참조 무시됨) default: true
|
||||||
|
"individual" => false,
|
||||||
|
// 치환 파라미터 (수신자별로 적용), ‘치환 ID’ 를 key로, ‘치환 ID에 맵핑되는 값’ 을 value로 가지는 Map 형태의 Object
|
||||||
|
"parameters" => array(),
|
||||||
|
"recipients" => array(),
|
||||||
|
// 특정 메일을 모아서 보기 위해 네이버 메일에서 지원하는 기능,
|
||||||
|
// 해당 필드에 동일한 값을 입력한 메일들을 모아서 볼 수 있다.
|
||||||
|
// (다음의 형태가 되어야 함 : <unique_id@domain.com> )
|
||||||
|
"referencesHeader" => "",
|
||||||
|
// 예약 발송 일시 ( 1970년 1월 1일 00:00:00 협정 세계시(UTC) 부터의 경과 시간을 1/1000초로 환산한 정수 ),
|
||||||
|
// reservationDateTime 값보다 이 값이 우선 적용된다.
|
||||||
|
"reservationUtc" => "",
|
||||||
|
// 다음과 같은 형태의 예약 발송 일시 (‘yyyy-MM-dd HH:mm’ UTC+09:00), reservationUtc 값이 우선한다.
|
||||||
|
"reservationDateTime" => "",
|
||||||
|
// 발송자 Email 주소
|
||||||
|
"senderAddress" => $this->senderEmail,
|
||||||
|
// 발송자 이름
|
||||||
|
"senderName" => $this->senderName,
|
||||||
|
// 첨부파일 등록 시 사용한 임시 요청 ID
|
||||||
|
"tempRequestId" => "",
|
||||||
|
// 템플릿 ID
|
||||||
|
"templateSid" => $templateSid,
|
||||||
|
// Mail 제목
|
||||||
|
"title" => "",
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->isPost = true;
|
||||||
|
|
||||||
|
$success_code = 201;
|
||||||
|
} else {
|
||||||
|
$success_code = 200;
|
||||||
|
$requestUrl = $this->requestUrl."/requests/".$this->requestId."/status";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getTimestamp() {
|
||||||
|
$timestamp = "";
|
||||||
|
$microtime = "";
|
||||||
|
list($microtime,$timestamp) = explode(' ',microtime());
|
||||||
|
$timestamp = $timestamp.substr($microtime, 2, 3);
|
||||||
|
return $timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function curlInit($url, $timestamp, $signautue) {
|
||||||
|
$ch = curl_init();
|
||||||
|
|
||||||
|
curl_setopt($ch, CURLOPT_URL, $url);
|
||||||
|
curl_setopt($ch, CURLOPT_POST, $this->isPost);
|
||||||
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
|
||||||
|
if($this->mailSetting->method == "POST") {
|
||||||
|
$postParam = json_encode($this->postParam);
|
||||||
|
// echo $postParam."\n";
|
||||||
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $postParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
$headers = array();
|
||||||
|
$headers[] = "X-NCP-APIGW-TIMESTAMP: " .$timestamp;
|
||||||
|
$headers[] = "X-NCP-IAM-ACCESS-KEY: " .$this->mailSetting->accessKey;
|
||||||
|
$headers[] = "X-NCP-APIGW-SIGNATURE-V2: " .$signautue;
|
||||||
|
$headers[] = "content-type: application/json";
|
||||||
|
|
||||||
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
||||||
|
|
||||||
|
return $ch;
|
||||||
|
}
|
||||||
|
|
||||||
public function send() {
|
public function send() {
|
||||||
try {
|
try {
|
||||||
$timestamp = "";
|
$timestamp = $this->getTimestamp();
|
||||||
$microtime = "";
|
|
||||||
list($microtime,$timestamp) = explode(' ',microtime());
|
|
||||||
$timestamp = $timestamp.substr($microtime, 2, 3);
|
|
||||||
|
|
||||||
$is_post = false;
|
$signautue = $this->makeSignature(
|
||||||
if($method == "POST") {
|
$this->mailSetting->secretKey,
|
||||||
$postParam = array(
|
$this->mailSetting->method,
|
||||||
"advertising" => false, // 광고메일여부 default: false
|
$this->mailSetting->requestUrl,
|
||||||
"attachFileIds" => array(), // 첨부파일ID
|
$timestamp,
|
||||||
"body" => "", // Email 본문
|
$this->mailSetting->accessKey
|
||||||
"individual" => false, // 개인발송여부 (개인발송 시 참조인, 숨은참조 무시됨) default: true
|
);
|
||||||
"parameters" => array(
|
|
||||||
"maestro_name" => $maestro_name,
|
|
||||||
"register_date" => $register_date,
|
|
||||||
), // 치환 파라미터 (수신자별로 적용), ‘치환 ID’ 를 key로, ‘치환 ID에 맵핑되는 값’ 을 value로 가지는 Map 형태의 Object
|
|
||||||
"recipients" => array(
|
|
||||||
array(
|
|
||||||
"address" => $maestro_email, // 수신자 Email 주소
|
|
||||||
"name" => "", // 수신자 명
|
|
||||||
"type" => "R", // 수신자 유형 (R: 수신자, C: 참조인, B: 숨은참조) default: R
|
|
||||||
// "parameters" => array_map(),
|
|
||||||
// 치환 파라미터 (수신자별로 적용), ‘치환 ID’ 를 key로, ‘치환 ID에 맵핑되는 값’ 을 value로 가지는 Map 형태의 Object
|
|
||||||
"parameters" => array(
|
|
||||||
"maestro_name" => $maestro_name,
|
|
||||||
), // 치환 파라미터 (수신자별로 적용), ‘치환 ID’ 를 key로, ‘치환 ID에 맵핑되는 값’ 을 value로 가지는 Map 형태의 Object
|
|
||||||
),
|
|
||||||
),
|
|
||||||
"referencesHeader" => "", // 특정 메일을 모아서 보기 위해 네이버 메일에서 지원하는 기능, 해당 필드에 동일한 값을 입력한 메일들을 모아서 볼 수 있다. (다음의 형태가 되어야 함 : <unique_id@domain.com> )
|
|
||||||
"reservationUtc" => "", // 예약 발송 일시 ( 1970년 1월 1일 00:00:00 협정 세계시(UTC) 부터의 경과 시간을 1/1000초로 환산한 정수 ), reservationDateTime 값보다 이 값이 우선 적용된다.
|
|
||||||
"reservationDateTime" => "", // 다음과 같은 형태의 예약 발송 일시 (‘yyyy-MM-dd HH:mm’ UTC+09:00), reservationUtc 값이 우선한다.
|
|
||||||
"senderAddress" => $senderEmail, // 발송자 Email 주소
|
|
||||||
"senderName" => $senderName, // 발송자 이름
|
|
||||||
"tempRequestId" => "", // 첨부파일 등록 시 사용한 임시 요청 ID
|
|
||||||
"templateSid" => "337", // 템플릿 ID
|
|
||||||
"title" => "", // Mail 제목
|
|
||||||
);
|
|
||||||
|
|
||||||
$postParam = json_encode($postParam);
|
$url = $this->mailSetting->hostNameUrl.$this->mailSetting->requestUrl;
|
||||||
echo "json:\n";
|
// echo $url."\n";
|
||||||
echo $postParam;
|
|
||||||
echo "\n";
|
|
||||||
|
|
||||||
$is_post = true;
|
$ch = $this->curlInit($url, $timestamp, $signautue);
|
||||||
|
$response = curl_exec($ch);
|
||||||
$success_code = 201;
|
|
||||||
} else {
|
|
||||||
$success_code = 200;
|
|
||||||
$requestUrl = $requestUrl."/requests/".$requestId."/status";
|
|
||||||
}
|
|
||||||
|
|
||||||
$signautue = makeSignature($secretKey, $method, $requestUrl, $timestamp, $accessKey);
|
|
||||||
|
|
||||||
$url = $hostNameUrl.$requestUrl;
|
|
||||||
echo $url."\n";
|
|
||||||
$ch = curl_init();
|
|
||||||
|
|
||||||
curl_setopt($ch, CURLOPT_URL, $url);
|
|
||||||
curl_setopt($ch, CURLOPT_POST, $is_post);
|
|
||||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
||||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
|
|
||||||
if($method == "POST") {
|
|
||||||
curl_setopt($ch, CURLOPT_POSTFIELDS, $postParam);
|
|
||||||
}
|
|
||||||
$headers = array();
|
|
||||||
$headers[] = "X-NCP-APIGW-TIMESTAMP: " .$timestamp;
|
|
||||||
$headers[] = "X-NCP-IAM-ACCESS-KEY: " .$accessKey;
|
|
||||||
$headers[] = "X-NCP-APIGW-SIGNATURE-V2: " .$signautue;
|
|
||||||
$headers[] = "content-type: application/json";
|
|
||||||
|
|
||||||
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
|
||||||
$response = curl_exec ($ch);
|
|
||||||
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||||
echo "status_code:".$status_code."\n";
|
echo "status_code:".$status_code."\n";
|
||||||
curl_close ($ch);
|
curl_close ($ch);
|
||||||
|
|
||||||
if($status_code == 200) {
|
if($status_code == 200) {
|
||||||
echo $response."\n";
|
echo $response."\n";
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -20,9 +20,6 @@ class MailSetting {
|
|||||||
// 요청 method mail 발송 : POST, 발송 확인 GET
|
// 요청 method mail 발송 : POST, 발송 확인 GET
|
||||||
public $method = "POST";
|
public $method = "POST";
|
||||||
|
|
||||||
// 요청 ID
|
|
||||||
public $requestId = "";
|
|
||||||
|
|
||||||
|
|
||||||
public $space = " ";
|
public $space = " ";
|
||||||
public $newLine = "\n";
|
public $newLine = "\n";
|
||||||
|
|||||||
@@ -4,14 +4,33 @@ require "./mail/mail_sender.php";
|
|||||||
require "./mail/mail_setting.php";
|
require "./mail/mail_setting.php";
|
||||||
require "./mail/chocomae_info.php";
|
require "./mail/chocomae_info.php";
|
||||||
|
|
||||||
$mailSender = new MailSender();
|
|
||||||
|
$maestroName = "삼화초";
|
||||||
|
$registerDate = "2019-04-30"
|
||||||
|
|
||||||
|
$parameters = array(
|
||||||
|
"maestro_name" => $maestroName,
|
||||||
|
"register_date" => $registerDate,
|
||||||
|
);
|
||||||
|
|
||||||
|
$array = array(
|
||||||
|
"maestro_name" => $maestroName
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
$nCloudSetting = new MailSetting();
|
$nCloudSetting = new MailSetting();
|
||||||
$mailSender->setMailSetting($nCloudSetting);
|
|
||||||
|
|
||||||
$chocomae = new ChocomaeInfo();
|
$chocomae = new ChocomaeInfo();
|
||||||
|
|
||||||
|
$mailSender = new MailSender();
|
||||||
|
$mailSender->setMailSetting($nCloudSetting);
|
||||||
$mailSender->setSenderInfo($chocomae->sender_name, $chocomae->sender_email);
|
$mailSender->setSenderInfo($chocomae->sender_name, $chocomae->sender_email);
|
||||||
|
|
||||||
$mailSender->showSettings();
|
$mailSender->makePostParam(337);
|
||||||
|
$mailSender->setParameters($parameters);
|
||||||
|
$mailSender->addRecipient("jisangs@daum.net", "삼화초", "R", $array);
|
||||||
|
$mailSender->addRecipient("support@jinaju.com", "초코마에", "B", $array);
|
||||||
|
|
||||||
|
// $mailSender->showSettings();
|
||||||
|
$mailSender->send();
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|||||||
Reference in New Issue
Block a user