Diffstat (limited to 'noncore/net/mail/libmailwrapper/smtpwrapper.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/net/mail/libmailwrapper/smtpwrapper.cpp | 47 |
1 files changed, 27 insertions, 20 deletions
diff --git a/noncore/net/mail/libmailwrapper/smtpwrapper.cpp b/noncore/net/mail/libmailwrapper/smtpwrapper.cpp index 770e2b8..a7e4837 100644 --- a/noncore/net/mail/libmailwrapper/smtpwrapper.cpp +++ b/noncore/net/mail/libmailwrapper/smtpwrapper.cpp | |||
@@ -215,26 +215,26 @@ mailmime *SMTPwrapper::buildFilePart(const QString&filename,const QString&mimety | |||
215 | mailmime_parameter * param = 0; | 215 | mailmime_parameter * param = 0; |
216 | char*name = 0; | 216 | char*name = 0; |
217 | char*file = 0; | 217 | char*file = 0; |
218 | int err; | 218 | int err; |
219 | 219 | ||
220 | int pos = filename.findRev( '/' ); | 220 | int pos = filename.findRev( '/' ); |
221 | 221 | ||
222 | if (filename.length()>0) { | 222 | if (filename.length()>0) { |
223 | QString tmp = filename.right( filename.length() - ( pos + 1 ) ); | 223 | QString tmp = filename.right( filename.length() - ( pos + 1 ) ); |
224 | name = strdup( tmp.latin1() ); // just filename | 224 | name = strdup( tmp.latin1() ); // just filename |
225 | file = strdup( filename.latin1() ); // full name with path | 225 | file = strdup( filename.latin1() ); // full name with path |
226 | } | 226 | } |
227 | char *mime = strdup( mimetype.latin1() ); // mimetype -e.g. text/plain | 227 | char *mime = strdup( mimetype.latin1() ); // mimetype -e.g. text/plain |
228 | 228 | ||
229 | int disptype = MAILMIME_DISPOSITION_TYPE_ATTACHMENT; | 229 | int disptype = MAILMIME_DISPOSITION_TYPE_ATTACHMENT; |
230 | int mechanism = MAILMIME_MECHANISM_BASE64; | 230 | int mechanism = MAILMIME_MECHANISM_BASE64; |
231 | 231 | ||
232 | if ( mimetype.startsWith( "text/" ) ) { | 232 | if ( mimetype.startsWith( "text/" ) ) { |
233 | param = mailmime_parameter_new( strdup( "charset" ), | 233 | param = mailmime_parameter_new( strdup( "charset" ), |
234 | strdup( "iso-8859-1" ) ); | 234 | strdup( "iso-8859-1" ) ); |
235 | disptype = MAILMIME_DISPOSITION_TYPE_INLINE; | 235 | disptype = MAILMIME_DISPOSITION_TYPE_INLINE; |
236 | mechanism = MAILMIME_MECHANISM_QUOTED_PRINTABLE; | 236 | mechanism = MAILMIME_MECHANISM_QUOTED_PRINTABLE; |
237 | } | 237 | } |
238 | 238 | ||
239 | fields = mailmime_fields_new_filename( | 239 | fields = mailmime_fields_new_filename( |
240 | disptype, name, | 240 | disptype, name, |
@@ -247,13 +247,13 @@ mailmime *SMTPwrapper::buildFilePart(const QString&filename,const QString&mimety | |||
247 | } | 247 | } |
248 | if (filename.length()>0) { | 248 | if (filename.length()>0) { |
249 | QFileInfo f(filename); | 249 | QFileInfo f(filename); |
250 | param = mailmime_parameter_new(strdup("name"),strdup(f.fileName().latin1())); | 250 | param = mailmime_parameter_new(strdup("name"),strdup(f.fileName().latin1())); |
251 | clist_append(content->ct_parameters,param); | 251 | clist_append(content->ct_parameters,param); |
252 | param = 0; | 252 | param = 0; |
253 | } | 253 | } |
254 | filePart = mailmime_new_empty( content, fields ); | 254 | filePart = mailmime_new_empty( content, fields ); |
255 | } | 255 | } |
256 | if (filePart) { | 256 | if (filePart) { |
257 | if (filename.length()>0) { | 257 | if (filename.length()>0) { |
258 | err = mailmime_set_body_file( filePart, file ); | 258 | err = mailmime_set_body_file( filePart, file ); |
259 | } else { | 259 | } else { |
@@ -545,19 +545,19 @@ void SMTPwrapper::smtpSend( mailmime *mail,bool later, SMTPaccount *smtp ) | |||
545 | size_t size; | 545 | size_t size; |
546 | 546 | ||
547 | if ( smtp == NULL ) { | 547 | if ( smtp == NULL ) { |
548 | return; | 548 | return; |
549 | } | 549 | } |
550 | from = data = 0; | 550 | from = data = 0; |
551 | 551 | ||
552 | QString file = getTmpFile(); | 552 | QString file = getTmpFile(); |
553 | writeToFile( file, mail ); | 553 | writeToFile( file, mail ); |
554 | readFromFile( file, &data, &size ); | 554 | readFromFile( file, &data, &size ); |
555 | QFile f( file ); | 555 | QFile f( file ); |
556 | f.remove(); | 556 | f.remove(); |
557 | 557 | ||
558 | if (later) { | 558 | if (later) { |
559 | storeMail(data,size,"Outgoing"); | 559 | storeMail(data,size,"Outgoing"); |
560 | if (data) free( data ); | 560 | if (data) free( data ); |
561 | return; | 561 | return; |
562 | } | 562 | } |
563 | from = getFrom( mail ); | 563 | from = getFrom( mail ); |
@@ -569,19 +569,19 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,char*data,size_t size, SMTPaccou | |||
569 | { | 569 | { |
570 | char *server, *user, *pass; | 570 | char *server, *user, *pass; |
571 | bool ssl; | 571 | bool ssl; |
572 | uint16_t port; | 572 | uint16_t port; |
573 | mailsmtp *session; | 573 | mailsmtp *session; |
574 | int err,result; | 574 | int err,result; |
575 | 575 | ||
576 | result = 1; | 576 | result = 1; |
577 | server = user = pass = 0; | 577 | server = user = pass = 0; |
578 | server = strdup( smtp->getServer().latin1() ); | 578 | server = strdup( smtp->getServer().latin1() ); |
579 | ssl = smtp->getSSL(); | 579 | ssl = smtp->getSSL(); |
580 | port = smtp->getPort().toUInt(); | 580 | port = smtp->getPort().toUInt(); |
581 | 581 | ||
582 | session = mailsmtp_new( 20, &progress ); | 582 | session = mailsmtp_new( 20, &progress ); |
583 | if ( session == NULL ) goto free_mem; | 583 | if ( session == NULL ) goto free_mem; |
584 | 584 | ||
585 | qDebug( "Servername %s at port %i", server, port ); | 585 | qDebug( "Servername %s at port %i", server, port ); |
586 | if ( ssl ) { | 586 | if ( ssl ) { |
587 | qDebug( "SSL session" ); | 587 | qDebug( "SSL session" ); |
@@ -641,21 +641,21 @@ free_mem: | |||
641 | return result; | 641 | return result; |
642 | } | 642 | } |
643 | 643 | ||
644 | void SMTPwrapper::sendMail(const Mail&mail,bool later ) | 644 | void SMTPwrapper::sendMail(const Mail&mail,bool later ) |
645 | { | 645 | { |
646 | mailmime * mimeMail; | 646 | mailmime * mimeMail; |
647 | 647 | ||
648 | SMTPaccount *smtp = getAccount(mail.getName()); | 648 | SMTPaccount *smtp = getAccount(mail.getName()); |
649 | 649 | ||
650 | mimeMail = createMimeMail(mail ); | 650 | mimeMail = createMimeMail(mail ); |
651 | if ( mimeMail == NULL ) { | 651 | if ( mimeMail == NULL ) { |
652 | qDebug( "sendMail: error creating mime mail" ); | 652 | qDebug( "sendMail: error creating mime mail" ); |
653 | } else { | 653 | } else { |
654 | sendProgress = new progressMailSend(); | 654 | sendProgress = new progressMailSend(); |
655 | // sendProgress->showMaximized(); | 655 | // sendProgress->showMaximized(); |
656 | sendProgress->show(); | 656 | sendProgress->show(); |
657 | sendProgress->setMaxMails(1); | 657 | sendProgress->setMaxMails(1); |
658 | smtpSend( mimeMail,later,smtp); | 658 | smtpSend( mimeMail,later,smtp); |
659 | mailmime_free( mimeMail ); | 659 | mailmime_free( mimeMail ); |
660 | qDebug("Clean up done"); | 660 | qDebug("Clean up done"); |
661 | sendProgress->hide(); | 661 | sendProgress->hide(); |
@@ -673,65 +673,72 @@ int SMTPwrapper::sendQueuedMail(MBOXwrapper*wrap,SMTPaccount*smtp,RecMail*which) | |||
673 | mailimf_field*ffrom = 0; | 673 | mailimf_field*ffrom = 0; |
674 | clist *rcpts = 0; | 674 | clist *rcpts = 0; |
675 | char*from = 0; | 675 | char*from = 0; |
676 | 676 | ||
677 | wrap->fetchRawBody(*which,&data,&length); | 677 | wrap->fetchRawBody(*which,&data,&length); |
678 | if (!data) return 0; | 678 | if (!data) return 0; |
679 | int err = mailimf_fields_parse( data, length, &curTok, &fields ); | 679 | int err = mailimf_fields_parse( data, length, &curTok, &fields ); |
680 | if (err != MAILIMF_NO_ERROR) { | 680 | if (err != MAILIMF_NO_ERROR) { |
681 | free(data); | 681 | free(data); |
682 | delete wrap; | 682 | delete wrap; |
683 | return 0; | 683 | return 0; |
684 | } | 684 | } |
685 | 685 | ||
686 | rcpts = createRcptList( fields ); | 686 | rcpts = createRcptList( fields ); |
687 | ffrom = getField(fields, MAILIMF_FIELD_FROM ); | 687 | ffrom = getField(fields, MAILIMF_FIELD_FROM ); |
688 | from = getFrom(ffrom); | 688 | from = getFrom(ffrom); |
689 | 689 | ||
690 | qDebug("Size: %i vs. %i",length,strlen(data)); | 690 | qDebug("Size: %i vs. %i",length,strlen(data)); |
691 | if (rcpts && from) { | 691 | if (rcpts && from) { |
692 | return smtpSend(from,rcpts,data,strlen(data),smtp ); | 692 | return smtpSend(from,rcpts,data,strlen(data),smtp ); |
693 | } | 693 | } |
694 | return 0; | 694 | return 0; |
695 | } | 695 | } |
696 | 696 | ||
697 | /* this is a special fun */ | 697 | /* this is a special fun */ |
698 | void SMTPwrapper::flushOutbox(SMTPaccount*smtp) | 698 | bool SMTPwrapper::flushOutbox(SMTPaccount*smtp) |
699 | { | 699 | { |
700 | if (!smtp) return; | 700 | bool returnValue = true; |
701 | QString localfolders = (QString) getenv( "HOME" ) + QString("/Applications/opiemail/localmail/"); | 701 | |
702 | if (!smtp) return false; | ||
703 | |||
704 | QString localfolders = (QString) getenv( "HOME" ) + QString("/Applications/opiemail/localmail/"); | ||
702 | MBOXwrapper*wrap = new MBOXwrapper(localfolders); | 705 | MBOXwrapper*wrap = new MBOXwrapper(localfolders); |
703 | if (!wrap) { | 706 | if (!wrap) { |
704 | qDebug("memory error"); | 707 | qDebug("memory error"); |
705 | return; | 708 | return false; |
706 | } | 709 | } |
707 | QList<RecMail> mailsToSend; | 710 | QList<RecMail> mailsToSend; |
708 | QList<RecMail> mailsToRemove; | 711 | QList<RecMail> mailsToRemove; |
709 | QString mbox("Outgoing"); | 712 | QString mbox("Outgoing"); |
710 | wrap->listMessages(mbox,mailsToSend); | 713 | wrap->listMessages(mbox,mailsToSend); |
711 | if (mailsToSend.count()==0) { | 714 | if (mailsToSend.count()==0) { |
712 | delete wrap; | 715 | delete wrap; |
713 | return; | 716 | return false; |
714 | } | 717 | } |
715 | mailsToSend.setAutoDelete(false); | 718 | mailsToSend.setAutoDelete(false); |
716 | sendProgress = new progressMailSend(); | 719 | sendProgress = new progressMailSend(); |
717 | // sendProgress->showMaximized(); | 720 | // sendProgress->showMaximized(); |
718 | sendProgress->show(); | 721 | sendProgress->show(); |
719 | sendProgress->setMaxMails(mailsToSend.count()); | 722 | sendProgress->setMaxMails(mailsToSend.count()); |
720 | 723 | ||
721 | while (mailsToSend.count()>0) { | 724 | while (mailsToSend.count()>0) { |
722 | if (sendQueuedMail(wrap,smtp,mailsToSend.at(0))==0) { | 725 | if (sendQueuedMail(wrap,smtp,mailsToSend.at(0))==0) { |
723 | QMessageBox::critical(0,tr("Error sending mail"), | 726 | QMessageBox::critical(0,tr("Error sending mail"), |
724 | tr("Error sending queued mail - breaking")); | 727 | tr("Error sending queued mail - breaking")); |
728 | |||
729 | returnValue = false; | ||
725 | break; | 730 | break; |
726 | } | 731 | } |
727 | mailsToRemove.append(mailsToSend.at(0)); | 732 | mailsToRemove.append(mailsToSend.at(0)); |
728 | mailsToSend.removeFirst(); | 733 | mailsToSend.removeFirst(); |
729 | sendProgress->setCurrentMails(mailsToRemove.count()); | 734 | sendProgress->setCurrentMails(mailsToRemove.count()); |
730 | } | 735 | } |
731 | sendProgress->hide(); | 736 | sendProgress->hide(); |
732 | delete sendProgress; | 737 | delete sendProgress; |
733 | sendProgress = 0; | 738 | sendProgress = 0; |
734 | wrap->deleteMails(mbox,mailsToRemove); | 739 | wrap->deleteMails(mbox,mailsToRemove); |
735 | mailsToSend.setAutoDelete(true); | 740 | mailsToSend.setAutoDelete(true); |
736 | delete wrap; | 741 | delete wrap; |
742 | return returnValue; | ||
743 | |||
737 | } | 744 | } |