API概要

配信リストのみ登録を行う

配信リストのみをAPI経由で登録します。

登録した配信リストに問題が無い場合3mailの画面に遷移し、その他の項目(メール本文等)の登録を行います。

リクエストURL
https://example.com/API/file_upload
※正式なURLは御契約後にご連絡致します。

リクエストパラメータ
パラメータ データタイプ必須 説明
login_id string ログイン用ID
password string ログイン用パスワード
file file 配信リスト(gzipかzipで圧縮した物)
from_address string From(配信元)アドレス
return_limit int   許可するリターン回数の上限(1から10まで:省略時=3)

APIからのXMLについて

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

<?xml version="1.0" encoding="UTF-8"?>
<response xmlns="urn:3hands:3mail">
  <status>OK</status>                    //ステータス
  <code>205</code>                       //コード

  <message>success</message>             //メッセージ
  <session>0dlj9483h8ay9fawf3h</session> //session値
</response>

サンプルスクリプト

<?php

//APIへ送信するデータ
//$_REQUESTの部分については、可能であれば$_POSTか$_GETを指定してください
//今回はサンプルの為、汎用性を考えて$_REQUESTとします
$post_data = array(
    "login_id" => "login@example.com", //ログインID
    "password" => "password",          //ログインパスワード
    "from_address" => "info@example.com", //Fromアドレス
    "return_limit" => 3 //リターン回数の上限
);
   
//APIのHostを設定
$api_host = "example.com";
   
//APIのPathを設定
$api_path = "/API/file_upload";

//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($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へ送信できるように変換
$body .= "--" . $boundary . "\r\n";
$body .= "Content-Disposition: form-data; name=\"file\"; filename=\"";
$body .= $_FILES['file']['name'] . "\"\r\n";
$body .= "Content-Type: " . $_FILES['file']['type'] . "\r\n\r\n";
$body .= "" . join("", file($_FILES['file']['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>"; //メッセージ
print "session:" . $result_xml->session . "<br>"; //session名

exit;

?>

サンプルスクリプト解説

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

//APIへ送信するデータ
//$_REQUESTの部分については、可能であれば$_POSTか$_GETを指定してください
//今回はサンプルの為、汎用性を考えて$_REQUESTとします
$post_data = array(
    "login_id" => "login@example.com", //ログインID
    "password" => "password",          //ログインパスワード
    "from_address" => "info@example.com", //Fromアドレス
    "return_limit" => 3 //リターン回数の上限
);
   
//APIのHostを設定
$api_host = "example.com";
   
//APIのPathを設定
$api_path = "/API/file_upload";

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($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へ送信できるように変換
$body .= "--" . $boundary . "\r\n";
$body .= "Content-Disposition: form-data; name=\"file\"; filename=\"";
$body .= $_FILES['file']['name'] . "\"\r\n";
$body .= "Content-Type: " . $_FILES['file']['type'] . "\r\n\r\n";
$body .= "" . join("", file($_FILES['file']['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 "session:" . $result_xml->session . "<br>"; //session名

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

status:OK
code:205
message:success
session:0dlj9483h8ay9fawf3h

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

ステータスがOKだった場合、スリーメールの管理画面へ遷移する事ができるようになります。

//スリーメール管理画面へ遷移する
header("Location: http://example.com/API/file_forward?session=" . $result_xml->session);

以降(メールの本文登録等)の作業はスリーメールの管理画面を利用します。

配信ファイルが圧縮ファイル以外の場合について

配信リストがgzipファイル形式で無い(データベースから抽出した等)場合、以下の方法で圧縮されたファイルを作成する事ができます。
APIへ送信するデータを作成する部分に追加してください。

//$db_resultはデータベースからの検索結果
//データ形式は配列(array('test1@test.com','test2@test.com')と同じ)とする

//仮ファイル名を作成
$file_name = md5(uniq_id()) . '.csv.gz';

//圧縮ファイルを作成。作成先は /tmp/ とする
$zp = gzopen('/tmp/' . $file_name, "w9");
gzwrite($zp, implode("\n", $db_result);
gzclose($zp);

//作成したファイルを$_FILES変数に登録
$_FILES['file']['name'] = $file_name;
$_FILES['file']['type'] = 'gzip';
$_FILES['file']['tmp_name'] = '/tmp/' . $file_name;

前のページへ戻る