summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/mail/libmailwrapper/smtpwrapper.cpp108
1 files changed, 67 insertions, 41 deletions
diff --git a/noncore/net/mail/libmailwrapper/smtpwrapper.cpp b/noncore/net/mail/libmailwrapper/smtpwrapper.cpp
index 7671133..e8db9ca 100644
--- a/noncore/net/mail/libmailwrapper/smtpwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/smtpwrapper.cpp
@@ -19,8 +19,7 @@
#include "logindialog.h"
#include "mailtypes.h"
-//#include "defines.h"
#include "sendmailprogress.h"
-const char* SMTPwrapper::USER_AGENT="OpieMail v0.3";
+const char* SMTPwrapper::USER_AGENT="OpieMail v0.4";
progressMailSend*SMTPwrapper::sendProgress = 0;
@@ -573,4 +572,5 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT
mailsmtp *session;
int err,result;
+ QString failuretext = "";
result = 1;
@@ -589,6 +589,9 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT
session = mailsmtp_new( 20, &progress );
- if ( session == NULL )
- goto free_mem;
+ if ( session == NULL ) {
+ /* no failure message cause this happens when problems with memory - than we
+ we can not display any messagebox */
+ return 0;
+ }
qDebug( "Servername %s at port %i", server, port );
@@ -602,19 +605,17 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT
if ( err != MAILSMTP_NO_ERROR ) {
qDebug("Error init connection");
- storeFailedMail(data,size,mailsmtpError(err));
+ failuretext = tr("Error init SMTP connection: %1").arg(mailsmtpError(err));
result = 0;
- goto free_mem_session;
}
- err = mailsmtp_init( session );
- if ( err != MAILSMTP_NO_ERROR ) {
- storeFailedMail(data,size,mailsmtpError(err));
- result = 0;
- goto free_con_session;
+ if (result) {
+ err = mailsmtp_init( session );
+ if (err != MAILSMTP_NO_ERROR) {
+ result = 0;
+ failuretext = tr("Error init SMTP connection: %1").arg(mailsmtpError(err));
+ }
}
- qDebug( "INIT OK" );
-
- if ( smtp->getLogin() ) {
+ if (result==1 && smtp->getLogin() ) {
qDebug("smtp with auth");
if ( smtp->getUser().isEmpty() || smtp->getPassword().isEmpty() ) {
@@ -628,5 +629,5 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT
} else {
result = 0;
- goto free_con_session;
+ failuretext=tr("Login aborted - storing mail to localfolder");
}
} else {
@@ -635,35 +636,33 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT
}
qDebug( "session->auth: %i", session->auth);
- err = mailsmtp_auth( session, (char*)user, (char*)pass );
- if ( err == MAILSMTP_NO_ERROR ) {
- qDebug("auth ok");
- } else {
- storeFailedMail(data,size,tr("Authentification failed"));
- result = 0;
- goto free_con_session;
+ if (result) {
+ err = mailsmtp_auth( session, (char*)user, (char*)pass );
+ if ( err == MAILSMTP_NO_ERROR ) {
+ qDebug("auth ok");
+ } else {
+ failuretext = tr("Authentification failed");
+ result = 0;
+ }
}
- qDebug( "Done auth!" );
- } else {
- qDebug("SMTP without auth");
- result = 0;
- goto free_con_session;
}
- err = mailsmtp_send( session, from, rcpts, data, size );
- if ( err != MAILSMTP_NO_ERROR ) {
- storeFailedMail(data,size,mailsmtpError(err));
- qDebug("Error sending mail: %s",mailsmtpError(err).latin1());
- result = 0;
- goto free_con_session;
+ if (result) {
+ err = mailsmtp_send( session, from, rcpts, data, size );
+ if ( err != MAILSMTP_NO_ERROR ) {
+ failuretext=tr("Error sending mail: %1").arg(mailsmtpError(err));
+ result = 0;
+ }
}
- qDebug( "Mail sent." );
- storeMail(data,size,"Sent");
-
-free_con_session:
- mailsmtp_quit( session );
-free_mem_session:
- mailsmtp_free( session );
-free_mem:
+ if (!result) {
+ storeFailedMail(data,size,failuretext);
+ } else {
+ qDebug( "Mail sent." );
+ storeMail(data,size,"Sent");
+ }
+ if (session) {
+ mailsmtp_quit( session );
+ mailsmtp_free( session );
+ }
return result;
}
@@ -742,4 +741,5 @@ bool SMTPwrapper::flushOutbox(SMTPaccount*smtp) {
return false;
+ bool reset_user_value = false;
QString localfolders = AbstractMail::defaultLocalfolder();
AbstractMail*wrap = AbstractMail::getWrapper(localfolders);
@@ -748,4 +748,5 @@ bool SMTPwrapper::flushOutbox(SMTPaccount*smtp) {
return false;
}
+ QString oldPw, oldUser;
QList<RecMail> mailsToSend;
QList<RecMail> mailsToRemove;
@@ -756,4 +757,25 @@ bool SMTPwrapper::flushOutbox(SMTPaccount*smtp) {
return false;
}
+
+ oldPw = smtp->getPassword();
+ oldUser = smtp->getUser();
+ if (smtp->getLogin() && (smtp->getUser().isEmpty() || smtp->getPassword().isEmpty()) ) {
+ // get'em
+ QString user,pass;
+ LoginDialog login( smtp->getUser(), smtp->getPassword(), NULL, 0, true );
+ login.show();
+ if ( QDialog::Accepted == login.exec() ) {
+ // ok
+ user = login.getUser().latin1();
+ pass = login.getPassword().latin1();
+ reset_user_value = true;
+ smtp->setUser(user);
+ smtp->setPassword(pass);
+ } else {
+ return true;
+ }
+ }
+
+
mailsToSend.setAutoDelete(false);
sendProgress = new progressMailSend();
@@ -772,4 +794,8 @@ bool SMTPwrapper::flushOutbox(SMTPaccount*smtp) {
sendProgress->setCurrentMails(mailsToRemove.count());
}
+ if (reset_user_value) {
+ smtp->setUser(oldUser);
+ smtp->setPassword(oldPw);
+ }
Config cfg( "mail" );
cfg.setGroup( "Status" );