dbmailの接続処理、POPコマンド
http://www.dbmail.org/dokuwiki/doku.php?id=er-model
- case POP3_PASS:
- db_createsession()
- db_find_create_mailbox
- "INBOX"とuser_idnrを指定してdbmail_mailboxesからmailbox_idnrを取得する
- dbにクエリを発行 ※1
- 全データを格納 ※2
- ユーザ、メール合計数、サイズのメッセージを表示
- case POP3_LIST:
- virtual_messagestatus < MESSAGE_STATUS_DELETE を表示
- case POP3_RETR:
- virtual_messagestatus < MESSAGE_STATUS_DELETE にポインタを進める
- message.virtual_messagestatus = MESSAGE_STATUS_SEEN (2)
- db_send_message_lines(message.realmessageid)
- message_idnr(realmessageid)からphysmessage_idを取得
- dbmail_message_retrieve(physmessage_id)
- ヘッダを取得
- bodyを取得
- ヘッダを表示
- bodyを表示
- case POP3_DELE:
- virtual_messagestatus < MESSAGE_STATUS_DELETE にポインタを進める
- message.virtual_messagestatus = MESSAGE_STATUS_DELETE (2)
- セッションのメールトータルサイズやメール数を減らす
更新があった場合
- messageのポインタを進める
- if (message.virtual_messagestatus != message.messagestatus) statusを更新
※1
--define DBPFS "dbmail_" --define MESSAGE_STATUS_DELETE 2 SELECT pm.messagesize, msg.message_idnr, msg.status, msg.unique_id FROM {DBPFX}messages msg, {DBPFX}physmessage pm WHERE msg.mailbox_idnr = $mailbox_idnr AND msg.status < MESSAGE_STATUS_DELETE AND msg.physmessage_id = pm.id ORDER BY msg.message_idnr ASC
※2
message.msize = dbmail_physmessage.messagesize
message.realmessageid = dbmail_messages.message_idnr
message.messagestatus = dbmail_messages.status
message.virtual_messagestatus = message.messagestatus
if (dbmail_messages.unique_id)
message.uidl = dbmail_messages.uniqe_id
リストにmessageを追加
他にもテーブルが沢山あるが、それは余力があれば。