SERVICE
タスク詳細の取得を行う
スリーメールAPI詳細
タスク詳細の取得を行います。取得項目は、
- メールタイトル
- メール本文
- Fromアドレス
- Fromテキスト
- Return-Path
- Reply-To
- 配信開始日時
となります。
リクエストURL
https://example.com/API/get_task
※正式なURLは御契約後にご連絡致します。
リクエストパラメータ
パラメータ名 | データタイプ | 必須 | 説明 |
---|---|---|---|
login_id | string | ○ | ログイン用ID |
password | string | ○ | ログイン用パスワード |
id | int | ○ | タスクID |
APIからのXMLについて
APIからのXMLの書式は以下の通りとなります。
<?xml version="1.0" encoding="UTF-8"?>
<response xmlns="urn:3hands:3mail">
<status>OK</status> //ステータス
<code>204</code> //コード
<message>success</message> //メッセージ
<subject>メールタイトル</subject> //メールタイトル
<from_address>test_addr@example.com</from_address> //Fromアドレス
<from_txt>テストアドレス</from_txt> //Fromテキスト
<body>メール本文</body> //メール本文
<return_path>return_addr@example.com</return_path> //リターンパス
<reply_to>return_addr@example.com</reply_to> //Reply-To
<start_at>2007-11-22 11:11</start_at> //配信日時
<task_status>WAIT</task_status> //タスクの状態(WAIT:配信待ち、READY:配信中、DONE:配信終了)
<num>100</num> //配信数
<num_sent>92</num_sent> //暫定有効配信数
<num_bounced>8</num_bounced> //暫定無効配信数
</response>
num(配信数)は、配信したアドレスの件数です。
num_bounced(暫定無効配信数)は、何らかの理由で宛先に届かなかった件数です。リターンメール自動集計機能をつかっていた場合に集計されます。メールが届かなかった場合、一般的に数日以内にリターンメールが戻り、無効件数としてカウントされます。そのためこの数字は配信後徐々に増加します。
num_sent(暫定有効配信数)は、配信数から暫定無効配信数を除いたものです。
サンプルスクリプト
<?php
//APIへ送信するデータ
//$_REQUESTの部分については、可能であれば$_POSTか$_GETを指定してください
//今回はサンプルの為、汎用性を考えて$_REQUESTとします
$post_data = array(
"login_id" => "login@example.com", //ログインID
"password" => "password", //ログインパスワード
"id" => $_REQUEST['id'] //タスクID
);
//APIのhostを設定
$api_host = "example.com";
//APIのpathを設定
$api_path = "/API/get_task";
//APIへ接続
$sp = fsockopen('ssl://' . $api_host, 443, $errno, $errstr, 30);
//エラーチェック
if(!$sp){
print $errno . "<br>" . $errstr;
exit;
}
//boundary生成
$boundary = "-----" . md5(uniqid());
//header生成
$header = "POST " . $api_path . " HTTP/1.0\r\n";
$header .= "Host: " . $api_host . "\r\n";
$header .= "Content-type: multipart/form-data, boundary=" . $boundary . "\r\n";
$header .= "Referer: http://" . $_SERVER['SERVER_NAME'] . $_SERVER['SCRIPT_NAME'] . "\r\n";
$header .= "Accept: */*\r\n";
//body生成
$body = "";
//データをAPIへ送信できるように変換
foreach ($post_data as $key => $val){
$body .= "--" . $boundary . "\r\n";
$body .= "Content-Disposition: form-data; name=\"" . $key . "\"\r\n";
$body .= "\r\n" . $val . "\r\n";
$body .= "--" . $boundary . "\r\n";
}
//送信データ末尾の区切り文字を追加
$body .= "--" . $boundary . "--\r\n";
$body .= "\r\n\r\n";
//ヘッダーにデータ部のサイズを追加
$header .= "Content-length: " . strlen($body) . "\r\n\r\n";
//データ送信
fputs($sp, $header);
fputs($sp, $body);
//データ受信
$buf = "";
$response = fgets($sp);
if (substr_count($response, "200 OK") > 0){
while (!feof($sp)){
$buf = $buf . fread($sp, 4096);
}
}else{
print "データ受信に失敗しました";
exit;
}
//接続終了
fclose($sp);
//結果XMLを取得
$result = substr($buf, strpos($buf, "\r\n\r\n")+4);
//XMLをパースする
$result_xml = simplexml_load_string($result);
//XMLのデータを取得
print "status:" . $result_xml->status; //ステータス
print "code:" . $result_xml->code; //コード
print "message:" . $result_xml->message; //メッセージ
print "subject:" . $result_xml->subject; //メールタイトル
print "from_address:" . $result_xml->from_address; //Fromアドレス
print "from_text" . $result_xml->from_text; //Fromテキスト
print "from_body" . $result_xml->body; //メール本文
print "return_path" . $result_xml->return_path; //リターンパス
print "reply_to" . $result_xml->reply_to; //Reply-To
print "start_at" . $result_xml->start_at; //配信日時
print "task_status" . $result_xml->task_status; //タスク状態
print "num:" . $task->num; //配信数
print "num_sent:" . $task->num_sent; //暫定有効配信数
print "num_bounced:" . $task->num_bounced; //暫定無効配信数
exit;
?>
サンプルスクリプト解説
APIへ送信するデータ及び、APIのURLについて設定を行います。
//APIへ送信するデータ
//$_REQUESTの部分については、可能であれば$_POSTか$_GETを指定してください
//今回はサンプルの為、汎用性を考えて$_REQUESTとします
$post_data = array(
"login_id" => "login@example.com", //ログインID
"password" => "password", //ログインパスワード
"id" => $_REQUEST['id'] //タスクID
);
//APIのhostを設定
$api_host = "example.com";
//APIのpathを設定
$api_path = "/API/get_task";
APIへソケットを使って接続を行います。
//APIへ接続
$sp = fsockopen('ssl://' . $api_host, 443, $errno, $errstr, 30);
//エラーチェック
if(!$sp){
print $errno . "<br>" . $errstr;
exit;
}
APIへ送信するデータの作成を行います。
//boundary生成
$boundary = "-----" . md5(uniqid());
//header生成
$header = "POST " . $api_path . " HTTP/1.0\r\n";
$header .= "Host: " . $api_host . "\r\n";
$header .= "Content-type: multipart/form-data, boundary=" . $boundary . "\r\n";
$header .= "Referer: http://" . $_SERVER['SERVER_NAME'] . $_SERVER['SCRIPT_NAME'] . "\r\n";
$header .= "Accept: */*\r\n";
//body生成
$body = "";
//データをAPIへ送信できるように変換
foreach ($post_data as $key => $val){
$body .= "--" . $boundary . "\r\n";
$body .= "Content-Disposition: form-data; name=\"" . $key . "\"\r\n";
$body .= "\r\n" . $val . "\r\n";
$body .= "--" . $boundary . "\r\n";
}
//送信データ末尾の区切り文字を追加
$body .= "--" . $boundary . "--\r\n";
$body .= "\r\n\r\n";
//ヘッダーにデータ部のサイズを追加
$header .= "Content-length: " . strlen($body) . "\r\n\r\n";
APIへデータの送信を行います。
//データ送信
fputs($sp, $header);
fputs($sp, $body);
データの受信を行います。
ヘッダーが “200 OK” 以外の場合はエラーとなります。
//データ受信
$buf = "";
$response = fgets($sp);
if (substr_count($response, "200 OK") > 0){
while (!feof($sp)){
$buf = $buf . fread($sp, 4096);
}
}else{
print "データ受信に失敗しました";
exit;
}
//接続終了
fclose($sp);
受信したデータからXML部分のみを取得後パースを行います。
//結果XMLを取得
$result = substr($buf, strpos($buf, "\r\n\r\n")+4);
//XMLをパースする
$result_xml = simplexml_load_string($result);
結果の基本項目は以下の方法で取得できます。
今回はサンプルなので取得結果をそのまま表示します。
//XMLのデータを取得
print "status:" . $result_xml->status; //ステータス
print "code:" . $result_xml->code; //コード
print "message:" . $result_xml->message; //メッセージ
print "subject:" . $result_xml->subject; //メールタイトル
print "from_address:" . $result_xml->from_address; //Fromアドレス
print "from_text" . $result_xml->from_text; //Fromテキスト
print "from_body" . $result_xml->body; //メール本文
print "return_path" . $result_xml->return_path; //リターンパス
print "reply_to" . $result_xml->reply_to; //Reply-To
print "start_at" . $result_xml->start_at; //配信日時
print "task_status" . $result_xml->task_status; //タスク状態
print "num:" . $task->num; //配信数
print "num_sent:" . $task->num_sent; //暫定有効配信数
print "num_bounced:" . $task->num_bounced; //暫定無効配信数
スクリプト実行後の処理について
XMLを取得後、ステータス及びコードに合わせて処理を行ってください。(正常終了、エラー表示等)