summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/net/mail/composemail.cpp4
-rw-r--r--noncore/net/mail/libmailwrapper/smtpwrapper.cpp154
-rw-r--r--noncore/net/mail/libmailwrapper/smtpwrapper.h25
-rw-r--r--noncore/net/mail/opiemail.cpp5
4 files changed, 105 insertions, 83 deletions
diff --git a/noncore/net/mail/composemail.cpp b/noncore/net/mail/composemail.cpp
index 5e823e8..abcc3f6 100644
--- a/noncore/net/mail/composemail.cpp
+++ b/noncore/net/mail/composemail.cpp
@@ -221,6 +221,6 @@ void ComposeMail::accept()
}
- SMTPwrapper wrapper( settings );
- wrapper.sendMail( *mail,smtp,checkBoxLater->isChecked() );
+ SMTPwrapper wrapper( smtp );
+ wrapper.sendMail( *mail,checkBoxLater->isChecked() );
QDialog::accept();
diff --git a/noncore/net/mail/libmailwrapper/smtpwrapper.cpp b/noncore/net/mail/libmailwrapper/smtpwrapper.cpp
index 3ab6b77..a3c68ae 100644
--- a/noncore/net/mail/libmailwrapper/smtpwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/smtpwrapper.cpp
@@ -25,7 +25,8 @@ const char* SMTPwrapper::USER_AGENT="OpieMail v0.4";
progressMailSend*SMTPwrapper::sendProgress = 0;
-SMTPwrapper::SMTPwrapper( Settings *s )
-: QObject() {
- settings = s;
+SMTPwrapper::SMTPwrapper(SMTPaccount * aSmtp )
+ : QObject()
+{
+ m_SmtpAccount = aSmtp;
Config cfg( "mail" );
cfg.setGroup( "Status" );
@@ -33,4 +34,10 @@ SMTPwrapper::SMTPwrapper( Settings *s )
emit queuedMails( m_queuedMail );
connect( this, SIGNAL( queuedMails( int ) ), this, SLOT( emitQCop( int ) ) );
+ m_smtp = 0;
+}
+
+SMTPwrapper::~SMTPwrapper()
+{
+ disc_server();
}
@@ -511,12 +518,9 @@ void SMTPwrapper::storeMail(const char*mail, size_t length, const QString&box) {
}
-void SMTPwrapper::smtpSend( mailmime *mail,bool later, SMTPaccount *smtp ) {
+void SMTPwrapper::smtpSend( mailmime *mail,bool later) {
clist *rcpts = 0;
char *from, *data;
size_t size;
- if ( smtp == NULL ) {
- return;
- }
from = data = 0;
@@ -546,5 +550,5 @@ void SMTPwrapper::smtpSend( mailmime *mail,bool later, SMTPaccount *smtp ) {
from = getFrom( mail );
rcpts = createRcptList( mail->mm_data.mm_message.mm_fields );
- smtpSend(from,rcpts,data,size,smtp);
+ smtpSend(from,rcpts,data,size);
if (data) {
free(data);
@@ -568,14 +572,14 @@ void SMTPwrapper::storeFailedMail(const char*data,unsigned int size, const char*
}
-int SMTPwrapper::start_smtp_tls(mailsmtp *session)
+int SMTPwrapper::start_smtp_tls()
{
- if (!session) {
+ if (!m_smtp) {
return MAILSMTP_ERROR_IN_PROCESSING;
}
- int err = mailesmtp_starttls(session);
+ int err = mailesmtp_starttls(m_smtp);
if (err != MAILSMTP_NO_ERROR) return err;
mailstream_low * low;
mailstream_low * new_low;
- low = mailstream_get_low(session->stream);
+ low = mailstream_get_low(m_smtp->stream);
if (!low) {
return MAILSMTP_ERROR_IN_PROCESSING;
@@ -584,5 +588,5 @@ int SMTPwrapper::start_smtp_tls(mailsmtp *session)
if (fd > -1 && (new_low = mailstream_low_ssl_open(fd))!=0) {
mailstream_low_free(low);
- mailstream_set_low(session->stream, new_low);
+ mailstream_set_low(m_smtp->stream, new_low);
} else {
return MAILSMTP_ERROR_IN_PROCESSING;
@@ -591,45 +595,43 @@ int SMTPwrapper::start_smtp_tls(mailsmtp *session)
}
-int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMTPaccount *smtp ) {
+void SMTPwrapper::connect_server()
+{
const char *server, *user, *pass;
bool ssl;
uint16_t port;
- mailsmtp *session;
- int err,result;
- QString failuretext = "";
-
- result = 1;
- server = user = pass = 0;
- server = smtp->getServer().latin1();
-
- // FIXME: currently only TLS and Plain work.
-
ssl = false;
bool try_tls = true;
bool force_tls=false;
+ server = user = pass = 0;
+ QString failuretext = "";
- if ( smtp->ConnectionType() == 2 ) {
+ if (m_smtp || !m_SmtpAccount) {
+ return;
+ }
+ server = m_SmtpAccount->getServer().latin1();
+ if ( m_SmtpAccount->ConnectionType() == 2 ) {
ssl = true;
try_tls = false;
- } else if (smtp->ConnectionType() == 1) {
+ } else if (m_SmtpAccount->ConnectionType() == 1) {
force_tls = true;
}
+ int result = 1;
+ port = m_SmtpAccount->getPort().toUInt();
- port = smtp->getPort().toUInt();
-
- session = mailsmtp_new( 20, &progress );
- if ( session == NULL ) {
+ m_smtp = mailsmtp_new( 20, &progress );
+ if ( m_smtp == NULL ) {
/* no failure message cause this happens when problems with memory - than we
we can not display any messagebox */
- return 0;
+ return;
}
+ int err = MAILSMTP_NO_ERROR;
qDebug( "Servername %s at port %i", server, port );
if ( ssl ) {
qDebug( "SSL session" );
- err = mailsmtp_ssl_connect( session, server, port );
+ err = mailsmtp_ssl_connect( m_smtp, server, port );
} else {
qDebug( "No SSL session" );
- err = mailsmtp_socket_connect( session, server, port );
+ err = mailsmtp_socket_connect( m_smtp, server, port );
}
if ( err != MAILSMTP_NO_ERROR ) {
@@ -641,5 +643,5 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT
/* switch to tls after init 'cause there it will send the ehlo */
if (result) {
- err = mailsmtp_init( session );
+ err = mailsmtp_init( m_smtp );
if (err != MAILSMTP_NO_ERROR) {
result = 0;
@@ -649,9 +651,9 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT
if (try_tls) {
- err = start_smtp_tls(session);
+ err = start_smtp_tls();
if (err != MAILSMTP_NO_ERROR) {
try_tls = false;
} else {
- err = mailesmtp_ehlo(session);
+ err = mailesmtp_ehlo(m_smtp);
}
}
@@ -662,9 +664,10 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT
}
- if (result==1 && smtp->getLogin() ) {
+ if (result==1 && m_SmtpAccount->getLogin() ) {
qDebug("smtp with auth");
- if ( smtp->getUser().isEmpty() || smtp->getPassword().isEmpty() ) {
+ if ( m_SmtpAccount->getUser().isEmpty() || m_SmtpAccount->getPassword().isEmpty() ) {
// get'em
- LoginDialog login( smtp->getUser(), smtp->getPassword(), NULL, 0, true );
+ LoginDialog login( m_SmtpAccount->getUser(),
+ m_SmtpAccount->getPassword(), NULL, 0, true );
login.show();
if ( QDialog::Accepted == login.exec() ) {
@@ -677,10 +680,10 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT
}
} else {
- user = smtp->getUser().latin1();
- pass = smtp->getPassword().latin1();
+ user = m_SmtpAccount->getUser().latin1();
+ pass = m_SmtpAccount->getPassword().latin1();
}
- qDebug( "session->auth: %i", session->auth);
+ qDebug( "session->auth: %i", m_smtp->auth);
if (result) {
- err = mailsmtp_auth( session, (char*)user, (char*)pass );
+ err = mailsmtp_auth( m_smtp, (char*)user, (char*)pass );
if ( err == MAILSMTP_NO_ERROR ) {
qDebug("auth ok");
@@ -691,11 +694,31 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT
}
}
+}
- if (result) {
- err = mailsmtp_send( session, from, rcpts, data, size );
+void SMTPwrapper::disc_server()
+{
+ if (m_smtp) {
+ mailsmtp_quit( m_smtp );
+ mailsmtp_free( m_smtp );
+ m_smtp = 0;
+ }
+}
+
+int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size )
+{
+ int err,result;
+ QString failuretext = "";
+
+ connect_server();
+
+ result = 1;
+ if (m_smtp) {
+ err = mailsmtp_send( m_smtp, from, rcpts, data, size );
if ( err != MAILSMTP_NO_ERROR ) {
failuretext=tr("Error sending mail: %1").arg(mailsmtpError(err));
result = 0;
}
+ } else {
+ result = 0;
}
@@ -706,20 +729,11 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT
storeMail(data,size,"Sent");
}
- if (session) {
- mailsmtp_quit( session );
- mailsmtp_free( session );
- }
return result;
}
-void SMTPwrapper::sendMail(const Mail&mail,SMTPaccount*aSmtp,bool later ) {
+void SMTPwrapper::sendMail(const Mail&mail,bool later )
+{
mailmime * mimeMail;
- SMTPaccount *smtp = aSmtp;
-
- if (!later && !smtp) {
- qDebug("Didn't get any send method - giving up");
- return;
- }
mimeMail = createMimeMail(mail );
if ( mimeMail == NULL ) {
@@ -729,5 +743,5 @@ void SMTPwrapper::sendMail(const Mail&mail,SMTPaccount*aSmtp,bool later ) {
sendProgress->show();
sendProgress->setMaxMails(1);
- smtpSend( mimeMail,later,smtp);
+ smtpSend( mimeMail,later);
qDebug("Clean up done");
sendProgress->hide();
@@ -738,5 +752,5 @@ void SMTPwrapper::sendMail(const Mail&mail,SMTPaccount*aSmtp,bool later ) {
}
-int SMTPwrapper::sendQueuedMail(AbstractMail*wrap,SMTPaccount*smtp,RecMail*which) {
+int SMTPwrapper::sendQueuedMail(AbstractMail*wrap,RecMail*which) {
size_t curTok = 0;
mailimf_fields *fields = 0;
@@ -761,5 +775,5 @@ int SMTPwrapper::sendQueuedMail(AbstractMail*wrap,SMTPaccount*smtp,RecMail*which
if (rcpts && from) {
- res = smtpSend(from,rcpts,data->Content(),data->Length(),smtp );
+ res = smtpSend(from,rcpts,data->Content(),data->Length());
}
if (fields) {
@@ -780,9 +794,9 @@ int SMTPwrapper::sendQueuedMail(AbstractMail*wrap,SMTPaccount*smtp,RecMail*which
/* this is a special fun */
-bool SMTPwrapper::flushOutbox(SMTPaccount*smtp) {
+bool SMTPwrapper::flushOutbox() {
bool returnValue = true;
qDebug("Sending the queue");
- if (!smtp) {
+ if (!m_SmtpAccount) {
qDebug("No smtp account given");
return false;
@@ -807,10 +821,10 @@ bool SMTPwrapper::flushOutbox(SMTPaccount*smtp) {
}
- oldPw = smtp->getPassword();
- oldUser = smtp->getUser();
- if (smtp->getLogin() && (smtp->getUser().isEmpty() || smtp->getPassword().isEmpty()) ) {
+ oldPw = m_SmtpAccount->getPassword();
+ oldUser = m_SmtpAccount->getUser();
+ if (m_SmtpAccount->getLogin() && (m_SmtpAccount->getUser().isEmpty() || m_SmtpAccount->getPassword().isEmpty()) ) {
// get'em
QString user,pass;
- LoginDialog login( smtp->getUser(), smtp->getPassword(), NULL, 0, true );
+ LoginDialog login( m_SmtpAccount->getUser(), m_SmtpAccount->getPassword(), NULL, 0, true );
login.show();
if ( QDialog::Accepted == login.exec() ) {
@@ -819,6 +833,6 @@ bool SMTPwrapper::flushOutbox(SMTPaccount*smtp) {
pass = login.getPassword().latin1();
reset_user_value = true;
- smtp->setUser(user);
- smtp->setPassword(pass);
+ m_SmtpAccount->setUser(user);
+ m_SmtpAccount->setPassword(pass);
} else {
return true;
@@ -833,5 +847,5 @@ bool SMTPwrapper::flushOutbox(SMTPaccount*smtp) {
while (mailsToSend.count()>0) {
- if (sendQueuedMail(wrap,smtp,mailsToSend.at(0))==0) {
+ if (sendQueuedMail(wrap,mailsToSend.at(0))==0) {
QMessageBox::critical(0,tr("Error sending mail"),
tr("Error sending queued mail - breaking"));
@@ -844,6 +858,6 @@ bool SMTPwrapper::flushOutbox(SMTPaccount*smtp) {
}
if (reset_user_value) {
- smtp->setUser(oldUser);
- smtp->setPassword(oldPw);
+ m_SmtpAccount->setUser(oldUser);
+ m_SmtpAccount->setPassword(oldPw);
}
Config cfg( "mail" );
diff --git a/noncore/net/mail/libmailwrapper/smtpwrapper.h b/noncore/net/mail/libmailwrapper/smtpwrapper.h
index 75e4891..7f6aac1 100644
--- a/noncore/net/mail/libmailwrapper/smtpwrapper.h
+++ b/noncore/net/mail/libmailwrapper/smtpwrapper.h
@@ -1,2 +1,3 @@
+// -*- Mode: C++; -*-
#ifndef SMTPwrapper_H
#define SMTPwrapper_H
@@ -21,4 +22,5 @@ struct mailimf_address_list;
class progressMailSend;
struct mailsmtp;
+class SMTPaccount;
class SMTPwrapper : public QObject
@@ -27,8 +29,8 @@ class SMTPwrapper : public QObject
public:
- SMTPwrapper( Settings *s );
- virtual ~SMTPwrapper(){}
- void sendMail(const Mail& mail,SMTPaccount*smtp,bool later=false );
- bool flushOutbox(SMTPaccount*smtp);
+ SMTPwrapper(SMTPaccount * aSmtp);
+ virtual ~SMTPwrapper();
+ void sendMail(const Mail& mail,bool later=false );
+ bool flushOutbox();
static progressMailSend*sendProgress;
@@ -38,4 +40,11 @@ signals:
protected:
+ mailsmtp *m_smtp;
+ SMTPaccount * m_SmtpAccount;
+
+ void connect_server();
+ void disc_server();
+ int start_smtp_tls();
+
mailimf_mailbox *newMailbox(const QString&name,const QString&mail );
mailimf_fields *createImfFields(const Mail &mail );
@@ -46,5 +55,5 @@ protected:
mailmime *buildTxtPart(const QString&str );
mailmime *buildFilePart(const QString&filename,const QString&mimetype,const QString&content);
- void smtpSend( mailmime *mail,bool later, SMTPaccount *smtp );
+ void smtpSend( mailmime *mail,bool later);
clist *createRcptList( mailimf_fields *fields );
@@ -56,12 +65,10 @@ protected:
static char *getFrom( mailimf_field *ffrom);
static mailimf_field *getField( mailimf_fields *fields, int type );
- static int start_smtp_tls(mailsmtp *session);
- int smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMTPaccount *smtp );
+ int smtpSend(char*from,clist*rcpts,const char*data,size_t size);
void storeMail(mailmime*mail, const QString&box);
- Settings *settings;
- int sendQueuedMail(AbstractMail*wrap,SMTPaccount*smtp,RecMail*which);
+ int sendQueuedMail(AbstractMail*wrap,RecMail*which);
void storeFailedMail(const char*data,unsigned int size, const char*failuremessage);
diff --git a/noncore/net/mail/opiemail.cpp b/noncore/net/mail/opiemail.cpp
index ea0019d..0795436 100644
--- a/noncore/net/mail/opiemail.cpp
+++ b/noncore/net/mail/opiemail.cpp
@@ -95,8 +95,9 @@ void OpieMail::slotSendQueued()
}
if (smtp) {
- SMTPwrapper * wrap = new SMTPwrapper(settings);
- if ( wrap->flushOutbox(smtp) ) {
+ SMTPwrapper * wrap = new SMTPwrapper(smtp);
+ if ( wrap->flushOutbox() ) {
QMessageBox::information(0,tr("Info"),tr("Mail queue flushed"));
}
+ delete wrap;
}
}