summaryrefslogtreecommitdiff
path: root/noncore/net/mail/libmailwrapper/smtpwrapper.cpp
Unidiff
Diffstat (limited to 'noncore/net/mail/libmailwrapper/smtpwrapper.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/mail/libmailwrapper/smtpwrapper.cpp55
1 files changed, 52 insertions, 3 deletions
diff --git a/noncore/net/mail/libmailwrapper/smtpwrapper.cpp b/noncore/net/mail/libmailwrapper/smtpwrapper.cpp
index e8db9ca..3ab6b77 100644
--- a/noncore/net/mail/libmailwrapper/smtpwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/smtpwrapper.cpp
@@ -61,2 +61,4 @@ QString SMTPwrapper::mailsmtpError( int errnum ) {
61 return tr( "Error in processing" ); 61 return tr( "Error in processing" );
62 case MAILSMTP_ERROR_STARTTLS_NOT_SUPPORTED:
63 return tr( "Starttls not supported" );
62 // case MAILSMTP_ERROR_INSUFFISANT_SYSTEM_STORAGE: 64 // case MAILSMTP_ERROR_INSUFFISANT_SYSTEM_STORAGE:
@@ -567,2 +569,25 @@ void SMTPwrapper::storeFailedMail(const char*data,unsigned int size, const char*
567 569
570int SMTPwrapper::start_smtp_tls(mailsmtp *session)
571{
572 if (!session) {
573 return MAILSMTP_ERROR_IN_PROCESSING;
574 }
575 int err = mailesmtp_starttls(session);
576 if (err != MAILSMTP_NO_ERROR) return err;
577 mailstream_low * low;
578 mailstream_low * new_low;
579 low = mailstream_get_low(session->stream);
580 if (!low) {
581 return MAILSMTP_ERROR_IN_PROCESSING;
582 }
583 int fd = mailstream_low_get_fd(low);
584 if (fd > -1 && (new_low = mailstream_low_ssl_open(fd))!=0) {
585 mailstream_low_free(low);
586 mailstream_set_low(session->stream, new_low);
587 } else {
588 return MAILSMTP_ERROR_IN_PROCESSING;
589 }
590 return err;
591}
592
568int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMTPaccount *smtp ) { 593int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMTPaccount *smtp ) {
@@ -582,2 +607,4 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT
582 ssl = false; 607 ssl = false;
608 bool try_tls = true;
609 bool force_tls=false;
583 610
@@ -585,2 +612,5 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT
585 ssl = true; 612 ssl = true;
613 try_tls = false;
614 } else if (smtp->ConnectionType() == 1) {
615 force_tls = true;
586 } 616 }
@@ -610,2 +640,3 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT
610 640
641 /* switch to tls after init 'cause there it will send the ehlo */
611 if (result) { 642 if (result) {
@@ -618,2 +649,16 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT
618 649
650 if (try_tls) {
651 err = start_smtp_tls(session);
652 if (err != MAILSMTP_NO_ERROR) {
653 try_tls = false;
654 } else {
655 err = mailesmtp_ehlo(session);
656 }
657 }
658
659 if (!try_tls && force_tls) {
660 result = 0;
661 failuretext = tr("Error init SMTP tls: %1").arg(mailsmtpError(err));
662 }
663
619 if (result==1 && smtp->getLogin() ) { 664 if (result==1 && smtp->getLogin() ) {
@@ -739,4 +784,7 @@ bool SMTPwrapper::flushOutbox(SMTPaccount*smtp) {
739 784
740 if (!smtp) 785 qDebug("Sending the queue");
786 if (!smtp) {
787 qDebug("No smtp account given");
741 return false; 788 return false;
789 }
742 790
@@ -756,5 +804,6 @@ bool SMTPwrapper::flushOutbox(SMTPaccount*smtp) {
756 delete wrap; 804 delete wrap;
805 qDebug("No mails to send");
757 return false; 806 return false;
758 } 807 }
759 808
760 oldPw = smtp->getPassword(); 809 oldPw = smtp->getPassword();
@@ -778,3 +827,3 @@ bool SMTPwrapper::flushOutbox(SMTPaccount*smtp) {
778 827
779 828
780 mailsToSend.setAutoDelete(false); 829 mailsToSend.setAutoDelete(false);