SERVICE
テストメール送信を行う
スリーメールAPI詳細
テストメールの送信をAPI経由で行います。テストメール送信先は複数指定ができます。
すべての情報の登録を行うと組み合わせて使用します。
https://example.com/API/test_mail
※正式なURLはご契約後にお知らせします。
リクエストパラメータ
パラメータ名 | データタイプ | 必須 | 説明 |
---|---|---|---|
login_id | string | ○ | ログイン用ID |
password | string | ○ | ログイン用パスワード |
subject | string | ○ | メールタイトル |
body | string | ○ | メール本文 |
from_address | string | ○ | Fromアドレス |
from_txt | string | Fromテキスト | |
returnpath | string | リターンパス | |
file_to_attach | file | メール添付ファイル | |
addresses | string | ○ | テストメール送信先(複数指定可) |
※テストメール送信先を複数指定する場合、メールアドレスは改行で区切ってください
APIからのXMLについて
APIから送信されるXMLの書式は以下の通りとなります。
<?xml version="1.0" encoding="UTF-8"?>
<response xmlns="urn:3hands:3mail">
<status>OK</status> //ステータス
<code>201</code> //コード
<message>テストメールの送信が終了しました</message> //メッセージ
</response>
サンプルスクリプト
<?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'], //メール返信先(エラー時)
"addresses" => $_REQUEST['addresses'], //テストメール送信先
);
//APIのHostを設定
$api_host = "example.com";
//APIのPathを設定
$api_path = "/API/test_mail";
//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に送信できるよう変換
if($_FILES['file_to_attach']['name']){
$body .= "--" . $boundary . "\r\n";
$body .= "Content-Disposition: form-data; name=\"file_to_attach\"; filename=\"";
$body .= $_FILES['file_to_attach']['name'] . "\"\r\n";
$body .= "Content-Type: " . $_FILES['file_to_attach']['type'] . "\r\n\r\n";
$body .= "" . join("", file($_FILES['file_to_attach']['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'], //メール返信先(エラー時)
"addresses" => $_REQUEST['addresses'], //テストメール送信先
);
//APIのHostを設定
$api_host = "example.com";
//APIのPathを設定
$api_path = "/API/test_mail";
APIへソケットを使って接続を行います。
//APIへ接続
$sp = fsockopen('ssl://' . $api_host, 443, $errno, $errstr, 30);
//エラーチェック
if(!$sp){
echo $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に送信できるよう変換
if($_FILES['file_to_attach']['name']){
$body .= "--" . $boundary . "\r\n";
$body .= "Content-Disposition: form-data; name=\"file_to_attach\"; filename=\"";
$body .= $_FILES['file_to_attach']['name'] . "\"\r\n";
$body .= "Content-Type: " . $_FILES['file_to_attach']['type'] . "\r\n\r\n";
$body .= "" . join("", file($_FILES['file_to_attach']['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へ送信するデータの作成を行います。
//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{
echo "データ受信に失敗しました";
exit;
}
//接続終了
fclose($sp);
受信したデータからXML部分のみを取得後パースを行います。
//結果XMLを取得
$result = substr($buf, strpos($buf, "\r\n\r\n")+4);
//XMLをパースする
$result_xml = simplexml_load_string($result);
受信したデータから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>"; ///メッセージ
サンプルスクリプトの実行結果は以下の通りとなります。
status:OK
code:201
message:テストメールの送信が終了しました
スクリプト実行後の処理について
実際にはXMLを取得後、ステータス及びコードに合わせて処理を行ってください。(正常終了、エラー表示等)