ログ日記

作業ログと日記とメモ

dbmailの接続処理、POPコマンド

http://www.dbmail.org/dokuwiki/doku.php?id=er-model

  1. case POP3_PASS:
  2. db_createsession()
  3. db_find_create_mailbox
    • "INBOX"とuser_idnrを指定してdbmail_mailboxesからmailbox_idnrを取得する
  4. dbにクエリを発行 ※1
  5. 全データを格納 ※2
  6. ユーザ、メール合計数、サイズのメッセージを表示
  1. case POP3_LIST:
  2. virtual_messagestatus < MESSAGE_STATUS_DELETE を表示
  1. case POP3_RETR:
  2. virtual_messagestatus < MESSAGE_STATUS_DELETE にポインタを進める
  3. message.virtual_messagestatus = MESSAGE_STATUS_SEEN (2)
  4. db_send_message_lines(message.realmessageid)
  5. message_idnr(realmessageid)からphysmessage_idを取得
  6. dbmail_message_retrieve(physmessage_id)
  7. ヘッダを取得
  8. bodyを取得
  9. ヘッダを表示
  10. bodyを表示
  1. case POP3_DELE:
  2. virtual_messagestatus < MESSAGE_STATUS_DELETE にポインタを進める
  3. message.virtual_messagestatus = MESSAGE_STATUS_DELETE (2)
  4. セッションのメールトータルサイズやメール数を減らす


更新があった場合

  1. messageのポインタを進める
  2. 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を追加

他にもテーブルが沢山あるが、それは余力があれば。