Diffstat (limited to 'noncore/net/mail/libmailwrapper/imapwrapper.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/net/mail/libmailwrapper/imapwrapper.cpp | 302 |
1 files changed, 186 insertions, 116 deletions
diff --git a/noncore/net/mail/libmailwrapper/imapwrapper.cpp b/noncore/net/mail/libmailwrapper/imapwrapper.cpp index 7b78499..1acc036 100644 --- a/noncore/net/mail/libmailwrapper/imapwrapper.cpp +++ b/noncore/net/mail/libmailwrapper/imapwrapper.cpp | |||
@@ -1,84 +1,103 @@ | |||
1 | 1 | ||
2 | #include <stdlib.h> | 2 | #include <stdlib.h> |
3 | 3 | ||
4 | #include "imapwrapper.h" | 4 | #include "imapwrapper.h" |
5 | 5 | #include <libetpan/mailimap.h> | |
6 | 6 | ||
7 | IMAPwrapper::IMAPwrapper( IMAPaccount *a ) | 7 | IMAPwrapper::IMAPwrapper( IMAPaccount *a ) |
8 | { | 8 | { |
9 | account = a; | 9 | account = a; |
10 | m_imap = 0; | ||
10 | } | 11 | } |
11 | 12 | ||
12 | void imap_progress( size_t current, size_t maximum ) | 13 | IMAPwrapper::~IMAPwrapper() |
14 | { | ||
15 | logout(); | ||
16 | } | ||
17 | |||
18 | void IMAPwrapper::imap_progress( size_t current, size_t maximum ) | ||
13 | { | 19 | { |
14 | qDebug( "IMAP: %i of %i", current, maximum ); | 20 | qDebug( "IMAP: %i of %i", current, maximum ); |
15 | } | 21 | } |
16 | 22 | ||
17 | void IMAPwrapper::listMessages(const QString&mailbox,Maillist&target ) | 23 | void IMAPwrapper::login() |
18 | { | 24 | { |
19 | const char *server, *user, *pass, *mb; | 25 | logout(); |
26 | const char *server, *user, *pass; | ||
20 | uint16_t port; | 27 | uint16_t port; |
21 | int err = MAILIMAP_NO_ERROR; | 28 | int err = MAILIMAP_NO_ERROR; |
22 | clist *result; | ||
23 | clistcell *current; | ||
24 | mailimap_fetch_att *fetchAtt,*fetchAttFlags,*fetchAttDate; | ||
25 | mailimap_fetch_type *fetchType; | ||
26 | mailimap_set *set; | ||
27 | 29 | ||
28 | mb = mailbox.latin1(); | ||
29 | server = account->getServer().latin1(); | 30 | server = account->getServer().latin1(); |
30 | port = account->getPort().toUInt(); | 31 | port = account->getPort().toUInt(); |
31 | user = account->getUser().latin1(); | 32 | user = account->getUser().latin1(); |
32 | pass = account->getPassword().latin1(); | 33 | pass = account->getPassword().latin1(); |
33 | 34 | ||
34 | mailimap *imap = mailimap_new( 20, &imap_progress ); | 35 | m_imap = mailimap_new( 20, &imap_progress ); |
35 | if ( imap == NULL ) { | ||
36 | qDebug("IMAP Memory error"); | ||
37 | return; | ||
38 | } | ||
39 | |||
40 | /* connect */ | 36 | /* connect */ |
41 | err = mailimap_socket_connect( imap, (char*)server, port ); | 37 | err = mailimap_socket_connect( m_imap, (char*)server, port ); |
42 | if ( err != MAILIMAP_NO_ERROR && | 38 | if ( err != MAILIMAP_NO_ERROR && |
43 | err != MAILIMAP_NO_ERROR_AUTHENTICATED && | 39 | err != MAILIMAP_NO_ERROR_AUTHENTICATED && |
44 | err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) { | 40 | err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) { |
45 | qDebug("error connecting server: %s",imap->response); | 41 | qDebug("error connecting server: %s",m_imap->response); |
46 | mailimap_free( imap ); | 42 | mailimap_free( m_imap ); |
43 | m_imap = 0; | ||
47 | return; | 44 | return; |
48 | } | 45 | } |
49 | 46 | ||
50 | /* login */ | 47 | /* login */ |
51 | err = mailimap_login_simple( imap, (char*)user, (char*)pass ); | 48 | err = mailimap_login_simple( m_imap, (char*)user, (char*)pass ); |
52 | if ( err != MAILIMAP_NO_ERROR ) { | 49 | if ( err != MAILIMAP_NO_ERROR ) { |
53 | qDebug("error logging in imap: %s",imap->response); | 50 | qDebug("error logging in imap: %s",m_imap->response); |
54 | err = mailimap_close( imap ); | 51 | err = mailimap_close( m_imap ); |
55 | mailimap_free( imap ); | 52 | mailimap_free( m_imap ); |
56 | return; | 53 | m_imap = 0; |
57 | } | 54 | } |
55 | } | ||
56 | |||
57 | void IMAPwrapper::logout() | ||
58 | { | ||
59 | int err = MAILIMAP_NO_ERROR; | ||
60 | if (!m_imap) return; | ||
61 | err = mailimap_logout( m_imap ); | ||
62 | err = mailimap_close( m_imap ); | ||
63 | mailimap_free( m_imap ); | ||
64 | m_imap = 0; | ||
65 | } | ||
66 | |||
67 | void IMAPwrapper::listMessages(const QString&mailbox,Maillist&target ) | ||
68 | { | ||
69 | const char *mb; | ||
70 | int err = MAILIMAP_NO_ERROR; | ||
71 | clist *result; | ||
72 | clistcell *current; | ||
73 | mailimap_fetch_att *fetchAtt,*fetchAttFlags,*fetchAttDate; | ||
74 | mailimap_fetch_type *fetchType; | ||
75 | mailimap_set *set; | ||
58 | 76 | ||
77 | mb = mailbox.latin1(); | ||
78 | login(); | ||
79 | if (!m_imap) { | ||
80 | return; | ||
81 | } | ||
59 | /* select mailbox READONLY for operations */ | 82 | /* select mailbox READONLY for operations */ |
60 | err = mailimap_examine( imap, (char*)mb); | 83 | err = mailimap_examine( m_imap, (char*)mb); |
61 | if ( err != MAILIMAP_NO_ERROR ) { | 84 | if ( err != MAILIMAP_NO_ERROR ) { |
62 | qDebug("error selecting mailbox: %s",imap->response); | 85 | qDebug("error selecting mailbox: %s",m_imap->response); |
63 | err = mailimap_logout( imap ); | 86 | logout(); |
64 | err = mailimap_close( imap ); | ||
65 | mailimap_free( imap ); | ||
66 | return; | 87 | return; |
67 | } | 88 | } |
68 | 89 | ||
69 | int last = imap->selection_info->exists; | 90 | int last = m_imap->selection_info->exists; |
91 | |||
70 | if (last == 0) { | 92 | if (last == 0) { |
71 | qDebug("mailbox has no mails"); | 93 | qDebug("mailbox has no mails"); |
72 | err = mailimap_logout( imap ); | 94 | logout(); |
73 | err = mailimap_close( imap ); | ||
74 | mailimap_free( imap ); | ||
75 | return; | 95 | return; |
76 | } | 96 | } |
77 | 97 | ||
78 | |||
79 | result = clist_new(); | 98 | result = clist_new(); |
80 | /* the range has to start at 1!!! not with 0!!!! */ | 99 | /* the range has to start at 1!!! not with 0!!!! */ |
81 | set = mailimap_set_new_interval( 1, last ); | 100 | set = mailimap_set_new_interval( 1, last ); |
82 | fetchAtt = mailimap_fetch_att_new_envelope(); | 101 | fetchAtt = mailimap_fetch_att_new_envelope(); |
83 | fetchAttFlags = mailimap_fetch_att_new_flags(); | 102 | fetchAttFlags = mailimap_fetch_att_new_flags(); |
84 | fetchAttDate = mailimap_fetch_att_new_internaldate(); | 103 | fetchAttDate = mailimap_fetch_att_new_internaldate(); |
@@ -86,13 +105,13 @@ void IMAPwrapper::listMessages(const QString&mailbox,Maillist&target ) | |||
86 | //fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt); | 105 | //fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt); |
87 | fetchType = mailimap_fetch_type_new_fetch_att_list_empty(); | 106 | fetchType = mailimap_fetch_type_new_fetch_att_list_empty(); |
88 | mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAtt); | 107 | mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAtt); |
89 | mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAttFlags); | 108 | mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAttFlags); |
90 | mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAttDate); | 109 | mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAttDate); |
91 | 110 | ||
92 | err = mailimap_fetch( imap, set, fetchType, &result ); | 111 | err = mailimap_fetch( m_imap, set, fetchType, &result ); |
93 | mailimap_set_free( set ); | 112 | mailimap_set_free( set ); |
94 | /* cleans up the fetch_att's too! */ | 113 | /* cleans up the fetch_att's too! */ |
95 | mailimap_fetch_type_free( fetchType ); | 114 | mailimap_fetch_type_free( fetchType ); |
96 | 115 | ||
97 | QString date,subject,from; | 116 | QString date,subject,from; |
98 | 117 | ||
@@ -103,95 +122,71 @@ void IMAPwrapper::listMessages(const QString&mailbox,Maillist&target ) | |||
103 | while ( current != 0 ) { | 122 | while ( current != 0 ) { |
104 | ++i; | 123 | ++i; |
105 | msg_att = (mailimap_msg_att*)current->data; | 124 | msg_att = (mailimap_msg_att*)current->data; |
106 | RecMail*m = parse_list_result(msg_att); | 125 | RecMail*m = parse_list_result(msg_att); |
107 | if (m) { | 126 | if (m) { |
108 | m->setNumber(i); | 127 | m->setNumber(i); |
128 | m->setMbox(mailbox); | ||
109 | target.append(m); | 129 | target.append(m); |
110 | } | 130 | } |
111 | current = current->next; | 131 | current = current->next; |
112 | } | 132 | } |
113 | } else { | 133 | } else { |
114 | qDebug("Error fetching headers: %s",imap->response); | 134 | qDebug("Error fetching headers: %s",m_imap->response); |
115 | } | 135 | } |
116 | 136 | logout(); | |
117 | err = mailimap_logout( imap ); | ||
118 | err = mailimap_close( imap ); | ||
119 | clist_free(result); | 137 | clist_free(result); |
120 | mailimap_free( imap ); | ||
121 | } | 138 | } |
122 | 139 | ||
123 | QList<IMAPFolder>* IMAPwrapper::listFolders() | 140 | QList<IMAPFolder>* IMAPwrapper::listFolders() |
124 | { | 141 | { |
125 | const char *server, *user, *pass, *path, *mask; | 142 | const char *path, *mask; |
126 | uint16_t port; | ||
127 | int err = MAILIMAP_NO_ERROR; | 143 | int err = MAILIMAP_NO_ERROR; |
128 | clist *result; | 144 | clist *result; |
129 | clistcell *current; | 145 | clistcell *current; |
130 | 146 | ||
131 | QList<IMAPFolder> * folders = new QList<IMAPFolder>(); | 147 | QList<IMAPFolder> * folders = new QList<IMAPFolder>(); |
132 | folders->setAutoDelete( true ); | 148 | folders->setAutoDelete( true ); |
133 | 149 | login(); | |
134 | server = account->getServer().latin1(); | 150 | if (!m_imap) { |
135 | port = account->getPort().toUInt(); | ||
136 | user = account->getUser().latin1(); | ||
137 | pass = account->getPassword().latin1(); | ||
138 | path = account->getPrefix().latin1(); | ||
139 | |||
140 | mailimap *imap = mailimap_new( 20, &imap_progress ); | ||
141 | if ( imap == NULL ) { | ||
142 | qDebug("error mailimap_new"); | ||
143 | return folders; | 151 | return folders; |
144 | } | 152 | } |
145 | |||
146 | err = mailimap_socket_connect( imap, (char*)server, port ); | ||
147 | if ( err != MAILIMAP_NO_ERROR && | ||
148 | err != MAILIMAP_NO_ERROR_AUTHENTICATED && | ||
149 | err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) { | ||
150 | mailimap_free(imap); | ||
151 | qDebug("error imap_socket_connect: %s",imap->response); | ||
152 | return folders; | ||
153 | } | ||
154 | 153 | ||
155 | err = mailimap_login_simple( imap, (char*)user, (char*)pass ); | ||
156 | if ( err != MAILIMAP_NO_ERROR ) { | ||
157 | mailimap_free(imap); | ||
158 | qDebug("error logging in: %s",imap->response); | ||
159 | return folders; | ||
160 | } | ||
161 | /* | 154 | /* |
162 | * First we have to check for INBOX 'cause it sometimes it's not inside the path. | 155 | * First we have to check for INBOX 'cause it sometimes it's not inside the path. |
163 | * We must not forget to filter them out in next loop! | 156 | * We must not forget to filter them out in next loop! |
164 | * it seems like ugly code. and yes - it is ugly code. but the best way. | 157 | * it seems like ugly code. and yes - it is ugly code. but the best way. |
165 | */ | 158 | */ |
166 | QString temp; | 159 | QString temp; |
167 | mask = "INBOX" ; | 160 | mask = "INBOX" ; |
168 | result = clist_new(); | 161 | result = clist_new(); |
169 | mailimap_mailbox_list *list; | 162 | mailimap_mailbox_list *list; |
170 | err = mailimap_list( imap, (char*)"", (char*)mask, &result ); | 163 | err = mailimap_list( m_imap, (char*)"", (char*)mask, &result ); |
171 | if ( err == MAILIMAP_NO_ERROR ) { | 164 | if ( err == MAILIMAP_NO_ERROR ) { |
172 | current = result->first; | 165 | current = result->first; |
173 | for ( int i = result->count; i > 0; i-- ) { | 166 | for ( int i = result->count; i > 0; i-- ) { |
174 | list = (mailimap_mailbox_list *) current->data; | 167 | list = (mailimap_mailbox_list *) current->data; |
175 | // it is better use the deep copy mechanism of qt itself | 168 | // it is better use the deep copy mechanism of qt itself |
176 | // instead of using strdup! | 169 | // instead of using strdup! |
177 | temp = list->mb; | 170 | temp = list->mb; |
178 | folders->append( new IMAPFolder(temp)); | 171 | folders->append( new IMAPFolder(temp)); |
179 | current = current->next; | 172 | current = current->next; |
180 | } | 173 | } |
181 | } else { | 174 | } else { |
182 | qDebug("error fetching folders: %s",imap->response); | 175 | qDebug("error fetching folders: %s",m_imap->response); |
183 | } | 176 | } |
184 | mailimap_list_result_free( result ); | 177 | mailimap_list_result_free( result ); |
185 | 178 | ||
186 | /* | 179 | /* |
187 | * second stage - get the other then inbox folders | 180 | * second stage - get the other then inbox folders |
188 | */ | 181 | */ |
189 | mask = "*" ; | 182 | mask = "*" ; |
183 | path = account->getPrefix().latin1(); | ||
190 | result = clist_new(); | 184 | result = clist_new(); |
191 | err = mailimap_list( imap, (char*)path, (char*)mask, &result ); | 185 | qDebug(path); |
186 | err = mailimap_list( m_imap, (char*)path, (char*)mask, &result ); | ||
192 | if ( err == MAILIMAP_NO_ERROR ) { | 187 | if ( err == MAILIMAP_NO_ERROR ) { |
193 | current = result->first; | 188 | current = result->first; |
194 | for ( int i = result->count; i > 0; i-- ) { | 189 | for ( int i = result->count; i > 0; i-- ) { |
195 | list = (mailimap_mailbox_list *) current->data; | 190 | list = (mailimap_mailbox_list *) current->data; |
196 | // it is better use the deep copy mechanism of qt itself | 191 | // it is better use the deep copy mechanism of qt itself |
197 | // instead of using strdup! | 192 | // instead of using strdup! |
@@ -200,18 +195,15 @@ QList<IMAPFolder>* IMAPwrapper::listFolders() | |||
200 | if (temp.lower()=="inbox") | 195 | if (temp.lower()=="inbox") |
201 | continue; | 196 | continue; |
202 | folders->append(new IMAPFolder(temp)); | 197 | folders->append(new IMAPFolder(temp)); |
203 | 198 | ||
204 | } | 199 | } |
205 | } else { | 200 | } else { |
206 | qDebug("error fetching folders"); | 201 | qDebug("error fetching folders %s",m_imap->response); |
207 | } | 202 | } |
208 | mailimap_list_result_free( result ); | 203 | mailimap_list_result_free( result ); |
209 | err = mailimap_logout( imap ); | ||
210 | err = mailimap_close( imap ); | ||
211 | mailimap_free( imap ); | ||
212 | return folders; | 204 | return folders; |
213 | } | 205 | } |
214 | 206 | ||
215 | RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att) | 207 | RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att) |
216 | { | 208 | { |
217 | RecMail * m = 0; | 209 | RecMail * m = 0; |
@@ -270,13 +262,12 @@ RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att) | |||
270 | default: | 262 | default: |
271 | break; | 263 | break; |
272 | } | 264 | } |
273 | } else if (cflag->type==MAILIMAP_FLAG_FETCH_RECENT) { | 265 | } else if (cflag->type==MAILIMAP_FLAG_FETCH_RECENT) { |
274 | mFlags.setBit(FLAG_RECENT); | 266 | mFlags.setBit(FLAG_RECENT); |
275 | } | 267 | } |
276 | |||
277 | cf = cf->next; | 268 | cf = cf->next; |
278 | } | 269 | } |
279 | continue; | 270 | continue; |
280 | } | 271 | } |
281 | if ( item->msg_att_static->type == MAILIMAP_MSG_ATT_RFC822_HEADER ) { | 272 | if ( item->msg_att_static->type == MAILIMAP_MSG_ATT_RFC822_HEADER ) { |
282 | qDebug( "header: \n%s", item->msg_att_static->rfc822_header ); | 273 | qDebug( "header: \n%s", item->msg_att_static->rfc822_header ); |
@@ -334,87 +325,166 @@ RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att) | |||
334 | if (m) { | 325 | if (m) { |
335 | m->setFlags(mFlags); | 326 | m->setFlags(mFlags); |
336 | } | 327 | } |
337 | return m; | 328 | return m; |
338 | } | 329 | } |
339 | 330 | ||
340 | QString IMAPwrapper::fetchBody(const QString & mailbox,const RecMail&mail) | 331 | #if 1 |
332 | QString IMAPwrapper::fetchBody(const RecMail&mail) | ||
341 | { | 333 | { |
342 | QString body = ""; | 334 | QString body = ""; |
343 | const char *server, *user, *pass, *mb; | 335 | const char *mb; |
344 | uint16_t port; | ||
345 | int err = MAILIMAP_NO_ERROR; | 336 | int err = MAILIMAP_NO_ERROR; |
346 | clist *result; | 337 | clist *result; |
347 | clistcell *current; | 338 | clistcell *current; |
348 | mailimap_fetch_att *fetchAtt; | 339 | mailimap_fetch_att *fetchAtt; |
349 | mailimap_fetch_type *fetchType; | 340 | mailimap_fetch_type *fetchType; |
350 | mailimap_set *set; | 341 | mailimap_set *set; |
351 | 342 | ||
352 | mb = mailbox.latin1(); | 343 | mb = mail.getMbox().latin1(); |
353 | server = account->getServer().latin1(); | ||
354 | port = account->getPort().toUInt(); | ||
355 | user = account->getUser().latin1(); | ||
356 | pass = account->getPassword().latin1(); | ||
357 | 344 | ||
358 | mailimap *imap = mailimap_new( 20, &imap_progress ); | 345 | login(); |
359 | if ( imap == NULL ) { | 346 | if (!m_imap) { |
360 | qDebug("IMAP Memory error"); | 347 | return body; |
348 | } | ||
349 | /* select mailbox READONLY for operations */ | ||
350 | err = mailimap_examine( m_imap, (char*)mb); | ||
351 | if ( err != MAILIMAP_NO_ERROR ) { | ||
352 | qDebug("error selecting mailbox: %s",m_imap->response); | ||
353 | logout(); | ||
361 | return body; | 354 | return body; |
362 | } | 355 | } |
356 | result = clist_new(); | ||
357 | /* the range has to start at 1!!! not with 0!!!! */ | ||
358 | set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() ); | ||
359 | fetchAtt = mailimap_fetch_att_new_rfc822_text(); | ||
360 | fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt); | ||
361 | err = mailimap_fetch( m_imap, set, fetchType, &result ); | ||
362 | mailimap_set_free( set ); | ||
363 | mailimap_fetch_type_free( fetchType ); | ||
364 | |||
365 | if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) { | ||
366 | mailimap_msg_att * msg_att; | ||
367 | msg_att = (mailimap_msg_att*)current->data; | ||
368 | mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->list->first->data; | ||
363 | 369 | ||
364 | /* connect */ | 370 | if (item->msg_att_static && item->msg_att_static->rfc822_text) { |
365 | err = mailimap_socket_connect( imap, (char*)server, port ); | 371 | body = item->msg_att_static->rfc822_text; |
366 | if ( err != MAILIMAP_NO_ERROR && | 372 | } |
367 | err != MAILIMAP_NO_ERROR_AUTHENTICATED && | 373 | } else { |
368 | err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) { | 374 | qDebug("error fetching text: %s",m_imap->response); |
369 | qDebug("error connecting server: %s",imap->response); | ||
370 | mailimap_free( imap ); | ||
371 | return body; | ||
372 | } | 375 | } |
373 | 376 | ||
374 | /* login */ | 377 | clist_free(result); |
375 | err = mailimap_login_simple( imap, (char*)user, (char*)pass ); | 378 | logout(); |
376 | if ( err != MAILIMAP_NO_ERROR ) { | 379 | return body; |
377 | qDebug("error logging in imap: %s",imap->response); | 380 | } |
378 | err = mailimap_close( imap ); | 381 | |
379 | mailimap_free( imap ); | 382 | #else |
383 | QString IMAPwrapper::fetchBody(const RecMail&mail) | ||
384 | { | ||
385 | QString body = ""; | ||
386 | const char *mb; | ||
387 | int err = MAILIMAP_NO_ERROR; | ||
388 | clist *result; | ||
389 | clistcell *current; | ||
390 | mailimap_fetch_att *fetchAtt; | ||
391 | mailimap_fetch_type *fetchType; | ||
392 | mailimap_set *set; | ||
393 | mailimap_body*body_desc; | ||
394 | |||
395 | mb = mail.getMbox().latin1(); | ||
396 | |||
397 | login(); | ||
398 | if (!m_imap) { | ||
380 | return body; | 399 | return body; |
381 | } | 400 | } |
382 | |||
383 | /* select mailbox READONLY for operations */ | 401 | /* select mailbox READONLY for operations */ |
384 | err = mailimap_examine( imap, (char*)mb); | 402 | err = mailimap_examine( m_imap, (char*)mb); |
385 | if ( err != MAILIMAP_NO_ERROR ) { | 403 | if ( err != MAILIMAP_NO_ERROR ) { |
386 | qDebug("error selecting mailbox: %s",imap->response); | 404 | qDebug("error selecting mailbox: %s",m_imap->response); |
387 | err = mailimap_logout( imap ); | 405 | logout(); |
388 | err = mailimap_close( imap ); | 406 | return body; |
389 | mailimap_free( imap ); | 407 | } |
408 | result = clist_new(); | ||
409 | /* the range has to start at 1!!! not with 0!!!! */ | ||
410 | set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() ); | ||
411 | fetchAtt = mailimap_fetch_att_new_body(); | ||
412 | fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt); | ||
413 | err = mailimap_fetch( m_imap, set, fetchType, &result ); | ||
414 | mailimap_set_free( set ); | ||
415 | mailimap_fetch_type_free( fetchType ); | ||
416 | |||
417 | if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) { | ||
418 | mailimap_msg_att * msg_att; | ||
419 | msg_att = (mailimap_msg_att*)current->data; | ||
420 | mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->list->first->data; | ||
421 | body_desc = item->msg_att_static->body; | ||
422 | if (body_desc->type==MAILIMAP_BODY_1PART) { | ||
423 | body = searchBodyText(mail,body_desc->body_1part); | ||
424 | } else { | ||
425 | } | ||
426 | |||
427 | } else { | ||
428 | qDebug("error fetching body: %s",m_imap->response); | ||
429 | } | ||
430 | |||
431 | clist_free(result); | ||
432 | logout(); | ||
433 | return body; | ||
434 | } | ||
435 | #endif | ||
436 | |||
437 | QString IMAPwrapper::searchBodyText(const RecMail&mail,mailimap_body_type_1part*mailDescription) | ||
438 | { | ||
439 | QString Body=""; | ||
440 | if (!mailDescription) { | ||
441 | return Body; | ||
442 | } | ||
443 | switch (mailDescription->type) { | ||
444 | case MAILIMAP_BODY_TYPE_1PART_TEXT: | ||
445 | return getPlainBody(mail); | ||
446 | break; | ||
447 | default: | ||
448 | break; | ||
449 | } | ||
450 | return Body; | ||
451 | } | ||
452 | |||
453 | QString IMAPwrapper::getPlainBody(const RecMail&mail) | ||
454 | { | ||
455 | QString body = ""; | ||
456 | const char *mb; | ||
457 | int err = MAILIMAP_NO_ERROR; | ||
458 | clist *result; | ||
459 | clistcell *current; | ||
460 | mailimap_fetch_att *fetchAtt; | ||
461 | mailimap_fetch_type *fetchType; | ||
462 | mailimap_set *set; | ||
463 | |||
464 | mb = mail.getMbox().latin1(); | ||
465 | |||
466 | if (!m_imap) { | ||
390 | return body; | 467 | return body; |
391 | } | 468 | } |
392 | result = clist_new(); | 469 | result = clist_new(); |
393 | /* the range has to start at 1!!! not with 0!!!! */ | 470 | /* the range has to start at 1!!! not with 0!!!! */ |
394 | set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() ); | 471 | set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() ); |
395 | fetchAtt = mailimap_fetch_att_new_rfc822_text(); | 472 | fetchAtt = mailimap_fetch_att_new_rfc822_text(); |
396 | fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt); | 473 | fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt); |
397 | err = mailimap_fetch( imap, set, fetchType, &result ); | 474 | err = mailimap_fetch( m_imap, set, fetchType, &result ); |
398 | mailimap_set_free( set ); | 475 | mailimap_set_free( set ); |
399 | mailimap_fetch_type_free( fetchType ); | 476 | mailimap_fetch_type_free( fetchType ); |
400 | 477 | ||
401 | if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) { | 478 | if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) { |
402 | mailimap_msg_att * msg_att; | 479 | mailimap_msg_att * msg_att; |
403 | msg_att = (mailimap_msg_att*)current->data; | 480 | msg_att = (mailimap_msg_att*)current->data; |
404 | mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->list->first->data; | 481 | mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->list->first->data; |
405 | |||
406 | if (item->msg_att_static && item->msg_att_static->rfc822_text) { | 482 | if (item->msg_att_static && item->msg_att_static->rfc822_text) { |
407 | body = item->msg_att_static->rfc822_text; | 483 | body = item->msg_att_static->rfc822_text; |
408 | } | 484 | } |
409 | } else { | 485 | } else { |
410 | qDebug("error fetching text: %s",imap->response); | 486 | qDebug("error fetching text: %s",m_imap->response); |
411 | } | 487 | } |
412 | |||
413 | err = mailimap_logout( imap ); | ||
414 | err = mailimap_close( imap ); | ||
415 | mailimap_free( imap ); | ||
416 | clist_free(result); | 488 | clist_free(result); |
417 | |||
418 | return body; | 489 | return body; |
419 | } | 490 | } |
420 | |||