summaryrefslogtreecommitdiffstats
path: root/src/nmail.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nmail.c')
-rw-r--r--src/nmail.c93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/nmail.c b/src/nmail.c
new file mode 100644
index 0000000..e9fbdb8
--- /dev/null
+++ b/src/nmail.c
@@ -0,0 +1,93 @@
+/* $Id$ */
+
+/***
+ This file is part of libnewmail
+
+ libnewmail is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ libnewmail is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with libnewmail; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA
+***/
+
+#include <stdio.h>
+#include <errno.h>
+
+#include <newmail.h>
+
+/* This type of query is issued */
+int query = NM_QUERY_NCUR|NM_QUERY_NNEW;
+
+/* A simple function formatting mail status codes */
+char *b2s(int b) {
+ if (b < 0) return "fail";
+ if (b > 0) return "yes";
+ return "no";
+}
+
+/* A callback function called once for each defined libnewmail mailbox */
+void cb(const char *spool, const void*user) {
+ struct nm_spool* s = NULL;
+ struct nm_info i;
+ struct nm_status st;
+
+ /* Open this mail spool */
+ if (!(s = nm_open(spool))) {
+ fprintf(stderr, "nm_open(\"%s\"): %s\n", spool, nm_strerror(nm_errno, errno, nm_explanation));
+ goto finish;
+ }
+
+ /* Get spool information */
+ if (nm_info(s, &i) < 0) {
+ fprintf(stderr, "nm_info(\"%s\"): %s\n", spool, nm_strerror(nm_errno, errno, nm_explanation));
+ goto finish;
+ }
+
+ /* Show some information about the spool */
+ printf("\n%s:\n\tName: %s\n\tType: %s\n\tText: %s\n\tFlags: ", i.path, i.name, i.type, i.text);
+ if (i.flags & NM_FLAG_SYNCHRONOUS) printf("SYNCHRONOUS ");
+ if (i.flags & NM_FLAG_ASYNCHRONOUS) printf("ASYNCHRONOUS ");
+ printf("\n");
+
+ /* Do a status query */
+ if (nm_query(s, query, &st) < 0) {
+ fprintf(stderr, "nm_check(\"%s\"): %s\n", spool, nm_strerror(nm_errno, errno, nm_explanation));
+ goto finish;
+ }
+
+ /* Print the status query results: total number of mails */
+ if (query & NM_QUERY_NCUR)
+ printf("\tCurrent: %i\n", st.cur);
+ else if (query & NM_QUERY_CUR)
+ printf("\tCurrent: %s\n", b2s(st.cur));
+
+ /* Print the status query results: new mails */
+ if (query & NM_QUERY_NNEW)
+ printf("\tNew: %i\n", st.new);
+ else if (query & NM_QUERY_NEW)
+ printf("\tNew: %s\n", b2s(st.new));
+
+finish:
+
+ /* Close the mail spool */
+ if (s)
+ nm_close(s);
+}
+
+int main(int argc, char *argv[]) {
+
+ /* Iterate through the mail spools */
+ if (nm_list(cb, NULL) < 0)
+ nm_perror("nm_list()");
+
+ return 0;
+}