API概要

すべての情報の登録を行う

メール配信に必要なすべての情報をAPI経由で登録します。

リクエストURL
https://example.com/API/set
※正式なURLはご契約後にお知らせします。

リクエストパラメータ

パラメータ名 データタイプ 必須 説明
login_id string ログイン用ID
password string ログイン用パスワード
file file 配信リスト(gzipで圧縮した物)
subject string メールタイトル
body string メール本文
from_address string Fromアドレス
from_txt string   Fromテキスト
returnpath string   返信先メールアドレス(エラー時)
return_limit int   許可するリターン回数の上限(1から10まで:省略時=3)
auto_return int   自動リターン集計について (利用する = 1)
replyto string   返信先メールアドレス
file_to_attach file   メール添付ファイル
※1つまで添付可能です
start_sending string メール配信開始日時について (すぐに配信 = now 日時指定 = at)
year int   メール配信開始時間(年)
month int   メール配信開始時間(月)
day int   メール配信開始時間(日)
hour int   メール配信開始時間(時)
min int   メール配信開始時間(分)
click_count int   クリックカウント集計について(利用する = 1)
notify_disposition int   開封率集計について(利用する = 1)
disposition_method string   開封率の集計方法(開封通知ヘッダーを利用する = header、HTMLメールを利用する = html)
ignore_encoding int   配信リストの文字コードチェックをしない(チェックをしない = 1)
use_utf8 int   配信時の文字コードにUTF-8を使う(使う = 1)
詳細はUTF-8での配信を参照。
block_replace int   ブロック差し込み機能を使う(使う = 1)
詳細はブロック差し込み機能を参照。
dkim int   DKIM署名を使う(使う = 1)
詳細はブロック差し込み機能を参照。
dkim_privkey file   DKIM秘密鍵ファイル。鍵長は2048bit、ハッシュアルゴリズムは SHA-256 を使用してください。また、文字列ではなくファイルとしてアップロードしてください。
dkim_selector string   DKIMのセレクタ

※year,month,day,hour,minはメール配信日時を指定する場合必須となります。

入力されていない場合は、すぐに配信を選択したとみなされます。

APIからのXMLについて

APIから送信されるXMLの書式は以下の通りとなります。

<?xml version="1.0" encoding="UTF-8"?>
<response xmlns="urn:3hands:3mail">
  <status>OK</status>                      //ステータス
  <code>200</code>                         //コード
  <message>本登録に成功しました</message>    //メッセージ
  <valid>123</valid>                      //有効件数
  <error>45</error>                       //無効件数
  <task_id>67</task_id>                   //配信タスクID
</response>

返り値の詳細

名前 データタイプ 最大バイト数 説明
status string 2 ステータス(OK=成功、NG=失敗)
code string 3 コード(一覧)
message string 255 メッセージ
valid int 11 有効件数
error int 11 無効件数
task_id int 11 配信タスクID

サンプルスクリプト

<?php
 
//APIへ送信するデータ
//$_REQUESTの部分については、可能であれば$_POSTか$_GETを指定してください
//今回はサンプルの為、汎用性を考えて$_REQUESTとします
$post_data = array(
    "login_id" => "login@example.com",             //ログインID
    "password" => "password",                      //ログインパスワード
    "subject" => $_REQUEST['subject'],             //メールタイトル
    "body" => $_REQUEST['body'],                   //メール本文
    "from_address" => $_REQUEST['from_address'],   //Fromアドレス
    "from_txt" => $_REQUEST['from_txt'],           //Fromテキスト
    "returnpath" => $_REQUEST['returnpath'],      //メール返信先(エラー時)
    "auto_return" => $_REQUEST['auto_return'],     //自動リターン集計
    "replyto" => $_REQUEST['replyto'],             //メール返信先
    "start_sending" => $_REQUEST['start_sending'], //メール配信開始日時について
    "year" => $_REQUEST['year'],                   //メール配信日(年)
    "month" => $_REQUEST['month'],                     //メール配信日(月)
    "day" => $_REQUEST['day'],                     //メール配信日(日)
    "hour" => $_REQUEST['hour'],                   //メール配信日(時)
    "min" => $_REQUEST['min']                      //メール配信日(分)
);
   
//送信するファイル名のリスト
$post_data_files = array('file', 'file_to_attach');
   
//APIのHostを設定
$api_host = "example.com";
   
//APIのPathを設定
$api_path = "/API/set";

//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){
    if((is_numeric($val) || is_string($val)) && $val !== ""){
        $body .= "--" . $boundary . "\r\n";
        $body .= "Content-Disposition: form-data; name=\"" . $key . "\"\r\n";
        $body .= "\r\n" . $val . "\r\n";
        $body .= "--" . $boundary . "\r\n";
    }
}

//ファイルデータをAPIに送信できるよう変換
foreach ($post_data_files as $val){
    if($_FILES[$val]['name']){
        $body .= "--" . $boundary . "\r\n";
        $body .= "Content-Disposition: form-data; name=\"" . $val . "\"; filename=\"";
        $body .= $_FILES[$val]['name'] . "\"\r\n";
        $body .= "Content-Type: " . $_FILES[$val]['type'] . "\r\n\r\n";
        $body .= "" . join("", file($_FILES[$val]['tmp_name'])) . "\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);

//結果を取得し表示
print "status:" . $result_xml->status . "<br>";   //ステータス
print "code:" . $result_xml->code . "<br>";       //コード
print "message:" . $result_xml->message . "<br>"; //メッセージ

exit;

?>

サンプルスクリプト解説

APIへ送信するデータ及び、APIのURLについて設定を行います。

//APIへ送信するデータ
//$_REQUESTの部分については、可能であれば$_POSTか$_GETを指定してください
//今回はサンプルの為、汎用性を考えて$_REQUESTとします
$post_data = array(
    "login_id" => "login@example.com",             //ログインID
    "password" => "password",                      //ログインパスワード
    "subject" => $_REQUEST['subject'],             //メールタイトル
    "body" => $_REQUEST['body'],                   //メール本文
    "from_address" => $_REQUEST['from_address'],   //Fromアドレス
    "from_txt" => $_REQUEST['from_txt'],           //Fromテキスト
    "returnpath" => $_REQUEST['returnpath'],       //メール返信先(エラー時)
    "auto_return" => $_REQUEST['auto_return'],     //自動リターン集計
    "replyto" => $_REQUEST['replyto'],             //メール返信先
    "start_sending" => $_REQUEST['start_sending'], //メール配信開始日時について
    "year" => $_REQUEST['year'],                   //メール配信日(年)
    "month" => $_REQUEST['month'],                     //メール配信日(月)
    "day" => $_REQUEST['day'],                     //メール配信日(日)
    "hour" => $_REQUEST['hour'],                   //メール配信日(時)
    "min" => $_REQUEST['min']                      //メール配信日(分)
);
   
//送信するファイル名のリスト
$post_data_files = array('file', 'file_to_attach');
   
//APIのHostを設定
$api_host = "example.com";
   
//APIのPathを設定
$api_path = "/API/set";

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){
    if((is_numeric($val) || is_string($val)) && $val !== ""){
        $body .= "--" . $boundary . "\r\n";
        $body .= "Content-Disposition: form-data; name=\"" . $key . "\"\r\n";
        $body .= "\r\n" . $val . "\r\n";
        $body .= "--" . $boundary . "\r\n";
    }
}

//ファイルデータをAPIに送信できるよう変換
foreach ($post_data_files as $val){
    if($_FILES[$val]['name']){
        $body .= "--" . $boundary . "\r\n";
        $body .= "Content-Disposition: form-data; name=\"" . $val . "\"; filename=\"";
        $body .= $_FILES[$val]['name'] . "\"\r\n";
        $body .= "Content-Type: " . $_FILES[$val]['type'] . "\r\n\r\n";
        $body .= "" . join("", file($_FILES[$val]['tmp_name'])) . "\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);

結果の基本項目は以下の方法で取得できます。

今回はサンプルなので取得結果をそのまま表示します。

//結果を取得し表示
print "status:"  . $result_xml->status  . "<br>"; //ステータス
print "code:"    . $result_xml->code    . "<br>"; //コード
print "message:" . $result_xml->message . "<br>"; //メッセージ
print "valid:"   . $result_xml->valid   . "<br>"; //有効件数
print "error:"   . $result_xml->error   . "<br>"; //無効件数
print "task_id:" . $result_xml->task_id . "<br>"; //配信タスクID

サンプルスクリプトの実行結果は以下の通りとなります。

status:OK
code:200
message:本登録に成功しました
valid:123
error:45
task_id:67

スクリプト実行後の処理について

実際にはXMLを取得後、ステータス及びコードに合わせて処理を行ってください。(正常終了、エラー表示等)

UTF-8での配信

スリーメールでは、通常、ユーザーに届くメールの文字コードはJISまたはSJISとなっています。これは日本国内のユーザーのみにメールを送信するためには適切な文字コードですが、国外を含む世界中に送信するメールについては文字コードをUTF-8とするのが一般的です。「use_utf8」を「1」とすることにより、配信時の文字コードとしてUTF-8が使われるようになります。

「use_utf8」を「1」とする場合、配信リスト(file)や件名(subject)、本文(body)、HTMLメール(file_to_attach)など、すべての項目をUTF-8でエンコードしてください。

「use_utf8」で「1」を指定した場合、「高度な設定」の「UTF-8を使う」画面で「UTF-8を使わない」と設定していた場合でも、UTF-8が使われます。

ブロック差し込み機能

メールの本文のうち、特定の文面(範囲)は特定のユーザーにのみ表示されるようにしたい、という場合に、ブロック差し込み機能がお使いいただけます。

たとえば、次のようなメールを送りたいものとします。

今日の星占い

おひつじ座のあなた:
○○○○○でしょう。

おうし座のあなた:
○○○○○でしょう。

ふたご座のあなた:
○○○○○でしょう。

このうち、それぞれのユーザーには必要な部分だけが本文に含まれるようにしたいとします。
たとえば、おうし座のユーザーに届くメールは次のようにしたいとします。

今日の星占い

おうし座のあなた:
○○○○○でしょう。

この場合、本文を次のようにしてください。

今日の星占い

[% IF "$val1" -%]
おひつじ座のあなた:
○○○○○でしょう。
[% END -%]

[% IF "$val2" -%]
おうし座のあなた:
○○○○○でしょう。
[% END -%]

[% IF "$val3" -%]
ふたご座のあなた:
○○○○○でしょう。
[% END -%]

ただし、$val1にあたるカラムは、おひつじ座のユーザーだけが「1」となっていて、$val2はおうし座のユーザーのみ「1」、$val3以降も同様となっているものとします。この機能を使う際は、/API/set のリクエストパラメーターとして「block_replace」に「1」を設定する必要がありますので、ご注意ください。

配信キャリアにつきまして

/API/setで配信設定を行った場合、配信履歴に含まれる「配信キャリア」の項目は空となります。

前のページへ戻る

online-order
3HANDS Information お問い合わせはこちら