mimetest.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
---
mimetest.c (3439B)
---
1 /*
2 * Copy me if you can.
3 * by 20h
4 *
5 * % gcc -g -std=gnu99 -I.. -lssl -o mimetest mimetest.c ../ind.c ../llist.c \
6 * ../mime.c ../parser.c ../net.c ../strio.c ../base64.c
7 *
8 * % cat ../proto/mime.simple.example | ./mimetest
9 * % cat ../proto/mime.complex.example | ./mimetest
10 */
11
12 #include <unistd.h>
13 #include <stdlib.h>
14 #include <stdio.h>
15 #include <string.h>
16
17 #include "ind.h"
18 #include "llist.h"
19 #include "mime.h"
20
21 int
22 main(int argc, char *argv[])
23 {
24 char *test[] = {
25 "=?utf-8?B?TmV1ZSBOYWNocmljaHQgdm9uIERlaW4gTX"
26 "lTcGFjZSBUZWFtIGJlaSBNeVNwYWNl?=",
27 "(=?ISO-8859-1?Q?a?=)",
28 "(=?ISO-8859-1?Q?a?= b)",
29 "(=?ISO-8859-1?Q?a?= =?ISO-8859-1?Q?b?=)",
30 "(=?ISO-8859-1?Q?a?= =?ISO-8859-1?Q?b?=)",
31 "(=?ISO-8859-1?Q?a?= \r\n =?ISO-8859-1?Q?b?=)",
32 "(=?ISO-8859-1?Q?a_b?=)",
33 "(=?ISO-8859-1?Q?a?= =?ISO-8859-2?Q?_b?=)",
34 "=?US-ASCII*EN?Q?Keith_Moore?= <moore@cs.utk.edu>"
35 };
36 char *hdrs[] = {
37 "Content-Type: application/msword;\r\n"
38 " name=\"=?iso-8859-1?Q?Antrag__F=F6rderung_lehrbe"
39 "zogener_Projekte_=5FV3=2Edoc?=\"\r\n"
40 "Content-Transfer-Encoding: base64\r\n"
41 "Content-Disposition: attachment;\r\n"
42 " filename*=iso-8859-1''Antrag%20%20F%F6rde"
43 "rung%20lehrbezogener%20Projekte%20_V3.doc\r\n"
44 "Content-Description: =?iso-8859-1?Q?Antrag__F"
45 "=F6rderung_lehrbezogener_Projekte_=5FV3=2Edoc?="
46 "(=?ISO-8859-1?Q?a?= =?ISO-8859-1?Q?b?="
47 " =?utf-8?B?TmV1ZSBOYWNocmljaHQgdm9uIERlaW4gTX"
48 "lTcGFjZSBUZWFtIGJlaSBNeVNwYWNl?=)\r\n",
49
50 "Content-Type: application/x-stuff;\r\n"
51 " title*0*=us-ascii'en'This%20is%20even%20more%20\r\n"
52 " title*1*=%2A%2A%2Afun%2A%2A%2A%20\r\n"
53 " title*2=\"isn't it!\"\r\n",
54
55 "Content-Type: application/x-stuff;\r\n"
56 " title*=us-ascii'en-us'This%20is%20%2A%2A%2Afun%2A%2A%2A\r\n",
57
58 "Content-Type: message/external-body; access-type=URL;\r\n"
59 " URL*0=\"ftp://\";\r\n"
60 " URL*1=\"cs.utk.edu/pub/moore/bulk-mailer/bulk-mailer."
61 "tar\"\r\n",
62
63 "Content-Type: message/external-body; access-type=URL;\r\n"
64 " URL=\"ftp://cs.utk.edu/pub/moore/bulk-mailer/bulk-mai"
65 "ler.tar\"\r\n"
66 };
67
68 char *str;
69 int len, i;
70 mime_t *mime;
71 llistelem_t *hdr, *param;
72 llist_t *paraml;
73
74 if (argc < 2 || !strcmp(argv[1], "-d")) {
75 str = readstdin(&len);
76 mime = mime_parsebuf(str, len);
77 free(str);
78
79 printf("\nmessage:\n");
80 mime_print(mime);
81
82 printf("Getting Subject:\n");
83 hdr = llist_ciget(mime->hdrs, "subject");
84 if (hdr == NULL)
85 die("Could not find 'Subject' header in mail!\n");
86 printf("Subject: %s\n", (char *)hdr->data);
87
88 mime_free(mime);
89 }
90 if (argc > 1)
91 return 0;
92
93 for (i = 0; i < nelem(test)-1; i++) {
94 printf("\ntest%d: %s\n", i, test[i]);
95 str = mime_decodeheader(test[i]);
96 printf("result: %s\n", str);
97 free(str);
98 }
99
100 for (i = 0; i < nelem(hdrs); i++) {
101 printf("\nhdrs%d: %s\n", i, hdrs[i]);
102 mime = mime_parsebuf(hdrs[i], strlen(hdrs[i]));
103 if (mime == NULL) {
104 printf("Test failed!\n");
105 continue;
106 }
107
108 printf("Result:\n");
109 mime_print(mime);
110
111 forllist(mime->hdrs, hdr) {
112 printf("\n");
113 paraml = mime_parseheader((char *)hdr->data);
114
115 printf("Param %s:\n", hdr->key);
116 forllist(paraml, param) {
117 if (param->data != NULL) {
118 str = mime_decodeheader(
119 (char *)param->data);
120 printf("%s = %s\n", param->key, str);
121 } else {
122 str = mime_decodeheader(param->key);
123 printf("%s\n", str);
124 }
125 free(str);
126 }
127 llist_free(paraml);
128 }
129
130 mime_free(mime);
131 }
132
133 return 0;
134 }
135