Back     Next Page

Access2000で家族メール?  その2

  2001.06.23 tsuchiya

これまでにメールサーバーのテーブルと送信フォームが出来ました。

   ここで再度メールソフトの機能を確認しておきます。
     1.新規メールを書いて送信する。(作成済み)
     2.メールを受信して読む。
     3.返信メールを書いて送信する。

今日は、2.メールを受信して読む。に挑戦します。
初回に、フラグというフィールドを何気なく追加しました。
ここではメールの状態を示すフラグが重要の役割をします。

   メールは送信(1)→受信(2)→返信(3)→受信(4)でワンセットであるべきです。
   最後のフィールドのフラグは・・・
と以前書きました。そこで、フラグを詳しく説明するため表を作成しました。
フラグ 送信者側から見たメールの状態 送信者 宛先
メッセージ ホルダー メッセージ ホルダー
1 新規メールを出す 相手は未読です 送信済み 着信メールあり 受信トレイ
2 相手(宛先)が読む 相手が読みました 送信済み 返信してください 受信トレイ
3 相手が返信を出す 返信メールあり 受信トレイ 相手は未読です 送信済み
4 返信を読む なし 完了済み なし 完了済み
送信者をA(旦那),宛先をC(息子)として解説してみます。
Aがメールを出す(フラグ1)とそのメールはAの送信済みのホルダーに入り、同時にCの受信トレイに入ります。
Cがメールを読むまではAにはCがまだメールを読んでいないことを知らせます。
Cが着信メールありのメッセージに気づき、そのメールを読みます。(フラグ2)
AにはCがメールを読んだことを知らせます。
Cが返信メールを書いてAに送ります。(フラグ3)
Cの受信トレイのメールは返信メールを含め送信済みホルダーへ移動、
同様にAの送信済みメールは返信メールを含め受信トレイに移動し[返信メールあり]を知らせます。
Aがその返信メールを読むまではCにはAが返信メールを読んでいないことを知らせます。
Aが返信メールを読む(フラグ4)とワンセットの完了です。
A,C共メールのデータを完了済みのホルダーに移動します。
これでメールサーバーテーブルの1レコードが完結したことになります。

たかが1通のメールのやりとりも解析すると結構複雑になりました。

本題(2.メールを受信して読む。)に戻ります。
まずメールを受信するまでを考えます。
Cの立場で考えて見ましょう。
誰かから新規にC宛てにメールが送られたとしましょう。
Cはメールソフトを立ち上げます。
メールサーバーにアクセスします。
着信メールはメールサーバーテーブルのデータから抽出条件 フラグ = "1" AND 宛先 = "C"で得られそうです。
同様にCから新規に誰か宛てに送ったメールの返信が来た場合は抽出条件 フラグ = "3" AND 送信者 = "C"
で得られます。
これらのデータを受信トレイに表示すればメールを受信したことになります。

着信メールに表示するフィールドは送信者、送信日時、件名
また、返信メールに表示するフィールドは宛先、返信日時、件名とします。
いずれも特定データをクリックすることにより、フラグを除くすべてのフィールドを表示させます。

それでは具体的に受信トレイのフォームを作成します。
Cが受信トレイを開いた様子です。
設計が楽なのですべてリストボックスです。
リストボックスの値集合ソース(SQLステートメント)を上から順にを示します。

着信メール Cに届いた新規のメールです。
SELECT メールサーバー.送信者, メールサーバー.送信日時, メールサーバー.件名, メールサーバー.宛先
FROM メールサーバー
WHERE (((メールサーバー.フラグ)="1") AND ((メールサーバー.宛先)="C"));

返信メール Cに届いた返信メールです。
SELECT メールサーバー.宛先, メールサーバー.返信日時, メールサーバー.件名
FROM メールサーバー
WHERE (((メールサーバー.フラグ)="3") AND ((メールサーバー.送信者)="C"));

送信済み Cが送ったメールのうち返事がまだ来ないメールです。フラグ1は相手が未読です。
SELECT メールサーバー.宛先, メールサーバー.送信日時, メールサーバー.件名
FROM メールサーバー
WHERE (((メールサーバー.フラグ)="2") AND ((メールサーバー.送信者)="C")) OR (((メールサーバー.フラグ)="1") AND ((メールサーバー.送信者)="C"));

完了済み Cに関係した送受信が完結したメールです。
SELECT メールサーバー.送信者, メールサーバー.宛先, メールサーバー.件名
FROM メールサーバー
WHERE (((メールサーバー.送信者)="C") AND ((メールサーバー.フラグ)="4")) OR (((メールサーバー.宛先)="C") AND ((メールサーバー.フラグ)="4"));

簡単ですが、リストボックスでメールを受信する部分まで出来ました。

次に.[メールを受信して読む。] 読むに挑戦しましょう。
リストボックスからデータをWクリックして詳細フォームを開きます。
右のフォームのイメージで詳細フォームを作成します。
表示されているのはメールサーバーの1件目のデータです。
返信メール、完了済みのデータはこのスタイルでOKです。
返信メールの場合、フォームを閉じると同時にフラグを
3から4に書き換えます。
送信済みの場合、下部の返信部分のデータは非表示か
使用不可にし、相手がメールを読んでいるかフラグで判断し
メッセージを表示することが可能です。
着信メールの場合、下部に返信メールを書くコマンドボタン
を追加します。



以上で受信トレイの大体のイメージが出来ました。
ただしメールサーバーから特定のレコードを詳細表示する際、問題が生じました。
そこでメールサーバーテーブルのフィールドの先頭にIDフィールドを追加します。
IDはユニークなキーとして主キーに設定します。データ型は数値型(長整数型)です。
IDは1からの連番ですが、オートナンバー型は使用しません。
新規メールを送信する際、自動発行します。
IDフィールドを追加したメールサーバーテーブルの様子です。
送信者、宛先にAとかBでは解りづらいので送信者テーブル、宛先テーブルを作成します。
旦那はパパ、奥さんはママに変更しました。
下図は宛先テーブルです。

さて準備が出来ました。受信トレイフォームを完成しましょう。
先ほど作った受信トレイのリストボックスを手直しします。
この続きは、また後日。

 

 Back     Next Page