diff -ru dbmail-1.0/db.h dbmail-my/db.h
--- dbmail-1.0/db.h	2002-12-03 08:49:29.000000000 -0500
+++ dbmail-my/db.h	2002-12-03 23:35:11.000000000 -0500
@@ -155,7 +155,7 @@
 u64_t db_deleted_purge();
 u64_t db_check_sizelimit (u64_t addblocksize, u64_t messageidnr, 
 				  u64_t *useridnr);
-int db_imap_append_msg(const char *msgdata, u64_t datalen, u64_t mboxid, u64_t uid);
+int db_imap_append_msg(const char *msgdata, u64_t datalen, u64_t mboxid, u64_t uid, const char *internal_date, int seen_flg);
 
 /* mailbox functionality */
 u64_t db_findmailbox(const char *name, u64_t useridnr);
diff -ru dbmail-1.0/imapcommands.c dbmail-my/imapcommands.c
--- dbmail-1.0/imapcommands.c	2002-12-03 11:32:16.000000000 -0500
+++ dbmail-my/imapcommands.c	2002-12-10 21:18:56.000000000 -0500
@@ -1340,6 +1340,7 @@
   imap_userdata_t *ud = (imap_userdata_t*)ci->userData;
   u64_t mboxid;
   int i,internal_date_idx=-1,result;
+  int seen_flg=0;
 
   if (!args[0] || !args[1])
     {
@@ -1374,6 +1375,7 @@
 
       while (args[i] && args[i][0] != ')') 
 	{
+	  if(strcasecmp(args[i],"/Seen") != 0) seen_flg = 1;
 	  trace(TRACE_DEBUG, "%s ",args[i]);
 	  i++;
 	}
@@ -1397,15 +1399,26 @@
     {
       /* internal date specified */
       internal_date_idx = i;
+      char intsqldate[20];
+      struct tm tm;
+      if(strptime(args[i], "%d-%b-%Y %T", &tm)!=0)
+        strftime(intsqldate, sizeof(intsqldate), "%F %T", &tm);
+      else
+	intsqldate[0] = 0;
       i++;
       trace(TRACE_DEBUG, "ic_append(): internal date [%s] found, next arg [%s]\n",
-	    args[i-1], args[i]);
+	   intsqldate, args[i]);  // args[i-1]
+      /* ok literal msg should be in args[i] */
+      /* insert this msg */
+      result = db_imap_append_msg(args[i], strlen(args[i]), mboxid, ud->userid, intsqldate, seen_flg);
+    }
+  else
+    {
+      /* ok literal msg should be in args[i] */
+      /* insert this msg */
+      result = db_imap_append_msg(args[i], strlen(args[i]), mboxid, ud->userid, NULL, seen_flg);
     }
 
-  /* ok literal msg should be in args[i] */
-  /* insert this msg */
-
-  result = db_imap_append_msg(args[i], strlen(args[i]), mboxid, ud->userid);
   switch (result)
     {
     case -1:
diff -ru dbmail-1.0/mysql/dbmysql.c dbmail-my/mysql/dbmysql.c
--- dbmail-1.0/mysql/dbmysql.c	2002-12-03 11:32:16.000000000 -0500
+++ dbmail-my/mysql/dbmysql.c	2002-12-03 23:34:56.000000000 -0500
@@ -2325,7 +2325,7 @@
  *  2 mail quotum exceeded
  *
  */
-int db_imap_append_msg(const char *msgdata, u64_t datalen, u64_t mboxid, u64_t uid)
+int db_imap_append_msg(const char *msgdata, u64_t datalen, u64_t mboxid, u64_t uid, const char *internal_date, int seen_flg)
 {
   char timestr[30];
   time_t td;
@@ -2341,10 +2341,19 @@
   /* create a msg 
    * status and seen_flag are set to 001, which means the message has been read 
    */
-  snprintf(query, DEF_QUERYSIZE, "INSERT INTO messages "
+  if(internal_date == NULL) {
+    snprintf(query, DEF_QUERYSIZE, "INSERT INTO messages "
 	   "(mailbox_idnr,messagesize,unique_id,internal_date,status,"
-	   " seen_flag) VALUES (%llu, 0, \"\", \"%s\",001,1)",
-	   mboxid, timestr);
+	   " seen_flag) VALUES (%llu, 0, \"\", \"%s\",001, %d)",
+	   mboxid, timestr, seen_flg);
+  }
+  else 
+  {
+    snprintf(query, DEF_QUERYSIZE, "INSERT INTO messages "
+	   "(mailbox_idnr,messagesize,unique_id,internal_date,status,"
+	   " seen_flag) VALUES (%llu, 0, \"\", \"%s\",001, %d)",
+	   mboxid, internal_date, seen_flg);
+  }
 
   if (db_query(query) == -1)
     {
