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