SERVICE

各言語でのサンプルコードC#

スリーメール


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
{
    /// <summary>
    /// メインクラス
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            new SendData().send();
 
            Console.ReadLine();
        }
    }
 
    /// <summary>
    /// 送信用データ生成
    /// </summary>
    class SendData
    {
        Hashtable userData = new Hashtable();
 
        /// <summary>
        /// データ送信
        /// </summary>
        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();
 
        }
    }
}