On 9/28/07, Julien Kerihuel <[EMAIL PROTECTED]> wrote:
>
> On Fri, 2007-09-28 at 15:46 +0200, Andrew Gaylard wrote:
> > Quick question: is there a way to get openchangeclient to delete
> > the contents of the "sent items" folder? Or should I write it myself?
>
> openchangeclient only supports mail deletion within "Inbox" for
> convenience -- maybe laziness --. However, I could easily copy the
> --folder option from openchangepfadmin to openchangeclient.
No problem. I've just finished adding the code myself.
Patch follows.
This would fit for your purposes, but I'd rather prefer to improve the
> whole function first and provides a way to open folders which are more
> than 1 level from the top directory. For example "/Inbox/Holidays/2008"
> rather than only "/Inbox" as we are currently doing.
Yes, that would be a much better way of doing it. But for now,
I can live with what this code provides.
Andrew.
Index: utils/openchangeclient.c
===================================================================
--- utils/openchangeclient.c (revision 266)
+++ utils/openchangeclient.c (working copy)
@@ -117,6 +117,36 @@
return MAPI_E_NOT_FOUND;
}
+static uint32_t default_folder_to_number(const char *f)
+{
+ uint32_t f_no;
+ f_no = 0;
+
+ if (!f) { return f_no; }
+
+ if (!strcasecmp(f, "TopInformationStore")) { f_no =
olFolderTopInformationStore ;}
+ else if (!strcasecmp(f, "DeletedItems" )) { f_no =
olFolderDeletedItems ;}
+ else if (!strcasecmp(f, "Outbox" )) { f_no =
olFolderOutbox ;}
+ else if (!strcasecmp(f, "SentMail" )) { f_no =
olFolderSentMail ;}
+ else if (!strcasecmp(f, "Inbox" )) { f_no =
olFolderInbox ;}
+ else if (!strcasecmp(f, "Calendar" )) { f_no =
olFolderCalendar ;}
+ else if (!strcasecmp(f, "Contacts" )) { f_no =
olFolderContacts ;}
+ else if (!strcasecmp(f, "Journal" )) { f_no =
olFolderJournal ;}
+ else if (!strcasecmp(f, "Notes" )) { f_no =
olFolderNotes ;}
+ else if (!strcasecmp(f, "Tasks" )) { f_no =
olFolderTasks ;}
+ else if (!strcasecmp(f, "Drafts" )) { f_no =
olFolderDrafts ;}
+ else if (!strcasecmp(f, "AllPublicFolders" )) { f_no =
olPublicFoldersAllPublicFolders;}
+ else if (!strcasecmp(f, "Conflicts" )) { f_no =
olFolderConflicts ;}
+ else if (!strcasecmp(f, "SyncIssues" )) { f_no =
olFolderSyncIssues ;}
+ else if (!strcasecmp(f, "LocalFailures" )) { f_no =
olFolderLocalFailures ;}
+ else if (!strcasecmp(f, "ServerFailures" )) { f_no =
olFolderServerFailures ;}
+ else if (!strcasecmp(f, "Junk" )) { f_no =
olFolderJunk ;}
+ else if (!strcasecmp(f, "PublicRoot" )) { f_no =
olFolderPublicRoot ;}
+ else if (!strcasecmp(f, "PublicIPMSubtree" )) { f_no =
olFolderPublicIPMSubtree ;}
+
+ return f_no;
+}
+
static enum MAPISTATUS openchangeclient_getpfdir(TALLOC_CTX *mem_ctx,
mapi_object_t *obj_store,
mapi_object_t *obj_child,
@@ -812,7 +842,7 @@
}
/**
- * delete a mail from user INBOX
+ * delete a mail from user INBOX or specified folder
*/
static bool openchangeclient_deletemail(TALLOC_CTX *mem_ctx,
mapi_object_t *obj_store,
@@ -821,11 +851,12 @@
enum MAPISTATUS retval;
struct SPropTagArray *SPropTagArray;
struct SRowSet SRowSet;
- mapi_id_t id_inbox;
+ mapi_id_t id_folder;
mapi_id_t *id_messages;
+ uint32_t folder_no;
uint32_t count_messages;
uint32_t count_rows;
- mapi_object_t obj_inbox;
+ mapi_object_t obj_folder;
mapi_object_t obj_table;
uint32_t len;
uint32_t i;
@@ -835,21 +866,28 @@
MAPI_RETVAL_IF(!oclient->subject, MAPI_E_INVALID_PARAMETER,
NULL);
}
- mapi_object_init(&obj_inbox);
+ mapi_object_init(&obj_folder);
mapi_object_init(&obj_table);
if (oclient->pf == true) {
- retval = openchangeclient_getpfdir(mem_ctx, obj_store,
&obj_inbox, oclient->folder);
+ retval = openchangeclient_getpfdir(mem_ctx, obj_store,
&obj_folder, oclient->folder);
if (retval != MAPI_E_SUCCESS) return retval;
} else {
- retval = GetReceiveFolder(obj_store, &id_inbox);
+ if (oclient->folder) {
+ folder_no =
default_folder_to_number(oclient->folder);
+ if (folder_no == 0) return false;
+ } else {
+ folder_no = olFolderInbox;
+ }
+
+ retval = GetDefaultFolder(obj_store, &id_folder, folder_no);
if (retval != MAPI_E_SUCCESS) return false;
- retval = OpenFolder(obj_store, id_inbox, &obj_inbox);
+ retval = OpenFolder(obj_store, id_folder, &obj_folder);
if (retval != MAPI_E_SUCCESS) return false;
}
- retval = GetContentsTable(&obj_inbox, &obj_table);
+ retval = GetContentsTable(&obj_folder, &obj_table);
if (retval != MAPI_E_SUCCESS) return false;
SPropTagArray = set_SPropTagArray(mem_ctx, 0x5,
@@ -876,13 +914,13 @@
}
}
if (count_messages) {
- retval = DeleteMessage(&obj_inbox, id_messages,
count_messages);
+ retval = DeleteMessage(&obj_folder, id_messages,
count_messages);
if (retval != MAPI_E_SUCCESS) return false;
}
}
mapi_object_release(&obj_table);
- mapi_object_release(&obj_inbox);
+ mapi_object_release(&obj_folder);
return true;
}
Index: doc/man/man1/openchangeclient.1
===================================================================
--- doc/man/man1/openchangeclient.1 (revision 266)
+++ doc/man/man1/openchangeclient.1 (working copy)
@@ -32,7 +32,7 @@
.SH SYNOPSIS
.nf
-openchangeclient [-?] [-?|--help] [--usage] [-f|--database STRING]
+openchangeclient [-?|--help] [--usage] [-f|--database STRING]
[-p|--profile STRING] [-S|--sendmail] [-F|--fetchmail]
[-G|--storemail STRING] [-D|--deletemail] [-A|--attachments STRING]
[-I|--html-inline STRING] [-W|--html-file STRING] [-t|--to STRING]
@@ -42,6 +42,7 @@
[--location STRING] [--dtstart STRING] [--dtend STRING]
[--busystatus STRING] [--taskstatus STRING] [--email STRING]
[--fullname STRING] [--cardname STRING] [--debuglevel STRING]
+ [--folder STRING]
[--dump-data]
.fi
@@ -197,13 +198,19 @@
.B --sendmail
.TP
+.B --folder=STRING
+Specify the folder to use. For --deletemail, the options are:
+TopInformationStore, DeletedItems, Outbox, SentMail, Inbox, Calendar,
Contacts,
+Journal, Notes, Tasks, Drafts, AllPublicFolders.
+
+.TP
.B --location=STRING
Specify the appointment location. This is only meaningful with
.B --sendappointment
.TP
.B --dtstart=STRING
-Specify the start date of an event. The following dat format need to be
used:
+Specify the start date of an event. The following date format need to be
used:
.B "%Y-%m-%d %H:%M:%S"
e.g: 2007-06-01 14:59:00. This is only meaningful with
.B --sendappointment
@@ -212,7 +219,7 @@
.TP
.B --dtend=STRING
-Specify either the end date or due date of an event. The following dat
+Specify either the end date or due date of an event. The following date
format need to be used:
.B "%Y-%m-%d %H:%M:%S"
e.g: 2007-06-01 14:59:00
_______________________________________________
devel mailing list
[email protected]
http://mailman.openchange.org/listinfo/devel