はじめて書き込みさせていただきます。
お聞きしたいことは、
ExchangeServer2003が入ってるマシンがあり、そのマシンで
あるメールボックスに送信されたメールに添付されているファイルを指定したフォルダに自動保存するアプリを考えています。
まず、こういった事はC++で可能なのでしょうか?
自分で調べてみたのですが、Outlookのマクロ等は見つかったのですが、
Outlookは入れる予定がないので・・・
それと、可能であれば何か参考になるHPを教えていただけないでしょうか?
調べていてMAPIが使えそうな気はしているのですが、ほんとに使えるのかまだ疑問なので…
よろしければお力をお貸しください。
ExchangeServerがPOPの口を開いているならPOPで取得は出来るでしょう。
但し、受信内容の解析とかデコードとかいろいろやら無いと駄目でしょうけれど。
MAPIってメーラーの機能を呼び出すための共通インターフェイスでしかないから
肝心のメーラーが無いと呼び出せないような気がするんだけど違いましたっけ?
ExchangeServerがPOPの口を開いていないならOutlookを介してでないと
サーバー上のデータにはアクセスできないのではないかなぁ。
そもそもアクセスするためのアカウント情報とかどうするのっていう話もありますし。
結局、メーラーが必要なのでは?
PATIOさん
コメントありがとうございます。
私のほうでも続けて調べてみたのですが…メーラーが必要…かもとは思いました。
ですが、Exchange API(http://support.microsoft.com/kb/813349/ja)
というのを見つけたのですが…まだ見つけたばかりでなんとも。。
MAPIが使えるのであれば、MAPIReadMailなどで行けるのかなーとは思うのですが。。
あと、POPで取得するなら添付ファイルのバイナリデータをそのまま抜き取って、ファイル名つけて吐き出せば取得出来るのかなとも。。。
とりあえず、その他もろもろの話は置いといて、実現可能な方法を今模索しています。
ありがとうございました。本当にメーラーが必要かなど引き続き調べてみます。
ExchangeサーバがPOPのポートを開放しているのならBASP21.dllとか
nMail.dllの力を借りてメールを受信してそこから添付ファイルを
抜き出すのが一番簡単だと思いますよ。
POPを開放していない場合はちょっと私だとお手上げですTT
→私の作っているメールソフトではExchangeサーバからの
メールの受信については考えていないため
POPで受信しても添付ファイルはバイナリでは付いてこないはず。
BASE64等でエンコードされているはずなのでそのままではバイナリデータになりません。
この辺のデコードやらヘッダー解析やらを全部やってくれるようなライブラリを使えば、相当楽に処理ができるでしょうね。
自分でやるとしたら相当苦労しそうですけれど。
Exchange APIに関しては.NET Frameworkを使えばと言う事じゃないですかねぇ?
純粋なC++でやりたいならこの方法は無理かなと思いますけれど。
C++/CLIでやるなら何とかなるかもですが。
あと、開発環境について全く触れられていないのですけれど、
VS2005を使うんですかねえ?
最新ならC++/CLIが使えるのでExchange APIも使えるかもですね。
それ以前ならManaged コードで対処かな?
VC++6.0とかなら.NET Frameworkはサポートされていないと思いますし。
開発環境によって選択肢が変わってくるのできちんと提示しないと
的確なレスポンスは期待できませんよ。
みけにゃんさん・PATIOさんありがとうございます。
開発環境はVS2005です。ご提示が遅くなり申し訳ありません。。
みけにゃんさん
それはPOP開放が条件なのですね。
ありがとうございます。BASP21.dll、nMail.dllについては今から調べてみます。
あと、POPが開放されているかも調べてみます。
分からない点がありましたら、またご質問させてください。
PATIOさん
>POPで受信しても添付ファイルはバイナリでは付いてこないはず。
>BASE64等でエンコードされているはずなのでそのままではバイナリデータになりません。
そうなんですか?ちょっと考えが甘かったです。ご指摘ありがとうございます。
>この辺のデコードやらヘッダー解析やらを全部やってくれるようなライブラリを使えば、相当楽に処理ができるでしょうね。
との事ですが、そういったライブラリは存在するのでしょうか?自分でそういった機能を持たせたライブラリを作成した方が早いということでしょうか?
Exchange APIについても、おそらくPATIOさんの仰る通りかなと思いました。
引き続き調べてみます。ありがとうございます。
>BASP21.dll、nMail.dllについては今から調べてみます。
とりあえず情報してはどちらもVS2005では使えるようなので
お好みの方を使うと良いと思います。>nMail.dllの方は実験済
nMail.dllを使ったメールソフトプログラムを書いているので
こちらであれば対応できるかなぁ・・・と言う感じです。
ちなみにこのDLLだとファイルの中身を関数に渡してあげるだけで
添付ファイルを取り出す事が手来ます。
POP3で開いているかは…
TELNETで110番ポートに接続してみるとか。
http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200703/07030027.txt
で解説(?)されてます。
110番ポートに接続できない場合はPOP3が開いていない可能性が高いです。
(POP3Sが開いているかも知れませんが)
添付ファイルは普通ならBASE64でエンコードされていますね。
ただのテキストファイルが添付してあるとかいう場合を除いて。
BASE64の仕様で、ファイルサイズは増えていたりします。
BASE64のデコードなら探せばサンプルはあると思います。
(私は猫でもから拝借しましたが)
なお、添付ファイルの場合、ファイル名もMIMEでエンコードされているかと。
こちらの方が面倒かも知れません。
# 添付ファイル名のエンコードだと、Thunderbirdで最近問題出ていましたなぁ。
# RFCに正しく対応しただけ…だったようですが。
> との事ですが、そういったライブラリは存在するのでしょうか?
> 自分でそういった機能を持たせたライブラリを作成した方が早いということ
> でしょうか?
みけにゃんさんが紹介されているDLLがそれにあたると思いますよ。
nMail.dlに関してはみけにゃんさんが既に使っておられると言う事なので
大丈夫なのではないでしょうか。
瀬戸っぷさんが指摘されている通り、添付ファイル名のエンコードに関しても
デコードが必要ですね。特に日本語でファイル名とつけていたりすると
エンコードされているのですぐ読める状態ではない形になってたはずです。
これもライブラリを使えば気にしなくてもいけそうですけれど。
実は、メールの扱う為には、RFCという文書に書かれているルールに乗っ取って
扱う必要があります。今回の場合は受信して受信内容から添付ファイルを取り
出すだけなのでかなり負担は楽になりますけれど、メール全般を扱う気がある
なら一度読んで見て勉強してみてはどうかと思います。
但し、原文は英語ですので辞書で引き引きという事になりますけれど。
一部は和訳されている物もあるようなので探してみると良いかもしれません。
有料だったかもしれませんけれど。
枝葉に反応。
> なお、添付ファイルの場合、ファイル名もMIMEでエンコードされているかと。
MIMEエンコードは本来「されてはいけない」ですね。
RFC 2047 / 5. Use of encoded-words in message headers (3)に,
>+ An 'encoded-word' MUST NOT be used in parameter of a MIME Content-Type or Content-Disposition field, or in any structured field body except within a 'comment' or 'phrase'.
とあるので。
ただ,受信側は幅広く受け付ける方がよいでしょうから,MIME B/Qエンコードされていても受け付けた方がよいでしょう。
RFC 2231のサンプルバグをどうするかは考え方次第でしょうが……。
# MS系アプリがRFC 2231非対応はなんとかしてほしい……
参考) http://www.emaillab.org/essay/japanese-filename.html
皆様ありがとうございます。
皆様にだいぶヒントを頂いたので色々調べながら試していこうかと思います。
ツイート | ![]() |