summaryrefslogtreecommitdiff
path: root/noncore/net/mail/smtpwrapper.cpp
Unidiff
Diffstat (limited to 'noncore/net/mail/smtpwrapper.cpp') (more/less context) (show whitespace changes)
-rw-r--r--noncore/net/mail/smtpwrapper.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/noncore/net/mail/smtpwrapper.cpp b/noncore/net/mail/smtpwrapper.cpp
index 30c0707..7e03af9 100644
--- a/noncore/net/mail/smtpwrapper.cpp
+++ b/noncore/net/mail/smtpwrapper.cpp
@@ -1,49 +1,62 @@
1#include <stdlib.h> 1#include <stdlib.h>
2#include <sys/stat.h> 2#include <sys/stat.h>
3#include <sys/types.h> 3#include <sys/types.h>
4#include <unistd.h> 4#include <unistd.h>
5#include <fcntl.h> 5#include <fcntl.h>
6#include <string.h> 6#include <string.h>
7#include <qdir.h> 7#include <qdir.h>
8#include <qt.h> 8#include <qt.h>
9 9
10#include <qpe/config.h>
11#include <qpe/qcopenvelope_qws.h>
12
10#include <libetpan/libetpan.h> 13#include <libetpan/libetpan.h>
11 14
12#include "smtpwrapper.h" 15#include "smtpwrapper.h"
13#include "mailwrapper.h" 16#include "mailwrapper.h"
14#include "mboxwrapper.h" 17#include "mboxwrapper.h"
15#include "logindialog.h" 18#include "logindialog.h"
16#include "mailtypes.h" 19#include "mailtypes.h"
17#include "defines.h" 20#include "defines.h"
18#include "sendmailprogress.h" 21#include "sendmailprogress.h"
19 22
20progressMailSend*SMTPwrapper::sendProgress = 0; 23progressMailSend*SMTPwrapper::sendProgress = 0;
21 24
22SMTPwrapper::SMTPwrapper( Settings *s ) 25SMTPwrapper::SMTPwrapper( Settings *s )
23 : QObject() 26 : QObject()
24{ 27{
25 settings = s; 28 settings = s;
29 Config cfg( "mail" );
30 cfg.setGroup( "Status" );
31 m_queuedMail = cfg.readNumEntry( "outgoing", 0 );
32 emit queuedMails( m_queuedMail );
33 connect( this, SIGNAL( queuedMails( int ) ), this, SLOT( emitQCop( int ) ) );
34}
35
36void SMTPwrapper::emitQCop( int queued ) {
37 QCopEnvelope env( "QPE/Pim", "outgoingMails(int)" );
38 env << queued;
26} 39}
27 40
28QString SMTPwrapper::mailsmtpError( int errnum ) 41QString SMTPwrapper::mailsmtpError( int errnum )
29{ 42{
30 switch ( errnum ) { 43 switch ( errnum ) {
31 case MAILSMTP_NO_ERROR: 44 case MAILSMTP_NO_ERROR:
32 return tr( "No error" ); 45 return tr( "No error" );
33 case MAILSMTP_ERROR_UNEXPECTED_CODE: 46 case MAILSMTP_ERROR_UNEXPECTED_CODE:
34 return tr( "Unexpected error code" ); 47 return tr( "Unexpected error code" );
35 case MAILSMTP_ERROR_SERVICE_NOT_AVAILABLE: 48 case MAILSMTP_ERROR_SERVICE_NOT_AVAILABLE:
36 return tr( "Service not available" ); 49 return tr( "Service not available" );
37 case MAILSMTP_ERROR_STREAM: 50 case MAILSMTP_ERROR_STREAM:
38 return tr( "Stream error" ); 51 return tr( "Stream error" );
39 case MAILSMTP_ERROR_HOSTNAME: 52 case MAILSMTP_ERROR_HOSTNAME:
40 return tr( "gethostname() failed" ); 53 return tr( "gethostname() failed" );
41 case MAILSMTP_ERROR_NOT_IMPLEMENTED: 54 case MAILSMTP_ERROR_NOT_IMPLEMENTED:
42 return tr( "Not implemented" ); 55 return tr( "Not implemented" );
43 case MAILSMTP_ERROR_ACTION_NOT_TAKEN: 56 case MAILSMTP_ERROR_ACTION_NOT_TAKEN:
44 return tr( "Error, action not taken" ); 57 return tr( "Error, action not taken" );
45 case MAILSMTP_ERROR_EXCEED_STORAGE_ALLOCATION: 58 case MAILSMTP_ERROR_EXCEED_STORAGE_ALLOCATION:
46 return tr( "Data exceeds storage allocation" ); 59 return tr( "Data exceeds storage allocation" );
47 case MAILSMTP_ERROR_IN_PROCESSING: 60 case MAILSMTP_ERROR_IN_PROCESSING:
48 return tr( "Error in processing" ); 61 return tr( "Error in processing" );
49 // case MAILSMTP_ERROR_INSUFFISANT_SYSTEM_STORAGE: 62 // case MAILSMTP_ERROR_INSUFFISANT_SYSTEM_STORAGE:
@@ -486,48 +499,52 @@ void SMTPwrapper::smtpSend( mailmime *mail,bool later, SMTPaccount *smtp )
486 size_t size; 499 size_t size;
487 500
488 if ( smtp == NULL ) { 501 if ( smtp == NULL ) {
489 return; 502 return;
490 } 503 }
491 from = data = 0; 504 from = data = 0;
492 505
493 mailmessage * msg = 0; 506 mailmessage * msg = 0;
494 msg = mime_message_init(mail); 507 msg = mime_message_init(mail);
495 mime_message_set_tmpdir(msg,getenv( "HOME" )); 508 mime_message_set_tmpdir(msg,getenv( "HOME" ));
496 int r = mailmessage_fetch(msg,&data,&size); 509 int r = mailmessage_fetch(msg,&data,&size);
497 mime_message_detach_mime(msg); 510 mime_message_detach_mime(msg);
498 mailmessage_free(msg); 511 mailmessage_free(msg);
499 if (r != MAIL_NO_ERROR || !data) { 512 if (r != MAIL_NO_ERROR || !data) {
500 if (data) free(data); 513 if (data) free(data);
501 qDebug("Error fetching mime..."); 514 qDebug("Error fetching mime...");
502 return; 515 return;
503 } 516 }
504 QString tmp = data; 517 QString tmp = data;
505 tmp.replace(QRegExp("\r+",true,false),""); 518 tmp.replace(QRegExp("\r+",true,false),"");
506 msg = 0; 519 msg = 0;
507 if (later) { 520 if (later) {
508 storeMail((char*)tmp.data(),tmp.length(),"Outgoing"); 521 storeMail((char*)tmp.data(),tmp.length(),"Outgoing");
509 if (data) free( data ); 522 if (data) free( data );
523 Config cfg( "mail" );
524 cfg.setGroup( "Status" );
525 cfg.writeEntry( "outgoing", ++m_queuedMail );
526 emit queuedMails( m_queuedMail );
510 return; 527 return;
511 } 528 }
512 from = getFrom( mail ); 529 from = getFrom( mail );
513 rcpts = createRcptList( mail->mm_data.mm_message.mm_fields ); 530 rcpts = createRcptList( mail->mm_data.mm_message.mm_fields );
514 smtpSend(from,rcpts,data,size,smtp); 531 smtpSend(from,rcpts,data,size,smtp);
515 if (data) {free(data);} 532 if (data) {free(data);}
516 if (from) {free(from);} 533 if (from) {free(from);}
517 if (rcpts) smtp_address_list_free( rcpts ); 534 if (rcpts) smtp_address_list_free( rcpts );
518} 535}
519 536
520int SMTPwrapper::smtpSend(char*from,clist*rcpts,char*data,size_t size, SMTPaccount *smtp ) 537int SMTPwrapper::smtpSend(char*from,clist*rcpts,char*data,size_t size, SMTPaccount *smtp )
521{ 538{
522 char *server, *user, *pass; 539 char *server, *user, *pass;
523 bool ssl; 540 bool ssl;
524 uint16_t port; 541 uint16_t port;
525 mailsmtp *session; 542 mailsmtp *session;
526 int err,result; 543 int err,result;
527 544
528 result = 1; 545 result = 1;
529 server = user = pass = 0; 546 server = user = pass = 0;
530 server = strdup( smtp->getServer().latin1() ); 547 server = strdup( smtp->getServer().latin1() );
531 ssl = smtp->getSSL(); 548 ssl = smtp->getSSL();
532 port = smtp->getPort().toUInt(); 549 port = smtp->getPort().toUInt();
533 550
@@ -679,32 +696,37 @@ bool SMTPwrapper::flushOutbox(SMTPaccount*smtp)
679 QList<RecMail> mailsToSend; 696 QList<RecMail> mailsToSend;
680 QList<RecMail> mailsToRemove; 697 QList<RecMail> mailsToRemove;
681 QString mbox("Outgoing"); 698 QString mbox("Outgoing");
682 wrap->listMessages(mbox,mailsToSend); 699 wrap->listMessages(mbox,mailsToSend);
683 if (mailsToSend.count()==0) { 700 if (mailsToSend.count()==0) {
684 delete wrap; 701 delete wrap;
685 return false; 702 return false;
686 } 703 }
687 mailsToSend.setAutoDelete(false); 704 mailsToSend.setAutoDelete(false);
688 sendProgress = new progressMailSend(); 705 sendProgress = new progressMailSend();
689 sendProgress->show(); 706 sendProgress->show();
690 sendProgress->setMaxMails(mailsToSend.count()); 707 sendProgress->setMaxMails(mailsToSend.count());
691 708
692 while (mailsToSend.count()>0) { 709 while (mailsToSend.count()>0) {
693 if (sendQueuedMail(wrap,smtp,mailsToSend.at(0))==0) { 710 if (sendQueuedMail(wrap,smtp,mailsToSend.at(0))==0) {
694 QMessageBox::critical(0,tr("Error sending mail"), 711 QMessageBox::critical(0,tr("Error sending mail"),
695 tr("Error sending queued mail - breaking")); 712 tr("Error sending queued mail - breaking"));
696 returnValue = false; 713 returnValue = false;
697 break; 714 break;
698 } 715 }
699 mailsToRemove.append(mailsToSend.at(0)); 716 mailsToRemove.append(mailsToSend.at(0));
700 mailsToSend.removeFirst(); 717 mailsToSend.removeFirst();
701 sendProgress->setCurrentMails(mailsToRemove.count()); 718 sendProgress->setCurrentMails(mailsToRemove.count());
702 } 719 }
720 Config cfg( "mail" );
721 cfg.setGroup( "Status" );
722 m_queuedMail = 0;
723 cfg.writeEntry( "outgoing", m_queuedMail );
724 emit queuedMails( m_queuedMail );
703 sendProgress->hide(); 725 sendProgress->hide();
704 delete sendProgress; 726 delete sendProgress;
705 sendProgress = 0; 727 sendProgress = 0;
706 wrap->deleteMails(mbox,mailsToRemove); 728 wrap->deleteMails(mbox,mailsToRemove);
707 mailsToSend.setAutoDelete(true); 729 mailsToSend.setAutoDelete(true);
708 delete wrap; 730 delete wrap;
709 return returnValue; 731 return returnValue;
710} 732}