API概要

C#版サンプル

/API/setを使用してメール配信の設定を行うサンプルです。

接続先ホスト名(example.com)および、接続時のIDとパスワード(login_id, login_password)につきましては適宜ご変更ください。

using System;
using System.Collections;
using System.IO;
using System.Net;
using System.Text;
using System.Xml;

/*
 * 3mail API接続サンプルプログラム
 * 
 * Author 3hands Dev Team
 * Copyright 3hands Inc.
 */

namespace _3mail_sample
{
    /// 
    /// メインクラス
    /// 
    class Program
    {
        static void Main(string[] args)
        {
            new SendData().send();

            Console.ReadLine();
        }
    }

    /// 
    /// 送信用データ生成
    /// 
    class SendData
    {
        Hashtable userData = new Hashtable();

        /// 
        /// データ送信
        /// 
        public void send()
        {
            //メールアドレスリストファイル指定
            string filePath = "D:\\mail.zip";

            //ファイル名取得
            string fileName = Path.GetFileName(filePath);

            //APIのURL指定
            string url = "http://example.com/API/set";

            //送信用文字コード設定
            Encoding enc = Encoding.GetEncoding("shift_jis");

            //boundary生成
            string boundary = Environment.TickCount.ToString();

            //コネクション生成
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);

            //メソッド設定
            req.Method = "POST";

            //Content-Type設定
            req.ContentType = "multipart/form-data; boundary=" + boundary;

            //送信データのリストを作成
            userData.Add("login_id", "login_id");
            userData.Add("password", "login_password");
            userData.Add("subject", "メールタイトル");
            userData.Add("body", "メール本文");
            userData.Add("from_address", "from@example.com");
            userData.Add("start_sending", "now");

            //POST送信するデータを作成
            string postData = "";

            foreach (DictionaryEntry de in userData)
            {
                postData +=
                    "--" + boundary + "\r\n" +
                    "Content-Disposition: form-data; name=\"" + de.Key + "\"\r\n\r\n" +
                    de.Value + "\r\n" +
                    "--" + boundary + "\r\n";
            }

            //ファイル送信部を生成
            postData +=
                "Content-Disposition: form-data; name=\"file\"; filename=\"" +
                fileName + "\"\r\n" +
                "Content-Type: application/zip\r\n" +
                "Content-Transfer-Encoding: binary\r\n\r\n";

            //バイト型配列に変換
            byte[] startData = enc.GetBytes(postData);
            postData = "\r\n--" + boundary + "--\r\n";
            byte[] endData = enc.GetBytes(postData);

            //送信するファイルを開く
            FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);

            //POST送信するデータの長さを指定
            req.ContentLength = startData.Length + endData.Length + fs.Length;

            //データをPOST送信するためのStreamを取得
            Stream reqStream = req.GetRequestStream();

            //送信するデータを書き込む
            reqStream.Write(startData, 0, startData.Length);

            //ファイルの内容を送信
            byte[] readData = new byte[0x1000];

            int readSize = 0;

            while (true)
            {
                readSize = fs.Read(readData, 0, readData.Length);

                if (readSize == 0)
                    break;

                reqStream.Write(readData, 0, readSize);
            }

            fs.Close();

            reqStream.Write(endData, 0, endData.Length);
            reqStream.Close();

            //サーバーからの応答を受信するためのWebResponseを取得
            HttpWebResponse res = (HttpWebResponse)req.GetResponse();

            //応答データを受信するためのStreamを取得
            Stream resStream = res.GetResponseStream();

            //受信したデータをStreamReaderへ
            StreamReader sr = new StreamReader(resStream);

            //受信したデータ(XML形式)をパース
            XmlReaderSettings settings = new XmlReaderSettings();
            settings.IgnoreWhitespace = true;
            settings.IgnoreComments = true;

            //結果を表示
            using (XmlReader rs = XmlReader.Create(sr, settings))
            {
                for (; rs.Read(); )
                {
                    rs.ReadStartElement("response");
                    rs.GetAttribute("status");
                    Console.WriteLine("status->" + rs.ReadString());

                    rs.ReadToFollowing("code");
                    Console.WriteLine("code->" + rs.ReadString());

                    rs.ReadToFollowing("message");
                    Console.WriteLine("message->" + rs.ReadString());

                    rs.ReadToFollowing("valid");
                    Console.WriteLine("valid->" + rs.ReadString());

                    rs.ReadToFollowing("error");
                    Console.WriteLine("error->" + rs.ReadString());

                    rs.ReadToFollowing("task_id");
                    Console.WriteLine("task_id->" + rs.ReadString());

                    rs.ReadEndElement();
                }
            }

            sr.Close();

        }
    }
}