Diffstat (limited to 'noncore/net/mail/libmailwrapper') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/net/mail/libmailwrapper/imapwrapper.cpp | 60 |
1 files changed, 33 insertions, 27 deletions
diff --git a/noncore/net/mail/libmailwrapper/imapwrapper.cpp b/noncore/net/mail/libmailwrapper/imapwrapper.cpp index eae85a7..dc02780 100644 --- a/noncore/net/mail/libmailwrapper/imapwrapper.cpp +++ b/noncore/net/mail/libmailwrapper/imapwrapper.cpp | |||
@@ -27,16 +27,22 @@ void IMAPwrapper::login() | |||
27 | const char *server, *user, *pass; | 27 | const char *server, *user, *pass; |
28 | uint16_t port; | 28 | uint16_t port; |
29 | int err = MAILIMAP_NO_ERROR; | 29 | int err = MAILIMAP_NO_ERROR; |
30 | 30 | ||
31 | server = account->getServer().latin1(); | 31 | server = account->getServer().latin1(); |
32 | port = account->getPort().toUInt(); | 32 | port = account->getPort().toUInt(); |
33 | user = account->getUser().latin1(); | 33 | user = account->getUser().latin1(); |
34 | pass = account->getPassword().latin1(); | 34 | pass = account->getPassword().latin1(); |
35 | 35 | ||
36 | m_imap = mailimap_new( 20, &imap_progress ); | 36 | m_imap = mailimap_new( 20, &imap_progress ); |
37 | /* connect */ | 37 | /* connect */ |
38 | err = mailimap_socket_connect( m_imap, (char*)server, port ); | 38 | // err = mailimap_socket_connect( m_imap, (char*)server, port ); |
39 | if ( err != MAILIMAP_NO_ERROR && | 39 | if (account->getSSL()) { |
40 | err = mailimap_ssl_connect( m_imap, (char*)server, port ); | ||
41 | } else { | ||
42 | err = mailimap_socket_connect( m_imap, (char*)server, port ); | ||
43 | } | ||
44 | |||
45 | if ( err != MAILIMAP_NO_ERROR && | ||
40 | err != MAILIMAP_NO_ERROR_AUTHENTICATED && | 46 | err != MAILIMAP_NO_ERROR_AUTHENTICATED && |
41 | err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) { | 47 | err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) { |
42 | qDebug("error connecting server: %s",m_imap->response); | 48 | qDebug("error connecting server: %s",m_imap->response); |
@@ -44,7 +50,7 @@ void IMAPwrapper::login() | |||
44 | m_imap = 0; | 50 | m_imap = 0; |
45 | return; | 51 | return; |
46 | } | 52 | } |
47 | 53 | ||
48 | /* login */ | 54 | /* login */ |
49 | err = mailimap_login_simple( m_imap, (char*)user, (char*)pass ); | 55 | err = mailimap_login_simple( m_imap, (char*)user, (char*)pass ); |
50 | if ( err != MAILIMAP_NO_ERROR ) { | 56 | if ( err != MAILIMAP_NO_ERROR ) { |
@@ -74,7 +80,7 @@ void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target ) | |||
74 | mailimap_fetch_att *fetchAtt,*fetchAttFlags,*fetchAttDate; | 80 | mailimap_fetch_att *fetchAtt,*fetchAttFlags,*fetchAttDate; |
75 | mailimap_fetch_type *fetchType; | 81 | mailimap_fetch_type *fetchType; |
76 | mailimap_set *set; | 82 | mailimap_set *set; |
77 | 83 | ||
78 | mb = mailbox.latin1(); | 84 | mb = mailbox.latin1(); |
79 | login(); | 85 | login(); |
80 | if (!m_imap) { | 86 | if (!m_imap) { |
@@ -95,20 +101,20 @@ void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target ) | |||
95 | logout(); | 101 | logout(); |
96 | return; | 102 | return; |
97 | } | 103 | } |
98 | 104 | ||
99 | result = clist_new(); | 105 | result = clist_new(); |
100 | /* the range has to start at 1!!! not with 0!!!! */ | 106 | /* the range has to start at 1!!! not with 0!!!! */ |
101 | set = mailimap_set_new_interval( 1, last ); | 107 | set = mailimap_set_new_interval( 1, last ); |
102 | fetchAtt = mailimap_fetch_att_new_envelope(); | 108 | fetchAtt = mailimap_fetch_att_new_envelope(); |
103 | fetchAttFlags = mailimap_fetch_att_new_flags(); | 109 | fetchAttFlags = mailimap_fetch_att_new_flags(); |
104 | fetchAttDate = mailimap_fetch_att_new_internaldate(); | 110 | fetchAttDate = mailimap_fetch_att_new_internaldate(); |
105 | 111 | ||
106 | //fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt); | 112 | //fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt); |
107 | fetchType = mailimap_fetch_type_new_fetch_att_list_empty(); | 113 | fetchType = mailimap_fetch_type_new_fetch_att_list_empty(); |
108 | mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAtt); | 114 | mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAtt); |
109 | mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAttFlags); | 115 | mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAttFlags); |
110 | mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAttDate); | 116 | mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAttDate); |
111 | 117 | ||
112 | err = mailimap_fetch( m_imap, set, fetchType, &result ); | 118 | err = mailimap_fetch( m_imap, set, fetchType, &result ); |
113 | mailimap_set_free( set ); | 119 | mailimap_set_free( set ); |
114 | /* cleans up the fetch_att's too! */ | 120 | /* cleans up the fetch_att's too! */ |
@@ -144,14 +150,14 @@ QList<IMAPFolder>* IMAPwrapper::listFolders() | |||
144 | int err = MAILIMAP_NO_ERROR; | 150 | int err = MAILIMAP_NO_ERROR; |
145 | clist *result; | 151 | clist *result; |
146 | clistcell *current; | 152 | clistcell *current; |
147 | 153 | ||
148 | QList<IMAPFolder> * folders = new QList<IMAPFolder>(); | 154 | QList<IMAPFolder> * folders = new QList<IMAPFolder>(); |
149 | folders->setAutoDelete( true ); | 155 | folders->setAutoDelete( true ); |
150 | login(); | 156 | login(); |
151 | if (!m_imap) { | 157 | if (!m_imap) { |
152 | return folders; | 158 | return folders; |
153 | } | 159 | } |
154 | 160 | ||
155 | /* | 161 | /* |
156 | * First we have to check for INBOX 'cause it sometimes it's not inside the path. | 162 | * First we have to check for INBOX 'cause it sometimes it's not inside the path. |
157 | * We must not forget to filter them out in next loop! | 163 | * We must not forget to filter them out in next loop! |
@@ -176,11 +182,11 @@ QList<IMAPFolder>* IMAPwrapper::listFolders() | |||
176 | qDebug("error fetching folders: %s",m_imap->response); | 182 | qDebug("error fetching folders: %s",m_imap->response); |
177 | } | 183 | } |
178 | mailimap_list_result_free( result ); | 184 | mailimap_list_result_free( result ); |
179 | 185 | ||
180 | /* | 186 | /* |
181 | * second stage - get the other then inbox folders | 187 | * second stage - get the other then inbox folders |
182 | */ | 188 | */ |
183 | mask = "*" ; | 189 | mask = "*" ; |
184 | path = account->getPrefix().latin1(); | 190 | path = account->getPrefix().latin1(); |
185 | result = clist_new(); | 191 | result = clist_new(); |
186 | qDebug(path); | 192 | qDebug(path); |
@@ -196,7 +202,7 @@ QList<IMAPFolder>* IMAPwrapper::listFolders() | |||
196 | if (temp.lower()=="inbox") | 202 | if (temp.lower()=="inbox") |
197 | continue; | 203 | continue; |
198 | folders->append(new IMAPFolder(temp)); | 204 | folders->append(new IMAPFolder(temp)); |
199 | 205 | ||
200 | } | 206 | } |
201 | } else { | 207 | } else { |
202 | qDebug("error fetching folders %s",m_imap->response); | 208 | qDebug("error fetching folders %s",m_imap->response); |
@@ -214,7 +220,7 @@ RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att) | |||
214 | mailimap_flag_fetch*cflag; | 220 | mailimap_flag_fetch*cflag; |
215 | QBitArray mFlags(7); | 221 | QBitArray mFlags(7); |
216 | QStringList addresslist; | 222 | QStringList addresslist; |
217 | 223 | ||
218 | if (!m_att) { | 224 | if (!m_att) { |
219 | return m; | 225 | return m; |
220 | } | 226 | } |
@@ -329,9 +335,9 @@ RecBody IMAPwrapper::fetchBody(const RecMail&mail) | |||
329 | mailimap_fetch_type *fetchType; | 335 | mailimap_fetch_type *fetchType; |
330 | mailimap_set *set; | 336 | mailimap_set *set; |
331 | mailimap_body*body_desc; | 337 | mailimap_body*body_desc; |
332 | 338 | ||
333 | mb = mail.getMbox().latin1(); | 339 | mb = mail.getMbox().latin1(); |
334 | 340 | ||
335 | login(); | 341 | login(); |
336 | if (!m_imap) { | 342 | if (!m_imap) { |
337 | return body; | 343 | return body; |
@@ -343,10 +349,10 @@ RecBody IMAPwrapper::fetchBody(const RecMail&mail) | |||
343 | logout(); | 349 | logout(); |
344 | return body; | 350 | return body; |
345 | } | 351 | } |
346 | result = clist_new(); | 352 | result = clist_new(); |
347 | /* the range has to start at 1!!! not with 0!!!! */ | 353 | /* the range has to start at 1!!! not with 0!!!! */ |
348 | set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() ); | 354 | set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() ); |
349 | fetchAtt = mailimap_fetch_att_new_body(); | 355 | fetchAtt = mailimap_fetch_att_new_body(); |
350 | fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt); | 356 | fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt); |
351 | err = mailimap_fetch( m_imap, set, fetchType, &result ); | 357 | err = mailimap_fetch( m_imap, set, fetchType, &result ); |
352 | mailimap_set_free( set ); | 358 | mailimap_set_free( set ); |
@@ -361,13 +367,13 @@ RecBody IMAPwrapper::fetchBody(const RecMail&mail) | |||
361 | searchBodyText(mail,body_desc->body_1part,body); | 367 | searchBodyText(mail,body_desc->body_1part,body); |
362 | } else { | 368 | } else { |
363 | } | 369 | } |
364 | 370 | ||
365 | } else { | 371 | } else { |
366 | qDebug("error fetching body: %s",m_imap->response); | 372 | qDebug("error fetching body: %s",m_imap->response); |
367 | } | 373 | } |
368 | 374 | ||
369 | clist_free(result); | 375 | clist_free(result); |
370 | logout(); | 376 | logout(); |
371 | return body; | 377 | return body; |
372 | } | 378 | } |
373 | 379 | ||
@@ -396,14 +402,14 @@ void IMAPwrapper::fillPlainBody(const RecMail&mail,RecBody&target_body, mailimap | |||
396 | mailimap_fetch_att *fetchAtt; | 402 | mailimap_fetch_att *fetchAtt; |
397 | mailimap_fetch_type *fetchType; | 403 | mailimap_fetch_type *fetchType; |
398 | mailimap_set *set; | 404 | mailimap_set *set; |
399 | 405 | ||
400 | mb = mail.getMbox().latin1(); | 406 | mb = mail.getMbox().latin1(); |
401 | 407 | ||
402 | if (!m_imap) { | 408 | if (!m_imap) { |
403 | return; | 409 | return; |
404 | } | 410 | } |
405 | 411 | ||
406 | result = clist_new(); | 412 | result = clist_new(); |
407 | /* the range has to start at 1!!! not with 0!!!! */ | 413 | /* the range has to start at 1!!! not with 0!!!! */ |
408 | set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() ); | 414 | set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() ); |
409 | fetchAtt = mailimap_fetch_att_new_rfc822_text(); | 415 | fetchAtt = mailimap_fetch_att_new_rfc822_text(); |
@@ -411,7 +417,7 @@ void IMAPwrapper::fillPlainBody(const RecMail&mail,RecBody&target_body, mailimap | |||
411 | err = mailimap_fetch( m_imap, set, fetchType, &result ); | 417 | err = mailimap_fetch( m_imap, set, fetchType, &result ); |
412 | mailimap_set_free( set ); | 418 | mailimap_set_free( set ); |
413 | mailimap_fetch_type_free( fetchType ); | 419 | mailimap_fetch_type_free( fetchType ); |
414 | 420 | ||
415 | if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) { | 421 | if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) { |
416 | mailimap_msg_att * msg_att; | 422 | mailimap_msg_att * msg_att; |
417 | msg_att = (mailimap_msg_att*)current->data; | 423 | msg_att = (mailimap_msg_att*)current->data; |