メールチェッカー(Mlck)


■ 概略説明
 皆さんお馴染みのE-Mailチェッカーです。うちでもインターネットの常時接続に因んで作成してみました。
このソフトは定期的にPOPサーバーにアクセスして、指定されているアカウントのメールの数を調べるアプリケーションソフトです。
最初の起動時に、サーバー名とアカウント情報等を要求し、開始時にデータをファイルに格納し、2回目以降は起動時のダイアログを表示しません。実行中はタスクトレイにアイコンが追加され、指定された時間毎にサーバーに通信をしてメールのチェックを行います。
タスクトレイアイコンの右クリックでメニューが表示され、左ダブルクリックで指定したメールプログラムを起動します。
■ プログラムの説明
プログラムのポイントは、サーバーとの通信とタスクトレイの管理です。
サーバーとの通信はソケット通信を用います。サンプルではCSokectからなるCPopSocketです。
サーバーとの通信はインターバルタイマーを使い、毎回、接続・ログオン・検査・ログオフ・切断を行っているのでマルチアカウント対応への移行も簡単に出来ると思います。
ソース上は、LogOnが接続・ログオン、CheckMailが検査、LogOffがログオフ・切断です。
接続は、通常のSocket通信と同じでConnect関数を使います。
Connect( サーバー名, ポート番号)
サーバー名は、プロバイダーが指定するメール受信サーバーで例えば、"pop.abc.com"のような形式です。ポート番号は通常110です。
以下、ログオンからログオフまでは、POP3(Posst Office Protocol version3)のプロトコルに従いSend、Receiveの送受信関数により行います。
具体的なサーバーとのやり取りは、次項のサンプルを見てください。
切断は、Close関数で行います。
CPopSocket内で、Send関数がオーバーライドしてありますが、これは送信データのログを取るためで実際は必要ありません。

次にタスクトレイ管理ですが、タスクトレイ自体はShell_NotifyIcon関数を使えば問題なく出来ます。しかし今回一番手間取ったのが起動時に表示されるダイアログウィンドウを非表示にすることでした。このソフトの仕様は、ダイアログベースで作成し、メインダイアログは設定画面にして検査中は非表示にして、設定を変更したい時だけ表示したいというつもりでしたが、問題は起動時です。「アプリケーション制御」のサンプルでも同じ問題がありましたが、そこではOnPaint内で最初の1回のみShowWindowにより消すという方法をとりましたが、一瞬ウィンドウが見えてしまいます。今回はそれを避けたかったので、いろいろ試してみましたがだめで、結局ダイアログを使わずに非表示のCWnd(CMainWnd)を作成し、ここからタスクトレイアイコンの管理及びタイマーによるメール検査を行う事にしました。起動時に設定データのファイルを検査し、無い場合のみ設定ダイアログを表示し、それ以外は直接タスクトレイにアイコンを表示します。
■ POP3サンプル通信データ
Connect関数で接続が成功すると、以下の様な受信データが送られてきます。
< +OK POP3 server ready <12345.67890123@popc>
USERコマンドを送信し、ログオンします。
> user kenji
< +OK hello kenji
PASSコマンドでパスワードを送ります。
> pass himitsu
< +OK password ok
STATコマンドにより現在のメールの状況を調べます。
> stat
受信データの2番目のパラメータがメールの数です。1通あることを示しています。3番目はデータの容量です。
< +OK 1 1513
QUITコマンドにより、ログオフします。
> quit
< +OK bye
以上が、サンプルで使われているコマンドです。他にLIST、RETR、DELEなどがあり、メールを読み込んだりサーバーのメールバッファを削除したり出来ます。
■ ファイルのダウンロード
(MFC6.0プロジェクトファィル21KB)