Diffstat (limited to 'noncore/net/mail/libmailwrapper/smtpwrapper.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | noncore/net/mail/libmailwrapper/smtpwrapper.cpp | 206 |
1 files changed, 121 insertions, 85 deletions
diff --git a/noncore/net/mail/libmailwrapper/smtpwrapper.cpp b/noncore/net/mail/libmailwrapper/smtpwrapper.cpp index 08f6bb7..085d5e4 100644 --- a/noncore/net/mail/libmailwrapper/smtpwrapper.cpp +++ b/noncore/net/mail/libmailwrapper/smtpwrapper.cpp | |||
@@ -24,10 +24,9 @@ const char* SMTPwrapper::USER_AGENT="OpieMail v0.3"; | |||
24 | 24 | ||
25 | progressMailSend*SMTPwrapper::sendProgress = 0; | 25 | progressMailSend*SMTPwrapper::sendProgress = 0; |
26 | 26 | ||
27 | SMTPwrapper::SMTPwrapper( Settings *s ) | 27 | SMTPwrapper::SMTPwrapper( Settings *s ) |
28 | : QObject() | 28 | : QObject() { |
29 | { | ||
30 | settings = s; | 29 | settings = s; |
31 | Config cfg( "mail" ); | 30 | Config cfg( "mail" ); |
32 | cfg.setGroup( "Status" ); | 31 | cfg.setGroup( "Status" ); |
33 | m_queuedMail = cfg.readNumEntry( "outgoing", 0 ); | 32 | m_queuedMail = cfg.readNumEntry( "outgoing", 0 ); |
@@ -39,10 +38,9 @@ void SMTPwrapper::emitQCop( int queued ) { | |||
39 | QCopEnvelope env( "QPE/Pim", "outgoingMails(int)" ); | 38 | QCopEnvelope env( "QPE/Pim", "outgoingMails(int)" ); |
40 | env << queued; | 39 | env << queued; |
41 | } | 40 | } |
42 | 41 | ||
43 | QString SMTPwrapper::mailsmtpError( int errnum ) | 42 | QString SMTPwrapper::mailsmtpError( int errnum ) { |
44 | { | ||
45 | switch ( errnum ) { | 43 | switch ( errnum ) { |
46 | case MAILSMTP_NO_ERROR: | 44 | case MAILSMTP_NO_ERROR: |
47 | return tr( "No error" ); | 45 | return tr( "No error" ); |
48 | case MAILSMTP_ERROR_UNEXPECTED_CODE: | 46 | case MAILSMTP_ERROR_UNEXPECTED_CODE: |
@@ -81,19 +79,18 @@ QString SMTPwrapper::mailsmtpError( int errnum ) | |||
81 | return tr( "Unknown error code" ); | 79 | return tr( "Unknown error code" ); |
82 | } | 80 | } |
83 | } | 81 | } |
84 | 82 | ||
85 | mailimf_mailbox *SMTPwrapper::newMailbox(const QString&name, const QString&mail ) | 83 | mailimf_mailbox *SMTPwrapper::newMailbox(const QString&name, const QString&mail ) { |
86 | { | ||
87 | return mailimf_mailbox_new( strdup( name.latin1() ), | 84 | return mailimf_mailbox_new( strdup( name.latin1() ), |
88 | strdup( mail.latin1() ) ); | 85 | strdup( mail.latin1() ) ); |
89 | } | 86 | } |
90 | 87 | ||
91 | mailimf_address_list *SMTPwrapper::parseAddresses(const QString&addr ) | 88 | mailimf_address_list *SMTPwrapper::parseAddresses(const QString&addr ) { |
92 | { | ||
93 | mailimf_address_list *addresses; | 89 | mailimf_address_list *addresses; |
94 | 90 | ||
95 | if ( addr.isEmpty() ) return NULL; | 91 | if ( addr.isEmpty() ) |
92 | return NULL; | ||
96 | 93 | ||
97 | addresses = mailimf_address_list_new_empty(); | 94 | addresses = mailimf_address_list_new_empty(); |
98 | 95 | ||
99 | bool literal_open = false; | 96 | bool literal_open = false; |
@@ -138,10 +135,9 @@ mailimf_address_list *SMTPwrapper::parseAddresses(const QString&addr ) | |||
138 | } | 135 | } |
139 | return addresses; | 136 | return addresses; |
140 | } | 137 | } |
141 | 138 | ||
142 | mailimf_fields *SMTPwrapper::createImfFields(const Mail&mail ) | 139 | mailimf_fields *SMTPwrapper::createImfFields(const Mail&mail ) { |
143 | { | ||
144 | mailimf_fields *fields; | 140 | mailimf_fields *fields; |
145 | mailimf_field *xmailer; | 141 | mailimf_field *xmailer; |
146 | mailimf_mailbox *sender=0,*fromBox=0; | 142 | mailimf_mailbox *sender=0,*fromBox=0; |
147 | mailimf_mailbox_list *from=0; | 143 | mailimf_mailbox_list *from=0; |
@@ -149,87 +145,109 @@ mailimf_fields *SMTPwrapper::createImfFields(const Mail&mail ) | |||
149 | char *subject = strdup( mail.getSubject().latin1() ); | 145 | char *subject = strdup( mail.getSubject().latin1() ); |
150 | int err; | 146 | int err; |
151 | 147 | ||
152 | sender = newMailbox( mail.getName(), mail.getMail() ); | 148 | sender = newMailbox( mail.getName(), mail.getMail() ); |
153 | if ( sender == NULL ) goto err_free; | 149 | if ( sender == NULL ) |
150 | goto err_free; | ||
154 | 151 | ||
155 | fromBox = newMailbox( mail.getName(), mail.getMail() ); | 152 | fromBox = newMailbox( mail.getName(), mail.getMail() ); |
156 | if ( fromBox == NULL ) goto err_free_sender; | 153 | if ( fromBox == NULL ) |
154 | goto err_free_sender; | ||
157 | 155 | ||
158 | from = mailimf_mailbox_list_new_empty(); | 156 | from = mailimf_mailbox_list_new_empty(); |
159 | if ( from == NULL ) goto err_free_fromBox; | 157 | if ( from == NULL ) |
158 | goto err_free_fromBox; | ||
160 | 159 | ||
161 | err = mailimf_mailbox_list_add( from, fromBox ); | 160 | err = mailimf_mailbox_list_add( from, fromBox ); |
162 | if ( err != MAILIMF_NO_ERROR ) goto err_free_from; | 161 | if ( err != MAILIMF_NO_ERROR ) |
162 | goto err_free_from; | ||
163 | 163 | ||
164 | to = parseAddresses( mail.getTo() ); | 164 | to = parseAddresses( mail.getTo() ); |
165 | if ( to == NULL ) goto err_free_from; | 165 | if ( to == NULL ) |
166 | goto err_free_from; | ||
166 | 167 | ||
167 | cc = parseAddresses( mail.getCC() ); | 168 | cc = parseAddresses( mail.getCC() ); |
168 | bcc = parseAddresses( mail.getBCC() ); | 169 | bcc = parseAddresses( mail.getBCC() ); |
169 | reply = parseAddresses( mail.getReply() ); | 170 | reply = parseAddresses( mail.getReply() ); |
170 | 171 | ||
171 | fields = mailimf_fields_new_with_data( from, sender, reply, to, cc, bcc, | 172 | fields = mailimf_fields_new_with_data( from, sender, reply, to, cc, bcc, |
172 | NULL, NULL, subject ); | 173 | NULL, NULL, subject ); |
173 | if ( fields == NULL ) goto err_free_reply; | 174 | if ( fields == NULL ) |
175 | goto err_free_reply; | ||
174 | 176 | ||
175 | xmailer = mailimf_field_new_custom( strdup( "User-Agent" ), | 177 | xmailer = mailimf_field_new_custom( strdup( "User-Agent" ), |
176 | strdup( USER_AGENT ) ); | 178 | strdup( USER_AGENT ) ); |
177 | if ( xmailer == NULL ) goto err_free_fields; | 179 | if ( xmailer == NULL ) |
180 | goto err_free_fields; | ||
178 | 181 | ||
179 | err = mailimf_fields_add( fields, xmailer ); | 182 | err = mailimf_fields_add( fields, xmailer ); |
180 | if ( err != MAILIMF_NO_ERROR ) goto err_free_xmailer; | 183 | if ( err != MAILIMF_NO_ERROR ) |
184 | goto err_free_xmailer; | ||
181 | 185 | ||
182 | return fields; // Success :) | 186 | return fields; // Success :) |
183 | 187 | ||
184 | err_free_xmailer: | 188 | err_free_xmailer: |
185 | if (xmailer) mailimf_field_free( xmailer ); | 189 | if (xmailer) |
190 | mailimf_field_free( xmailer ); | ||
186 | err_free_fields: | 191 | err_free_fields: |
187 | if (fields) mailimf_fields_free( fields ); | 192 | if (fields) |
193 | mailimf_fields_free( fields ); | ||
188 | err_free_reply: | 194 | err_free_reply: |
189 | if (reply) mailimf_address_list_free( reply ); | 195 | if (reply) |
190 | if (bcc) mailimf_address_list_free( bcc ); | 196 | mailimf_address_list_free( reply ); |
191 | if (cc) mailimf_address_list_free( cc ); | 197 | if (bcc) |
192 | if (to) mailimf_address_list_free( to ); | 198 | mailimf_address_list_free( bcc ); |
199 | if (cc) | ||
200 | mailimf_address_list_free( cc ); | ||
201 | if (to) | ||
202 | mailimf_address_list_free( to ); | ||
193 | err_free_from: | 203 | err_free_from: |
194 | if (from) mailimf_mailbox_list_free( from ); | 204 | if (from) |
205 | mailimf_mailbox_list_free( from ); | ||
195 | err_free_fromBox: | 206 | err_free_fromBox: |
196 | mailimf_mailbox_free( fromBox ); | 207 | mailimf_mailbox_free( fromBox ); |
197 | err_free_sender: | 208 | err_free_sender: |
198 | if (sender) mailimf_mailbox_free( sender ); | 209 | if (sender) |
210 | mailimf_mailbox_free( sender ); | ||
199 | err_free: | 211 | err_free: |
200 | if (subject) free( subject ); | 212 | if (subject) |
213 | free( subject ); | ||
201 | qDebug( "createImfFields - error" ); | 214 | qDebug( "createImfFields - error" ); |
202 | 215 | ||
203 | return NULL; // Error :( | 216 | return NULL; // Error :( |
204 | } | 217 | } |
205 | 218 | ||
206 | mailmime *SMTPwrapper::buildTxtPart(const QString&str ) | 219 | mailmime *SMTPwrapper::buildTxtPart(const QString&str ) { |
207 | { | ||
208 | mailmime *txtPart; | 220 | mailmime *txtPart; |
209 | mailmime_fields *fields; | 221 | mailmime_fields *fields; |
210 | mailmime_content *content; | 222 | mailmime_content *content; |
211 | mailmime_parameter *param; | 223 | mailmime_parameter *param; |
212 | int err; | 224 | int err; |
213 | 225 | ||
214 | param = mailmime_parameter_new( strdup( "charset" ), | 226 | param = mailmime_parameter_new( strdup( "charset" ), |
215 | strdup( "iso-8859-1" ) ); | 227 | strdup( "iso-8859-1" ) ); |
216 | if ( param == NULL ) goto err_free; | 228 | if ( param == NULL ) |
229 | goto err_free; | ||
217 | 230 | ||
218 | content = mailmime_content_new_with_str( "text/plain" ); | 231 | content = mailmime_content_new_with_str( "text/plain" ); |
219 | if ( content == NULL ) goto err_free_param; | 232 | if ( content == NULL ) |
233 | goto err_free_param; | ||
220 | 234 | ||
221 | err = clist_append( content->ct_parameters, param ); | 235 | err = clist_append( content->ct_parameters, param ); |
222 | if ( err != MAILIMF_NO_ERROR ) goto err_free_content; | 236 | if ( err != MAILIMF_NO_ERROR ) |
237 | goto err_free_content; | ||
223 | 238 | ||
224 | fields = mailmime_fields_new_encoding(MAILMIME_MECHANISM_8BIT); | 239 | fields = mailmime_fields_new_encoding(MAILMIME_MECHANISM_8BIT); |
225 | if ( fields == NULL ) goto err_free_content; | 240 | if ( fields == NULL ) |
241 | goto err_free_content; | ||
226 | 242 | ||
227 | txtPart = mailmime_new_empty( content, fields ); | 243 | txtPart = mailmime_new_empty( content, fields ); |
228 | if ( txtPart == NULL ) goto err_free_fields; | 244 | if ( txtPart == NULL ) |
245 | goto err_free_fields; | ||
229 | 246 | ||
230 | err = mailmime_set_body_text( txtPart, (char*)str.data(), str.length() ); | 247 | err = mailmime_set_body_text( txtPart, (char*)str.data(), str.length() ); |
231 | if ( err != MAILIMF_NO_ERROR ) goto err_free_txtPart; | 248 | if ( err != MAILIMF_NO_ERROR ) |
249 | goto err_free_txtPart; | ||
232 | 250 | ||
233 | return txtPart; // Success :) | 251 | return txtPart; // Success :) |
234 | 252 | ||
235 | err_free_txtPart: | 253 | err_free_txtPart: |
@@ -245,10 +263,9 @@ err_free: | |||
245 | 263 | ||
246 | return NULL; // Error :( | 264 | return NULL; // Error :( |
247 | } | 265 | } |
248 | 266 | ||
249 | mailmime *SMTPwrapper::buildFilePart(const QString&filename,const QString&mimetype,const QString&TextContent ) | 267 | mailmime *SMTPwrapper::buildFilePart(const QString&filename,const QString&mimetype,const QString&TextContent ) { |
250 | { | ||
251 | mailmime * filePart = 0; | 268 | mailmime * filePart = 0; |
252 | mailmime_fields * fields = 0; | 269 | mailmime_fields * fields = 0; |
253 | mailmime_content * content = 0; | 270 | mailmime_content * content = 0; |
254 | mailmime_parameter * param = 0; | 271 | mailmime_parameter * param = 0; |
@@ -324,10 +341,9 @@ mailmime *SMTPwrapper::buildFilePart(const QString&filename,const QString&mimety | |||
324 | return filePart; // Success :) | 341 | return filePart; // Success :) |
325 | 342 | ||
326 | } | 343 | } |
327 | 344 | ||
328 | void SMTPwrapper::addFileParts( mailmime *message,const QList<Attachment>&files ) | 345 | void SMTPwrapper::addFileParts( mailmime *message,const QList<Attachment>&files ) { |
329 | { | ||
330 | const Attachment *it; | 346 | const Attachment *it; |
331 | unsigned int count = files.count(); | 347 | unsigned int count = files.count(); |
332 | qDebug("List contains %i values",count); | 348 | qDebug("List contains %i values",count); |
333 | for ( unsigned int i = 0; i < count; ++i ) { | 349 | for ( unsigned int i = 0; i < count; ++i ) { |
@@ -349,28 +365,31 @@ void SMTPwrapper::addFileParts( mailmime *message,const QList<Attachment>&files | |||
349 | } | 365 | } |
350 | } | 366 | } |
351 | } | 367 | } |
352 | 368 | ||
353 | mailmime *SMTPwrapper::createMimeMail(const Mail &mail ) | 369 | mailmime *SMTPwrapper::createMimeMail(const Mail &mail ) { |
354 | { | ||
355 | mailmime *message, *txtPart; | 370 | mailmime *message, *txtPart; |
356 | mailimf_fields *fields; | 371 | mailimf_fields *fields; |
357 | int err; | 372 | int err; |
358 | 373 | ||
359 | fields = createImfFields( mail ); | 374 | fields = createImfFields( mail ); |
360 | if ( fields == NULL ) goto err_free; | 375 | if ( fields == NULL ) |
376 | goto err_free; | ||
361 | 377 | ||
362 | message = mailmime_new_message_data( NULL ); | 378 | message = mailmime_new_message_data( NULL ); |
363 | if ( message == NULL ) goto err_free_fields; | 379 | if ( message == NULL ) |
380 | goto err_free_fields; | ||
364 | 381 | ||
365 | mailmime_set_imf_fields( message, fields ); | 382 | mailmime_set_imf_fields( message, fields ); |
366 | 383 | ||
367 | txtPart = buildTxtPart( mail.getMessage() ); | 384 | txtPart = buildTxtPart( mail.getMessage() ); |
368 | 385 | ||
369 | if ( txtPart == NULL ) goto err_free_message; | 386 | if ( txtPart == NULL ) |
387 | goto err_free_message; | ||
370 | 388 | ||
371 | err = mailmime_smart_add_part( message, txtPart ); | 389 | err = mailmime_smart_add_part( message, txtPart ); |
372 | if ( err != MAILIMF_NO_ERROR ) goto err_free_txtPart; | 390 | if ( err != MAILIMF_NO_ERROR ) |
391 | goto err_free_txtPart; | ||
373 | 392 | ||
374 | addFileParts( message, mail.getAttachments() ); | 393 | addFileParts( message, mail.getAttachments() ); |
375 | 394 | ||
376 | return message; // Success :) | 395 | return message; // Success :) |
@@ -386,10 +405,9 @@ err_free: | |||
386 | 405 | ||
387 | return NULL; // Error :( | 406 | return NULL; // Error :( |
388 | } | 407 | } |
389 | 408 | ||
390 | mailimf_field *SMTPwrapper::getField( mailimf_fields *fields, int type ) | 409 | mailimf_field *SMTPwrapper::getField( mailimf_fields *fields, int type ) { |
391 | { | ||
392 | mailimf_field *field; | 410 | mailimf_field *field; |
393 | clistiter *it; | 411 | clistiter *it; |
394 | 412 | ||
395 | it = clist_begin( fields->fld_list ); | 413 | it = clist_begin( fields->fld_list ); |
@@ -403,10 +421,9 @@ mailimf_field *SMTPwrapper::getField( mailimf_fields *fields, int type ) | |||
403 | 421 | ||
404 | return NULL; | 422 | return NULL; |
405 | } | 423 | } |
406 | 424 | ||
407 | void SMTPwrapper::addRcpts( clist *list, mailimf_address_list *addr_list ) | 425 | void SMTPwrapper::addRcpts( clist *list, mailimf_address_list *addr_list ) { |
408 | { | ||
409 | clistiter *it, *it2; | 426 | clistiter *it, *it2; |
410 | 427 | ||
411 | for ( it = clist_begin( addr_list->ad_list ); it; it = it->next ) { | 428 | for ( it = clist_begin( addr_list->ad_list ); it; it = it->next ) { |
412 | mailimf_address *addr; | 429 | mailimf_address *addr; |
@@ -424,10 +441,9 @@ void SMTPwrapper::addRcpts( clist *list, mailimf_address_list *addr_list ) | |||
424 | } | 441 | } |
425 | } | 442 | } |
426 | } | 443 | } |
427 | 444 | ||
428 | clist *SMTPwrapper::createRcptList( mailimf_fields *fields ) | 445 | clist *SMTPwrapper::createRcptList( mailimf_fields *fields ) { |
429 | { | ||
430 | clist *rcptList; | 446 | clist *rcptList; |
431 | mailimf_field *field; | 447 | mailimf_field *field; |
432 | 448 | ||
433 | rcptList = esmtp_address_list_new(); | 449 | rcptList = esmtp_address_list_new(); |
@@ -452,10 +468,9 @@ clist *SMTPwrapper::createRcptList( mailimf_fields *fields ) | |||
452 | 468 | ||
453 | return rcptList; | 469 | return rcptList; |
454 | } | 470 | } |
455 | 471 | ||
456 | char *SMTPwrapper::getFrom( mailimf_field *ffrom) | 472 | char *SMTPwrapper::getFrom( mailimf_field *ffrom) { |
457 | { | ||
458 | char *from = NULL; | 473 | char *from = NULL; |
459 | if ( ffrom && (ffrom->fld_type == MAILIMF_FIELD_FROM) | 474 | if ( ffrom && (ffrom->fld_type == MAILIMF_FIELD_FROM) |
460 | && ffrom->fld_data.fld_from->frm_mb_list && ffrom->fld_data.fld_from->frm_mb_list->mb_list ) { | 475 | && ffrom->fld_data.fld_from->frm_mb_list && ffrom->fld_data.fld_from->frm_mb_list->mb_list ) { |
461 | clist *cl = ffrom->fld_data.fld_from->frm_mb_list->mb_list; | 476 | clist *cl = ffrom->fld_data.fld_from->frm_mb_list->mb_list; |
@@ -468,36 +483,33 @@ char *SMTPwrapper::getFrom( mailimf_field *ffrom) | |||
468 | 483 | ||
469 | return from; | 484 | return from; |
470 | } | 485 | } |
471 | 486 | ||
472 | char *SMTPwrapper::getFrom( mailmime *mail ) | 487 | char *SMTPwrapper::getFrom( mailmime *mail ) { |
473 | { | ||
474 | /* no need to delete - its just a pointer to structure content */ | 488 | /* no need to delete - its just a pointer to structure content */ |
475 | mailimf_field *ffrom = 0; | 489 | mailimf_field *ffrom = 0; |
476 | ffrom = getField( mail->mm_data.mm_message.mm_fields, MAILIMF_FIELD_FROM ); | 490 | ffrom = getField( mail->mm_data.mm_message.mm_fields, MAILIMF_FIELD_FROM ); |
477 | return getFrom(ffrom); | 491 | return getFrom(ffrom); |
478 | } | 492 | } |
479 | 493 | ||
480 | void SMTPwrapper::progress( size_t current, size_t maximum ) | 494 | void SMTPwrapper::progress( size_t current, size_t maximum ) { |
481 | { | ||
482 | if (SMTPwrapper::sendProgress) { | 495 | if (SMTPwrapper::sendProgress) { |
483 | SMTPwrapper::sendProgress->setSingleMail(current, maximum ); | 496 | SMTPwrapper::sendProgress->setSingleMail(current, maximum ); |
484 | qApp->processEvents(); | 497 | qApp->processEvents(); |
485 | } | 498 | } |
486 | } | 499 | } |
487 | 500 | ||
488 | void SMTPwrapper::storeMail(const char*mail, size_t length, const QString&box) | 501 | void SMTPwrapper::storeMail(const char*mail, size_t length, const QString&box) { |
489 | { | 502 | if (!mail) |
490 | if (!mail) return; | 503 | return; |
491 | QString localfolders = AbstractMail::defaultLocalfolder(); | 504 | QString localfolders = AbstractMail::defaultLocalfolder(); |
492 | AbstractMail*wrap = AbstractMail::getWrapper(localfolders); | 505 | AbstractMail*wrap = AbstractMail::getWrapper(localfolders); |
493 | wrap->createMbox(box); | 506 | wrap->createMbox(box); |
494 | wrap->storeMessage(mail,length,box); | 507 | wrap->storeMessage(mail,length,box); |
495 | delete wrap; | 508 | delete wrap; |
496 | } | 509 | } |
497 | 510 | ||
498 | void SMTPwrapper::smtpSend( mailmime *mail,bool later, SMTPaccount *smtp ) | 511 | void SMTPwrapper::smtpSend( mailmime *mail,bool later, SMTPaccount *smtp ) { |
499 | { | ||
500 | clist *rcpts = 0; | 512 | clist *rcpts = 0; |
501 | char *from, *data; | 513 | char *from, *data; |
502 | size_t size; | 514 | size_t size; |
503 | 515 | ||
@@ -512,16 +524,18 @@ void SMTPwrapper::smtpSend( mailmime *mail,bool later, SMTPaccount *smtp ) | |||
512 | int r = mailmessage_fetch(msg,&data,&size); | 524 | int r = mailmessage_fetch(msg,&data,&size); |
513 | mime_message_detach_mime(msg); | 525 | mime_message_detach_mime(msg); |
514 | mailmessage_free(msg); | 526 | mailmessage_free(msg); |
515 | if (r != MAIL_NO_ERROR || !data) { | 527 | if (r != MAIL_NO_ERROR || !data) { |
516 | if (data) free(data); | 528 | if (data) |
529 | free(data); | ||
517 | qDebug("Error fetching mime..."); | 530 | qDebug("Error fetching mime..."); |
518 | return; | 531 | return; |
519 | } | 532 | } |
520 | msg = 0; | 533 | msg = 0; |
521 | if (later) { | 534 | if (later) { |
522 | storeMail(data,size,"Outgoing"); | 535 | storeMail(data,size,"Outgoing"); |
523 | if (data) free( data ); | 536 | if (data) |
537 | free( data ); | ||
524 | Config cfg( "mail" ); | 538 | Config cfg( "mail" ); |
525 | cfg.setGroup( "Status" ); | 539 | cfg.setGroup( "Status" ); |
526 | cfg.writeEntry( "outgoing", ++m_queuedMail ); | 540 | cfg.writeEntry( "outgoing", ++m_queuedMail ); |
527 | emit queuedMails( m_queuedMail ); | 541 | emit queuedMails( m_queuedMail ); |
@@ -529,15 +543,19 @@ void SMTPwrapper::smtpSend( mailmime *mail,bool later, SMTPaccount *smtp ) | |||
529 | } | 543 | } |
530 | from = getFrom( mail ); | 544 | from = getFrom( mail ); |
531 | rcpts = createRcptList( mail->mm_data.mm_message.mm_fields ); | 545 | rcpts = createRcptList( mail->mm_data.mm_message.mm_fields ); |
532 | smtpSend(from,rcpts,data,size,smtp); | 546 | smtpSend(from,rcpts,data,size,smtp); |
533 | if (data) {free(data);} | 547 | if (data) { |
534 | if (from) {free(from);} | 548 | free(data); |
535 | if (rcpts) smtp_address_list_free( rcpts ); | 549 | } |
550 | if (from) { | ||
551 | free(from); | ||
552 | } | ||
553 | if (rcpts) | ||
554 | smtp_address_list_free( rcpts ); | ||
536 | } | 555 | } |
537 | 556 | ||
538 | int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMTPaccount *smtp ) | 557 | int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMTPaccount *smtp ) { |
539 | { | ||
540 | const char *server, *user, *pass; | 558 | const char *server, *user, *pass; |
541 | bool ssl; | 559 | bool ssl; |
542 | uint16_t port; | 560 | uint16_t port; |
543 | mailsmtp *session; | 561 | mailsmtp *session; |
@@ -545,13 +563,22 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT | |||
545 | 563 | ||
546 | result = 1; | 564 | result = 1; |
547 | server = user = pass = 0; | 565 | server = user = pass = 0; |
548 | server = smtp->getServer().latin1(); | 566 | server = smtp->getServer().latin1(); |
549 | ssl = smtp->getSSL(); | 567 | |
568 | // FIXME: currently only TLS and Plain work. | ||
569 | |||
570 | ssl = false; | ||
571 | |||
572 | if ( smtp->ConnectionType() == 2 ) { | ||
573 | ssl = true; | ||
574 | } | ||
575 | |||
550 | port = smtp->getPort().toUInt(); | 576 | port = smtp->getPort().toUInt(); |
551 | 577 | ||
552 | session = mailsmtp_new( 20, &progress ); | 578 | session = mailsmtp_new( 20, &progress ); |
553 | if ( session == NULL ) goto free_mem; | 579 | if ( session == NULL ) |
580 | goto free_mem; | ||
554 | 581 | ||
555 | qDebug( "Servername %s at port %i", server, port ); | 582 | qDebug( "Servername %s at port %i", server, port ); |
556 | if ( ssl ) { | 583 | if ( ssl ) { |
557 | qDebug( "SSL session" ); | 584 | qDebug( "SSL session" ); |
@@ -559,12 +586,19 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT | |||
559 | } else { | 586 | } else { |
560 | qDebug( "No SSL session" ); | 587 | qDebug( "No SSL session" ); |
561 | err = mailsmtp_socket_connect( session, server, port ); | 588 | err = mailsmtp_socket_connect( session, server, port ); |
562 | } | 589 | } |
563 | if ( err != MAILSMTP_NO_ERROR ) {qDebug("Error init connection");result = 0;goto free_mem_session;} | 590 | if ( err != MAILSMTP_NO_ERROR ) { |
591 | qDebug("Error init connection"); | ||
592 | result = 0; | ||
593 | goto free_mem_session; | ||
594 | } | ||
564 | 595 | ||
565 | err = mailsmtp_init( session ); | 596 | err = mailsmtp_init( session ); |
566 | if ( err != MAILSMTP_NO_ERROR ) {result = 0; goto free_con_session;} | 597 | if ( err != MAILSMTP_NO_ERROR ) { |
598 | result = 0; | ||
599 | goto free_con_session; | ||
600 | } | ||
567 | 601 | ||
568 | qDebug( "INIT OK" ); | 602 | qDebug( "INIT OK" ); |
569 | 603 | ||
570 | if ( smtp->getLogin() ) { | 604 | if ( smtp->getLogin() ) { |
@@ -577,26 +611,29 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT | |||
577 | // ok | 611 | // ok |
578 | user = login.getUser().latin1(); | 612 | user = login.getUser().latin1(); |
579 | pass = login.getPassword().latin1(); | 613 | pass = login.getPassword().latin1(); |
580 | } else { | 614 | } else { |
581 | result = 0; goto free_con_session; | 615 | result = 0; |
616 | goto free_con_session; | ||
582 | } | 617 | } |
583 | } else { | 618 | } else { |
584 | user = smtp->getUser().latin1(); | 619 | user = smtp->getUser().latin1(); |
585 | pass = smtp->getPassword().latin1(); | 620 | pass = smtp->getPassword().latin1(); |
586 | } | 621 | } |
587 | qDebug( "session->auth: %i", session->auth); | 622 | qDebug( "session->auth: %i", session->auth); |
588 | err = mailsmtp_auth( session, (char*)user, (char*)pass ); | 623 | err = mailsmtp_auth( session, (char*)user, (char*)pass ); |
589 | if ( err == MAILSMTP_NO_ERROR ) qDebug("auth ok"); | 624 | if ( err == MAILSMTP_NO_ERROR ) |
625 | qDebug("auth ok"); | ||
590 | qDebug( "Done auth!" ); | 626 | qDebug( "Done auth!" ); |
591 | } else { | 627 | } else { |
592 | qDebug("SMTP without auth"); | 628 | qDebug("SMTP without auth"); |
593 | } | 629 | } |
594 | 630 | ||
595 | err = mailsmtp_send( session, from, rcpts, data, size ); | 631 | err = mailsmtp_send( session, from, rcpts, data, size ); |
596 | if ( err != MAILSMTP_NO_ERROR ) { | 632 | if ( err != MAILSMTP_NO_ERROR ) { |
597 | qDebug("Error sending mail: %s",mailsmtpError(err).latin1()); | 633 | qDebug("Error sending mail: %s",mailsmtpError(err).latin1()); |
598 | result = 0; goto free_con_session; | 634 | result = 0; |
635 | goto free_con_session; | ||
599 | } | 636 | } |
600 | 637 | ||
601 | qDebug( "Mail sent." ); | 638 | qDebug( "Mail sent." ); |
602 | storeMail(data,size,"Sent"); | 639 | storeMail(data,size,"Sent"); |
@@ -608,10 +645,9 @@ free_mem_session: | |||
608 | free_mem: | 645 | free_mem: |
609 | return result; | 646 | return result; |
610 | } | 647 | } |
611 | 648 | ||
612 | void SMTPwrapper::sendMail(const Mail&mail,SMTPaccount*aSmtp,bool later ) | 649 | void SMTPwrapper::sendMail(const Mail&mail,SMTPaccount*aSmtp,bool later ) { |
613 | { | ||
614 | mailmime * mimeMail; | 650 | mailmime * mimeMail; |
615 | 651 | ||
616 | SMTPaccount *smtp = aSmtp; | 652 | SMTPaccount *smtp = aSmtp; |
617 | 653 | ||
@@ -634,19 +670,19 @@ void SMTPwrapper::sendMail(const Mail&mail,SMTPaccount*aSmtp,bool later ) | |||
634 | mailmime_free( mimeMail ); | 670 | mailmime_free( mimeMail ); |
635 | } | 671 | } |
636 | } | 672 | } |
637 | 673 | ||
638 | int SMTPwrapper::sendQueuedMail(AbstractMail*wrap,SMTPaccount*smtp,RecMail*which) | 674 | int SMTPwrapper::sendQueuedMail(AbstractMail*wrap,SMTPaccount*smtp,RecMail*which) { |
639 | { | ||
640 | size_t curTok = 0; | 675 | size_t curTok = 0; |
641 | mailimf_fields *fields = 0; | 676 | mailimf_fields *fields = 0; |
642 | mailimf_field*ffrom = 0; | 677 | mailimf_field*ffrom = 0; |
643 | clist *rcpts = 0; | 678 | clist *rcpts = 0; |
644 | char*from = 0; | 679 | char*from = 0; |
645 | int res = 0; | 680 | int res = 0; |
646 | 681 | ||
647 | encodedString * data = wrap->fetchRawBody(*which); | 682 | encodedString * data = wrap->fetchRawBody(*which); |
648 | if (!data) return 0; | 683 | if (!data) |
684 | return 0; | ||
649 | int err = mailimf_fields_parse( data->Content(), data->Length(), &curTok, &fields ); | 685 | int err = mailimf_fields_parse( data->Content(), data->Length(), &curTok, &fields ); |
650 | if (err != MAILIMF_NO_ERROR) { | 686 | if (err != MAILIMF_NO_ERROR) { |
651 | delete data; | 687 | delete data; |
652 | delete wrap; | 688 | delete wrap; |
@@ -676,13 +712,13 @@ int SMTPwrapper::sendQueuedMail(AbstractMail*wrap,SMTPaccount*smtp,RecMail*which | |||
676 | return res; | 712 | return res; |
677 | } | 713 | } |
678 | 714 | ||
679 | /* this is a special fun */ | 715 | /* this is a special fun */ |
680 | bool SMTPwrapper::flushOutbox(SMTPaccount*smtp) | 716 | bool SMTPwrapper::flushOutbox(SMTPaccount*smtp) { |
681 | { | ||
682 | bool returnValue = true; | 717 | bool returnValue = true; |
683 | 718 | ||
684 | if (!smtp) return false; | 719 | if (!smtp) |
720 | return false; | ||
685 | 721 | ||
686 | QString localfolders = AbstractMail::defaultLocalfolder(); | 722 | QString localfolders = AbstractMail::defaultLocalfolder(); |
687 | AbstractMail*wrap = AbstractMail::getWrapper(localfolders); | 723 | AbstractMail*wrap = AbstractMail::getWrapper(localfolders); |
688 | if (!wrap) { | 724 | if (!wrap) { |