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(); } } }