imaptest.c - rohrpost - A commandline mail client to change the world as we see it.
 (HTM) git clone git://r-36.net/rohrpost
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       imaptest.c (5682B)
       ---
            1 /*
            2  * Copy me if you can.
            3  * by 20h
            4  *
            5  * % make imaptest
            6  * % ./imaptest user pass 'tcps!host!993'
            7  */
            8 
            9 #include <unistd.h>
           10 #include <stdlib.h>
           11 #include <stdio.h>
           12 #include <string.h>
           13 
           14 #include "ind.h"
           15 #include "llist.h"
           16 #include "imap.h"
           17 #include "flag.h"
           18 #include "mime.h"
           19 
           20 int
           21 main(int argc, char *argv[])
           22 {
           23         imap_t *imap;
           24         llist_t *folders, *idsl, *flagl, *flag, *bodies;
           25         llistelem_t *elem, *status;
           26         mime_t *mime;
           27         char *ids;
           28         int i;
           29 
           30         if (argc < 4) {
           31                 fprintf(stderr, "usage: %s user pass netspec\n", argv[0]);
           32                 return 1;
           33         }
           34 
           35         imap = imap_new(argv[3], argv[1], argv[2]);
           36 
           37         if (imap_init(imap))
           38                 imap_die(imap, "imap_init");
           39 
           40         folders = imap_listfolders(imap);
           41         if (folders == NULL)
           42                 imap_die(imap, "imap_listfolders");
           43         printf("folders:\n");
           44         forllist(folders, elem) {
           45                 printf("%s", elem->key);
           46                 if (elem->next != NULL)
           47                         printf(", ");
           48         }
           49         printf("\n\n");
           50         llist_efree(folders);
           51 
           52         folders = imap_subscribed(imap);
           53         if (folders == NULL)
           54                 imap_die(imap, "imap_subscribed");
           55         printf("subscribed:\n");
           56         forllist(folders, elem) {
           57                 printf("%s", elem->key);
           58                 if (elem->next != NULL)
           59                         printf(", ");
           60         }
           61         printf("\n\n");
           62         llist_efree(folders);
           63 
           64         printf("Creating 'testingthis' folder.\n");
           65         if (imap_createfolder(imap, "testingthis"))
           66                 imap_die(imap, "imap_createfolder");
           67         printf("Subscribing to 'testingthis'.\n");
           68         if (imap_subscribe(imap, "testingthis"))
           69                 imap_die(imap, "imap_subscribe");
           70         printf("Unsubscribing from 'testingthis'.\n");
           71         if (imap_unsubscribe(imap, "testingthis"))
           72                 imap_die(imap, "imap_subscribe");
           73         printf("Renaming it to 'testingthis2'.\n");
           74         if (imap_renamefolder(imap, "testingthis", "testingthis2"))
           75                 imap_die(imap, "imap_renamefolder");
           76         printf("Deleting 'testingthis2'.\n");
           77         if (imap_deletefolder(imap, "testingthis2"))
           78                 imap_die(imap, "imap_deletefolder");
           79 
           80         printf("\nSelecting folder 'INBOX'\n");
           81         if (imap_select(imap, "INBOX"))
           82                 imap_die(imap, "imap_select");
           83         printf("Searching for all seen messages.\n");
           84         folders = imap_search(imap, "SEEN");
           85         if (folders == NULL)
           86                 imap_die(imap, "imap_search");
           87         printf("result:\n");
           88         forllist(folders, elem) {
           89                 printf("%s", elem->key);
           90                 if (elem->next != NULL)
           91                         printf(", ");
           92         }
           93         printf("\n\n");
           94 
           95         printf("Adding test ids 6789, 6790, 6791 and 5020.\n");
           96         llist_add(folders, "6789", NULL, 0);
           97         llist_add(folders, "6790", NULL, 0);
           98         llist_add(folders, "6791", NULL, 0);
           99         llist_add(folders, "5020", NULL, 0);
          100         ids = imap_ids2str(folders);
          101         llist_efree(folders);
          102         printf("Sequence in short id form: %s\n", ids);
          103         free(ids);
          104 
          105         folders = imap_statuses(imap);
          106         if (folders == NULL)
          107                 imap_die(imap, "imap_statuses");
          108 
          109         printf("\nstatus:\n");
          110         forllist(folders, status) {
          111                 if (status->key != NULL || status->data == NULL)
          112                         continue;
          113                 elem = llist_get((llist_t *)status->data, "mb");
          114                 printf("%s:\n", (char *)elem->data);
          115                 llist_delelem((llist_t *)status->data, elem);
          116 
          117                 printf("\t");
          118                 forllist((llist_t *)status->data, elem) {
          119                         printf("%s = %s", elem->key, (char *)elem->data);
          120                         if (elem->next != NULL)
          121                                 printf(", ");
          122                 }
          123                 printf("\n");
          124         }
          125         llist_efree(folders);
          126 
          127         idsl = imap_str2ids("INBOX", "15:34 64 c c+2");
          128         flagl = flag_sanitize("seen flagged");
          129         printf("\nSetting 'seen' and 'flagged' on 15:34 64 c c+2."
          130                         " If no 'cur' is set, 'c' will be 0.\n");
          131         if (imap_setflags(imap, idsl, flagl))
          132                 imap_die(imap, "imap_setflags");
          133 
          134         folders = imap_getflags(imap, idsl);
          135         if (folders == NULL)
          136                 imap_die(imap, "imap_getflags");
          137         printf("Flags:\n");
          138         forllist(folders, elem) {
          139                 flag = (llist_t *)elem->data;
          140                 ids = llist_joinstr((llist_t *)flag->last->data, " ");
          141                 printf("%10s\t%20s\n", (char *)flag->first->data, ids);
          142                 free(ids);
          143         }
          144         llist_efree(folders);
          145 
          146         printf("Unsetting 'seen' and 'flagged' on 15:34 64 c c+2.\n");
          147         if (imap_delflags(imap, idsl, flagl))
          148                 imap_die(imap, "imap_delflags");
          149         llist_efree(flagl);
          150 
          151         printf("Setting them as 'seen' again.\n");
          152         flagl = flag_sanitize("seen");
          153         if (imap_setflags(imap, idsl, flagl))
          154                 imap_die(imap, "imap_setflags");
          155         llist_efree(flagl);
          156         llist_efree(idsl);
          157 
          158         printf("\nGetting (BODY) of message 3.\n");
          159         idsl = imap_str2ids("INBOX", "3");
          160         bodies = imap_fetchbody(imap, idsl);
          161         llist_efree(idsl);
          162         if (bodies == NULL)
          163                 imap_die(imap, "imap_fetchpart");
          164         llist_eprint(bodies);
          165         llist_efree(bodies);
          166 
          167         printf("\nGetting part 1 of message 3.\n");
          168         idsl = imap_str2ids("INBOX", "3");
          169         bodies = imap_fetchpart(imap, idsl, "1");
          170         llist_efree(idsl);
          171         if (bodies == NULL)
          172                 imap_die(imap, "imap_fetchpart");
          173         llist_eprint(bodies);
          174         llist_efree(bodies);
          175 
          176         printf("\nGetting headers of message 3.\n");
          177         idsl = imap_str2ids("INBOX", "3");
          178         bodies = imap_fetchheaders(imap, idsl);
          179         llist_efree(idsl);
          180         if (bodies == NULL)
          181                 imap_die(imap, "imap_fetchpart");
          182         llist_eprint(bodies);
          183         llist_efree(bodies);
          184 
          185         printf("\nGetting raw message 3.\n");
          186         idsl = imap_str2ids("INBOX", "3");
          187         bodies = imap_fetchraw(imap, idsl);
          188         llist_efree(idsl);
          189         if (bodies == NULL)
          190                 imap_die(imap, "imap_fetchpart");
          191         llist_eprint(bodies);
          192         elem = llist_get((llist_t *)bodies->first->data, "literal");
          193         if (elem != NULL) {
          194                 mime = mime_parsestr((char *)elem->data, elem->datalen);
          195                 if (mime != NULL) {
          196                         mime_print(mime);
          197                         mime_free(mime);
          198                 }
          199         }
          200         llist_efree(bodies);
          201 
          202         printf("Getting body structure of message 3.\n");
          203         idsl = imap_str2ids("INBOX", "3");
          204         bodies = imap_fetchbody(imap, idsl);
          205         llist_efree(idsl);
          206         if (bodies == NULL)
          207                 imap_die(imap, "imap_fetchbody");
          208         llist_eprint(bodies);
          209         llist_efree(bodies);
          210 
          211         printf("\nNoop.\n");
          212         if (imap_noop(imap))
          213                 imap_die(imap, "imap_noop");
          214         printf("Logout\n");
          215         if (imap_logout(imap))
          216                 imap_die(imap, "imap_logout");
          217         printf("All tests done.\n");
          218 
          219         imap_close(imap);
          220         imap_free(imap);
          221 
          222         return 0;
          223 }
          224