PREV | PAGE-SELECT | NEXT

≫ EDIT

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

| スポンサー広告 | --:-- | comments(-) | trackbacks(-) | TOP↑

≫ EDIT

開発実況1日目

 もば絵をココログに簡単にアップ出来るようにしてみよう。と、思った。 作者がプログラムを開発するまでの道のりをリアルタイムで残していくと面白いかもしれないので、試みてみる。

さて、今回のテーマは「もば絵をココログに簡単にアップする」方法である。もば絵って何?って人はホームページの方を見ていただきたい。

まず、目的は

・描いたもば絵をココログにテキスト文書と一緒にアップする

事である。これに対する手段としては分かっている範囲では以下の方法がある。



・メール経由で送信
  メリット:簡単
  デメリット:単純にテキストと添付ファイルのみ
・直接サーバーに送信
  メリット:HTMLタグ等複雑な構成が送れる。
    VGAサイズのもば絵等、サムネイルをクリックすると大きい画像を表示、と言う風に出来る
    カテゴリの設定が出来る
  デメリット:処理が複雑

ubicastが直接サーバーとやりとりをしている様なので、なんらかの方法で直接サーバーに送信は出来る筈である (HTTP経由で擬似ブラウザの様な事をやっているのだろうか?)。しかし、 ココログのベースとなっているCGIのしくみを理解する必要があり、かなり厄介だし面倒だ。

よって、今回は簡単なメールによる更新手段を取る事とする。

さて、メールによる更新手段を取るとして、実際どうやってメールを送るかが次のポイントとなってくる。以前幻彩2の開発初めに、 描いたもば絵をPocket Outlookに渡し、メールで送信できる状態まで持っていくプラグインを作った事がある。 これと同じしくみで、他のソフトに本文と添付ファイルとしてもば絵を渡してやる方法も取れるが、 今回はもうちょっと進んで自力でメール送信する所までやってみたい。

プログラムとしては幻彩2のプラグインの形式にする。やる事は

・プラグインの画面に「メール送信」のボタンを表示
・以下の項目を設定可能とする
  使用する接続設定
  SMTPサーバー名
  ユーザー名
  パスワード
  メールアドレス
  送信先
  件名
  本文
・送信ボタンが押されると、現在作成中のもば絵を添付ファイルとしてメールを送信する。回線の接続・切断も自動で行う。

FTP送信プラグインを既に開発しているので、モデム等による回線の接続・切断は出来る。今回の課題としてはメールの送信方法である。
メールの通信プロトコルについてはほとんど分かっていないので、ここから調べる事になる。

恐らく、やり方としては

・APIに頼る
・自力で通信処理を全部やる

があると思う。APIはMAPIかTAPIあたりを調べれば分かるのだろうか。WinInetかも知れない。
まずは楽なAPIに頼る方法を調べ、それがだめな場合面倒だが自力で通信を行う事とする。 多分SMTPはテキストでのやりとりがメインだろうから、なんとかなるだろう。

恐らくメールの送信手順としては以下の様な物だろうと想定してみる。

・メールの送信形式にテキストを揃える
 もば絵はuuencodeやbinhex等、テキスト方式に変換し添付ファイルにする
・相手先に接続
・ユーザー名とパスワード送信
・メールのデータを送る
・接続を閉じる

もば絵を添付ファイルとしてくっつける処理が厄介そうだ。バイナリデータを添付ファイルとしてくっけてくれるAPIがあれば良いが、 なかったらこのあたりも作らなくてはならない。
POP before SMTPの処理も面倒かもしれない。とりあえずPOP before SMTPは無しにしておいて、 出きそうであれば考えよう。
以前メールの送受信はユーザー名等が経由サーバーに筒抜け、と読んだ事がある気がする。 少し検索した所SSLやAuthと言ったキーワードがありそうだが、APIがここら辺やってくれるかもしれないので、 セキュリティっておいしいの?って事でとりあえず置いておく。

さて、メール関連のAPIを探してみよう。良いAPIを探す事がプログラミングの重要なステップの一つである。 どうやってAPIを探すかであるが、大体次の二つの方法で探している。

・googleで検索
・MSDN Library内を検索

検索する際重要になってくるのが検索に使うキーワードだ。今回は「MAPI」「API」「Win32」「SMTP」あたりか。
「MAPI メール 送信」でgoogle検索してみる。MAPISendMailと言う関数があるらしき事を発見。
「MAPISendMail」で検索してみる。

MAPISendMail でメール送信

幸先良い。言語が少し異なる様だが、API名が分かれば良いので、キーとなりそうなAPIを抜き出してみる。

・SetMAPIRecipDesc(送信先の設定?)
・MAPISendMail(メール送信の実行?)

この2つぐらいだろうか。MSDNを「SetMAPIRecipDesc」で検索してみる。見つからない。独自関数だろうか? 再度googleで検索してみる。このページしかヒットしない。
どうやら一般的な関数ではなさそうだ。MAPI関数はMAPIで始まる様なので、再度Setを除いた「MAPIRecipDesc」 で検索してみる。

MAPIでメールの送信

構造体をいくつか作って、MAPISendMail関数で一気に送るらしい。 ファイルのエンコードもしてくれる様なのでかなり簡単だが、
IEの電子メールの設定で使用するメールソフトが設定出来る、とある。

と、言う事は、私の様にデスクトップではBeckyを使っていたり、Pocket PCではnPOPを使っている場合MAPIは使えないのではないだろうか。
確かめてみるため、とりあえずデスクトップ上で簡単なメール送信プログラムを上記サンプルに沿って作ってみる。

いざ、実行。

mail1
きっとだめだろな~

mail2
だめだった~

やぱ、だめでした。 MAPI_E_LOGIN_FAILUREのエラーが返ってきたので多分メーラーが設定されていないのが原因でしょう。

と、言うわけで、作成B決行。面倒だけど自力でSMTP通信を行うしかなさそうです。 となるとファイルのエンコード方法もしらべなきゃ。面倒だ。

とりあえずする事は二つかな。

・SMTPの送受信方法
・ファイルのエンコード/MIME添付方法

ファイルのエンコードの方が簡単そうなので、エンコードから始めよう。 Beckyで良く使っているエンコードはBase64なのでBase64をgoogleで調べてみる。

BASE64 について

データを3バイト単位で区切って、最後あまったら「=」をつけるらしい。 その3バイト24ビットを6ビットづつ分割してテーブルに従い文字列にする。

ってーと、例えばデータが

0x7B 0x3F 0x9D

とかすると、

0111 1011 0011 1111 1001 1101

となって

011110 110011 111110 011101

ってなったりして

30 51 62 29

って事になって、ASCIIコード順じゃないのが面倒だな。

c x 8 b

って事ですか。これでデータが1.33倍に膨れるわけだな。フリー版でBMPファイルの添付ファイルを付けられた場合、 VGAサイズで640x480x3 x1.33でワーク用のデータが約1.23MBか。とりあえずプロ版専用って事にしとこう。

あ、サンプルのエンコード用ソースコードも提供してる。ありがたく使わせてもらおう。

参考リンクにMIMEについての説明もあるな。

[10] バイナリデータの送受信

丁寧にメールの形式も書かれてる。こうだな。

 

Date: 日時
From: 送信者アドレス
To: 受取人アドレス
Subject: 件名
Mime-Version: 1.0
Content-Type: multipart/mixed: boundary="バウンダリ"

This mail is a multi-part message in MIME format.

--バウンダリ
Content-Type: text/plain; charset=iso-2022-jp

本文

--バウンダリ
Content-Type: application/octet-stream; name="ファイル名"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="ファイル名"

Base64エンコードしたファイルデータ

--バウンダリ--

 

以前何かでバウンダリの文字列は本文等に出てこない文字列を指定する、 って聞いた気がするのでNFCANVASBOUNDARY1とか固定しといて、万が一該当文字列があったら変更する様にしとこう。
日時は「Tue, 13 Aug 1996 01:23:00 +0900」か。 +0900は日本の場合固定で他の文字列も桁数が固定だろう。これは時間を取得して埋めればOKかな。
本文はcharsetで日本語に指定しておけば大丈夫だろう。件名は日本語で大丈夫かな?って言うか、 Beckyのメールのヘッダを見てみれば良いのか。

そのまま日本語入れれば良いらしい。でもISO-2022-JPってJISらしいけど、少なくともPocket PCはUnicodeだから文字列の変換は必要だな。
widechartomultibyteとiso-2022-jpで検索~。

と思ったけど今日はここいらで撤収~。

| 開発 | 09:29 | comments:0 | trackbacks:0 | TOP↑

COMMENT















非公開コメント

TRACKBACK URL

http://nefa.blog117.fc2.com/tb.php/12-f9a42589

TRACKBACK

PREV | PAGE-SELECT | NEXT

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。