author | harlekin <harlekin> | 2004-01-08 22:00:28 (UTC) |
---|---|---|
committer | harlekin <harlekin> | 2004-01-08 22:00:28 (UTC) |
commit | 96f44572cb3ac54a685515694d6c095101df9365 (patch) (side-by-side diff) | |
tree | 5b2aa1b30990dee38df43f51478dc58b0c62d6d5 /noncore/net | |
parent | fb30e3e116d8616cb05b3765ae1aed5f7e96c74e (diff) | |
download | opie-96f44572cb3ac54a685515694d6c095101df9365.zip opie-96f44572cb3ac54a685515694d6c095101df9365.tar.gz opie-96f44572cb3ac54a685515694d6c095101df9365.tar.bz2 |
more smtp settings
-rw-r--r-- | noncore/net/mail/editaccounts.cpp | 22 | ||||
-rw-r--r-- | noncore/net/mail/editaccounts.h | 2 | ||||
-rw-r--r-- | noncore/net/mail/libmailwrapper/settings.cpp | 4 | ||||
-rw-r--r-- | noncore/net/mail/libmailwrapper/smtpwrapper.cpp | 308 | ||||
-rw-r--r-- | noncore/net/mail/smtpconfigui.ui | 433 |
5 files changed, 459 insertions, 310 deletions
diff --git a/noncore/net/mail/editaccounts.cpp b/noncore/net/mail/editaccounts.cpp index 0c0ecaf..9fc97e8 100644 --- a/noncore/net/mail/editaccounts.cpp +++ b/noncore/net/mail/editaccounts.cpp @@ -370,13 +370,23 @@ SMTPconfig::SMTPconfig( SMTPaccount *account, QWidget *parent, const char *name, fillValues(); - connect( sslBox, SIGNAL( toggled( bool ) ), SLOT( slotSSL( bool ) ) ); + connect( ComboBox1, SIGNAL( activated( int ) ), SLOT( slotConnectionToggle( int ) ) ); + ComboBox1->insertItem( "Only if available", 0 ); + ComboBox1->insertItem( "Always, Negotiated", 1 ); + ComboBox1->insertItem( "Connect on secure port", 2 ); + ComboBox1->insertItem( "Run command instead", 3 ); + CommandEdit->hide(); + ComboBox1->setCurrentItem( data->ConnectionType() ); } -void SMTPconfig::slotSSL( bool enabled ) +void SMTPconfig::slotConnectionToggle( int index ) { - if ( enabled ) { - portLine->setText( SMTP_SSL_PORT ); + // 2 is ssl connection + if ( index == 2 ) { + portLine->setText( SMTP_SSL_PORT ); + } else if ( index == 3 ) { + portLine->setText( SMTP_PORT ); + CommandEdit->show(); } else { portLine->setText( SMTP_PORT ); } @@ -387,7 +397,7 @@ void SMTPconfig::fillValues() accountLine->setText( data->getAccountName() ); serverLine->setText( data->getServer() ); portLine->setText( data->getPort() ); - sslBox->setChecked( data->getSSL() ); + ComboBox1->setCurrentItem( data->ConnectionType() ); loginBox->setChecked( data->getLogin() ); userLine->setText( data->getUser() ); passLine->setText( data->getPassword() ); @@ -398,7 +408,7 @@ void SMTPconfig::accept() data->setAccountName( accountLine->text() ); data->setServer( serverLine->text() ); data->setPort( portLine->text() ); - data->setSSL( sslBox->isChecked() ); + data->setConnectionType( ComboBox1->currentItem() ); data->setLogin( loginBox->isChecked() ); data->setUser( userLine->text() ); data->setPassword( passLine->text() ); diff --git a/noncore/net/mail/editaccounts.h b/noncore/net/mail/editaccounts.h index fb4be71..d51e299 100644 --- a/noncore/net/mail/editaccounts.h +++ b/noncore/net/mail/editaccounts.h @@ -114,10 +114,10 @@ public: SMTPconfig( SMTPaccount *account, QWidget *parent = 0, const char *name = 0, bool modal = 0, WFlags flags = 0 ); public slots: - void slotSSL( bool enabled ); void fillValues(); protected slots: + void slotConnectionToggle( int index ); void accept(); private: diff --git a/noncore/net/mail/libmailwrapper/settings.cpp b/noncore/net/mail/libmailwrapper/settings.cpp index 83e51e3..7b6a58d 100644 --- a/noncore/net/mail/libmailwrapper/settings.cpp +++ b/noncore/net/mail/libmailwrapper/settings.cpp @@ -283,6 +283,7 @@ SMTPaccount::SMTPaccount() file = SMTPaccount::getUniqueFileName(); accountName = "New SMTP Account"; ssl = false; + connectionType = 1; login = false; useCC = false; useBCC = false; @@ -297,6 +298,7 @@ SMTPaccount::SMTPaccount( QString filename ) file = filename; accountName = "New SMTP Account"; ssl = false; + connectionType = 1; login = false; type = "SMTP"; port = SMTP_PORT; @@ -325,6 +327,7 @@ void SMTPaccount::read() server = conf->readEntry( "Server" ); port = conf->readEntry( "Port" ); ssl = conf->readBoolEntry( "SSL" ); + connectionType = conf->readNumEntry( "ConnectionType" ); login = conf->readBoolEntry( "Login" ); user = conf->readEntry( "User" ); password = conf->readEntryCrypt( "Password" ); @@ -342,6 +345,7 @@ void SMTPaccount::save() conf->writeEntry( "Server", server ); conf->writeEntry( "Port", port ); conf->writeEntry( "SSL", ssl ); + conf->writeEntry( "ConnectionType", connectionType ); conf->writeEntry( "Login", login ); conf->writeEntry( "User", user ); conf->writeEntryCrypt( "Password", password ); diff --git a/noncore/net/mail/libmailwrapper/smtpwrapper.cpp b/noncore/net/mail/libmailwrapper/smtpwrapper.cpp index 08f6bb7..085d5e4 100644 --- a/noncore/net/mail/libmailwrapper/smtpwrapper.cpp +++ b/noncore/net/mail/libmailwrapper/smtpwrapper.cpp @@ -25,8 +25,7 @@ const char* SMTPwrapper::USER_AGENT="OpieMail v0.3"; progressMailSend*SMTPwrapper::sendProgress = 0; SMTPwrapper::SMTPwrapper( Settings *s ) - : QObject() -{ +: QObject() { settings = s; Config cfg( "mail" ); cfg.setGroup( "Status" ); @@ -40,59 +39,57 @@ void SMTPwrapper::emitQCop( int queued ) { env << queued; } -QString SMTPwrapper::mailsmtpError( int errnum ) -{ +QString SMTPwrapper::mailsmtpError( int errnum ) { switch ( errnum ) { - case MAILSMTP_NO_ERROR: - return tr( "No error" ); - case MAILSMTP_ERROR_UNEXPECTED_CODE: - return tr( "Unexpected error code" ); - case MAILSMTP_ERROR_SERVICE_NOT_AVAILABLE: - return tr( "Service not available" ); - case MAILSMTP_ERROR_STREAM: - return tr( "Stream error" ); - case MAILSMTP_ERROR_HOSTNAME: - return tr( "gethostname() failed" ); - case MAILSMTP_ERROR_NOT_IMPLEMENTED: - return tr( "Not implemented" ); - case MAILSMTP_ERROR_ACTION_NOT_TAKEN: - return tr( "Error, action not taken" ); - case MAILSMTP_ERROR_EXCEED_STORAGE_ALLOCATION: - return tr( "Data exceeds storage allocation" ); - case MAILSMTP_ERROR_IN_PROCESSING: - return tr( "Error in processing" ); - // case MAILSMTP_ERROR_INSUFFISANT_SYSTEM_STORAGE: - // return tr( "Insufficient system storage" ); - case MAILSMTP_ERROR_MAILBOX_UNAVAILABLE: - return tr( "Mailbox unavailable" ); - case MAILSMTP_ERROR_MAILBOX_NAME_NOT_ALLOWED: - return tr( "Mailbox name not allowed" ); - case MAILSMTP_ERROR_BAD_SEQUENCE_OF_COMMAND: - return tr( "Bad command sequence" ); - case MAILSMTP_ERROR_USER_NOT_LOCAL: - return tr( "User not local" ); - case MAILSMTP_ERROR_TRANSACTION_FAILED: - return tr( "Transaction failed" ); - case MAILSMTP_ERROR_MEMORY: - return tr( "Memory error" ); - case MAILSMTP_ERROR_CONNECTION_REFUSED: - return tr( "Connection refused" ); - default: - return tr( "Unknown error code" ); + case MAILSMTP_NO_ERROR: + return tr( "No error" ); + case MAILSMTP_ERROR_UNEXPECTED_CODE: + return tr( "Unexpected error code" ); + case MAILSMTP_ERROR_SERVICE_NOT_AVAILABLE: + return tr( "Service not available" ); + case MAILSMTP_ERROR_STREAM: + return tr( "Stream error" ); + case MAILSMTP_ERROR_HOSTNAME: + return tr( "gethostname() failed" ); + case MAILSMTP_ERROR_NOT_IMPLEMENTED: + return tr( "Not implemented" ); + case MAILSMTP_ERROR_ACTION_NOT_TAKEN: + return tr( "Error, action not taken" ); + case MAILSMTP_ERROR_EXCEED_STORAGE_ALLOCATION: + return tr( "Data exceeds storage allocation" ); + case MAILSMTP_ERROR_IN_PROCESSING: + return tr( "Error in processing" ); + // case MAILSMTP_ERROR_INSUFFISANT_SYSTEM_STORAGE: + // return tr( "Insufficient system storage" ); + case MAILSMTP_ERROR_MAILBOX_UNAVAILABLE: + return tr( "Mailbox unavailable" ); + case MAILSMTP_ERROR_MAILBOX_NAME_NOT_ALLOWED: + return tr( "Mailbox name not allowed" ); + case MAILSMTP_ERROR_BAD_SEQUENCE_OF_COMMAND: + return tr( "Bad command sequence" ); + case MAILSMTP_ERROR_USER_NOT_LOCAL: + return tr( "User not local" ); + case MAILSMTP_ERROR_TRANSACTION_FAILED: + return tr( "Transaction failed" ); + case MAILSMTP_ERROR_MEMORY: + return tr( "Memory error" ); + case MAILSMTP_ERROR_CONNECTION_REFUSED: + return tr( "Connection refused" ); + default: + return tr( "Unknown error code" ); } } -mailimf_mailbox *SMTPwrapper::newMailbox(const QString&name, const QString&mail ) -{ +mailimf_mailbox *SMTPwrapper::newMailbox(const QString&name, const QString&mail ) { return mailimf_mailbox_new( strdup( name.latin1() ), strdup( mail.latin1() ) ); } -mailimf_address_list *SMTPwrapper::parseAddresses(const QString&addr ) -{ +mailimf_address_list *SMTPwrapper::parseAddresses(const QString&addr ) { mailimf_address_list *addresses; - if ( addr.isEmpty() ) return NULL; + if ( addr.isEmpty() ) + return NULL; addresses = mailimf_address_list_new_empty(); @@ -123,8 +120,8 @@ mailimf_address_list *SMTPwrapper::parseAddresses(const QString&addr ) } s = addr.mid(startpos,i-startpos); if (!s.isEmpty()) { - list.append(s); - qDebug("Appended %s",s.latin1()); + list.append(s); + qDebug("Appended %s",s.latin1()); } QStringList::Iterator it; for ( it = list.begin(); it != list.end(); it++ ) { @@ -139,8 +136,7 @@ mailimf_address_list *SMTPwrapper::parseAddresses(const QString&addr ) return addresses; } -mailimf_fields *SMTPwrapper::createImfFields(const Mail&mail ) -{ +mailimf_fields *SMTPwrapper::createImfFields(const Mail&mail ) { mailimf_fields *fields; mailimf_field *xmailer; mailimf_mailbox *sender=0,*fromBox=0; @@ -150,19 +146,24 @@ mailimf_fields *SMTPwrapper::createImfFields(const Mail&mail ) int err; sender = newMailbox( mail.getName(), mail.getMail() ); - if ( sender == NULL ) goto err_free; + if ( sender == NULL ) + goto err_free; fromBox = newMailbox( mail.getName(), mail.getMail() ); - if ( fromBox == NULL ) goto err_free_sender; + if ( fromBox == NULL ) + goto err_free_sender; from = mailimf_mailbox_list_new_empty(); - if ( from == NULL ) goto err_free_fromBox; + if ( from == NULL ) + goto err_free_fromBox; err = mailimf_mailbox_list_add( from, fromBox ); - if ( err != MAILIMF_NO_ERROR ) goto err_free_from; + if ( err != MAILIMF_NO_ERROR ) + goto err_free_from; to = parseAddresses( mail.getTo() ); - if ( to == NULL ) goto err_free_from; + if ( to == NULL ) + goto err_free_from; cc = parseAddresses( mail.getCC() ); bcc = parseAddresses( mail.getBCC() ); @@ -170,41 +171,52 @@ mailimf_fields *SMTPwrapper::createImfFields(const Mail&mail ) fields = mailimf_fields_new_with_data( from, sender, reply, to, cc, bcc, NULL, NULL, subject ); - if ( fields == NULL ) goto err_free_reply; + if ( fields == NULL ) + goto err_free_reply; xmailer = mailimf_field_new_custom( strdup( "User-Agent" ), strdup( USER_AGENT ) ); - if ( xmailer == NULL ) goto err_free_fields; + if ( xmailer == NULL ) + goto err_free_fields; err = mailimf_fields_add( fields, xmailer ); - if ( err != MAILIMF_NO_ERROR ) goto err_free_xmailer; + if ( err != MAILIMF_NO_ERROR ) + goto err_free_xmailer; return fields; // Success :) err_free_xmailer: - if (xmailer) mailimf_field_free( xmailer ); + if (xmailer) + mailimf_field_free( xmailer ); err_free_fields: - if (fields) mailimf_fields_free( fields ); + if (fields) + mailimf_fields_free( fields ); err_free_reply: - if (reply) mailimf_address_list_free( reply ); - if (bcc) mailimf_address_list_free( bcc ); - if (cc) mailimf_address_list_free( cc ); - if (to) mailimf_address_list_free( to ); + if (reply) + mailimf_address_list_free( reply ); + if (bcc) + mailimf_address_list_free( bcc ); + if (cc) + mailimf_address_list_free( cc ); + if (to) + mailimf_address_list_free( to ); err_free_from: - if (from) mailimf_mailbox_list_free( from ); + if (from) + mailimf_mailbox_list_free( from ); err_free_fromBox: mailimf_mailbox_free( fromBox ); err_free_sender: - if (sender) mailimf_mailbox_free( sender ); + if (sender) + mailimf_mailbox_free( sender ); err_free: - if (subject) free( subject ); + if (subject) + free( subject ); qDebug( "createImfFields - error" ); return NULL; // Error :( } -mailmime *SMTPwrapper::buildTxtPart(const QString&str ) -{ +mailmime *SMTPwrapper::buildTxtPart(const QString&str ) { mailmime *txtPart; mailmime_fields *fields; mailmime_content *content; @@ -213,22 +225,28 @@ mailmime *SMTPwrapper::buildTxtPart(const QString&str ) param = mailmime_parameter_new( strdup( "charset" ), strdup( "iso-8859-1" ) ); - if ( param == NULL ) goto err_free; + if ( param == NULL ) + goto err_free; content = mailmime_content_new_with_str( "text/plain" ); - if ( content == NULL ) goto err_free_param; + if ( content == NULL ) + goto err_free_param; err = clist_append( content->ct_parameters, param ); - if ( err != MAILIMF_NO_ERROR ) goto err_free_content; + if ( err != MAILIMF_NO_ERROR ) + goto err_free_content; fields = mailmime_fields_new_encoding(MAILMIME_MECHANISM_8BIT); - if ( fields == NULL ) goto err_free_content; + if ( fields == NULL ) + goto err_free_content; txtPart = mailmime_new_empty( content, fields ); - if ( txtPart == NULL ) goto err_free_fields; + if ( txtPart == NULL ) + goto err_free_fields; err = mailmime_set_body_text( txtPart, (char*)str.data(), str.length() ); - if ( err != MAILIMF_NO_ERROR ) goto err_free_txtPart; + if ( err != MAILIMF_NO_ERROR ) + goto err_free_txtPart; return txtPart; // Success :) @@ -246,8 +264,7 @@ err_free: return NULL; // Error :( } -mailmime *SMTPwrapper::buildFilePart(const QString&filename,const QString&mimetype,const QString&TextContent ) -{ +mailmime *SMTPwrapper::buildFilePart(const QString&filename,const QString&mimetype,const QString&TextContent ) { mailmime * filePart = 0; mailmime_fields * fields = 0; mailmime_content * content = 0; @@ -274,8 +291,8 @@ mailmime *SMTPwrapper::buildFilePart(const QString&filename,const QString&mimety } fields = mailmime_fields_new_filename( - disptype, name, - mechanism ); + disptype, name, + mechanism ); content = mailmime_content_new_with_str( (char*)mimetype.latin1() ); if (content!=0 && fields != 0) { if (param) { @@ -325,8 +342,7 @@ mailmime *SMTPwrapper::buildFilePart(const QString&filename,const QString&mimety } -void SMTPwrapper::addFileParts( mailmime *message,const QList<Attachment>&files ) -{ +void SMTPwrapper::addFileParts( mailmime *message,const QList<Attachment>&files ) { const Attachment *it; unsigned int count = files.count(); qDebug("List contains %i values",count); @@ -350,26 +366,29 @@ void SMTPwrapper::addFileParts( mailmime *message,const QList<Attachment>&files } } -mailmime *SMTPwrapper::createMimeMail(const Mail &mail ) -{ +mailmime *SMTPwrapper::createMimeMail(const Mail &mail ) { mailmime *message, *txtPart; mailimf_fields *fields; int err; fields = createImfFields( mail ); - if ( fields == NULL ) goto err_free; + if ( fields == NULL ) + goto err_free; message = mailmime_new_message_data( NULL ); - if ( message == NULL ) goto err_free_fields; + if ( message == NULL ) + goto err_free_fields; mailmime_set_imf_fields( message, fields ); txtPart = buildTxtPart( mail.getMessage() ); - if ( txtPart == NULL ) goto err_free_message; + if ( txtPart == NULL ) + goto err_free_message; err = mailmime_smart_add_part( message, txtPart ); - if ( err != MAILIMF_NO_ERROR ) goto err_free_txtPart; + if ( err != MAILIMF_NO_ERROR ) + goto err_free_txtPart; addFileParts( message, mail.getAttachments() ); @@ -387,8 +406,7 @@ err_free: return NULL; // Error :( } -mailimf_field *SMTPwrapper::getField( mailimf_fields *fields, int type ) -{ +mailimf_field *SMTPwrapper::getField( mailimf_fields *fields, int type ) { mailimf_field *field; clistiter *it; @@ -404,8 +422,7 @@ mailimf_field *SMTPwrapper::getField( mailimf_fields *fields, int type ) return NULL; } -void SMTPwrapper::addRcpts( clist *list, mailimf_address_list *addr_list ) -{ +void SMTPwrapper::addRcpts( clist *list, mailimf_address_list *addr_list ) { clistiter *it, *it2; for ( it = clist_begin( addr_list->ad_list ); it; it = it->next ) { @@ -413,20 +430,19 @@ void SMTPwrapper::addRcpts( clist *list, mailimf_address_list *addr_list ) addr = (mailimf_address *) it->data; if ( addr->ad_type == MAILIMF_ADDRESS_MAILBOX ) { - esmtp_address_list_add( list, addr->ad_data.ad_mailbox->mb_addr_spec, 0, NULL ); + esmtp_address_list_add( list, addr->ad_data.ad_mailbox->mb_addr_spec, 0, NULL ); } else if ( addr->ad_type == MAILIMF_ADDRESS_GROUP ) { clist *l = addr->ad_data.ad_group->grp_mb_list->mb_list; - for ( it2 = clist_begin( l ); it2; it2 = it2->next ) { + for ( it2 = clist_begin( l ); it2; it2 = it2->next ) { mailimf_mailbox *mbox; - mbox = (mailimf_mailbox *) it2->data; - esmtp_address_list_add( list, mbox->mb_addr_spec, 0, NULL ); - } - } + mbox = (mailimf_mailbox *) it2->data; + esmtp_address_list_add( list, mbox->mb_addr_spec, 0, NULL ); + } + } } } -clist *SMTPwrapper::createRcptList( mailimf_fields *fields ) -{ +clist *SMTPwrapper::createRcptList( mailimf_fields *fields ) { clist *rcptList; mailimf_field *field; @@ -434,30 +450,29 @@ clist *SMTPwrapper::createRcptList( mailimf_fields *fields ) field = getField( fields, MAILIMF_FIELD_TO ); if ( field && (field->fld_type == MAILIMF_FIELD_TO) - && field->fld_data.fld_to->to_addr_list ) { + && field->fld_data.fld_to->to_addr_list ) { addRcpts( rcptList, field->fld_data.fld_to->to_addr_list ); } field = getField( fields, MAILIMF_FIELD_CC ); if ( field && (field->fld_type == MAILIMF_FIELD_CC) - && field->fld_data.fld_cc->cc_addr_list ) { + && field->fld_data.fld_cc->cc_addr_list ) { addRcpts( rcptList, field->fld_data.fld_cc->cc_addr_list ); } field = getField( fields, MAILIMF_FIELD_BCC ); if ( field && (field->fld_type == MAILIMF_FIELD_BCC) - && field->fld_data.fld_bcc->bcc_addr_list ) { + && field->fld_data.fld_bcc->bcc_addr_list ) { addRcpts( rcptList, field->fld_data.fld_bcc->bcc_addr_list ); } return rcptList; } -char *SMTPwrapper::getFrom( mailimf_field *ffrom) -{ +char *SMTPwrapper::getFrom( mailimf_field *ffrom) { char *from = NULL; if ( ffrom && (ffrom->fld_type == MAILIMF_FIELD_FROM) - && ffrom->fld_data.fld_from->frm_mb_list && ffrom->fld_data.fld_from->frm_mb_list->mb_list ) { + && ffrom->fld_data.fld_from->frm_mb_list && ffrom->fld_data.fld_from->frm_mb_list->mb_list ) { clist *cl = ffrom->fld_data.fld_from->frm_mb_list->mb_list; clistiter *it; for ( it = clist_begin( cl ); it; it = it->next ) { @@ -469,25 +484,23 @@ char *SMTPwrapper::getFrom( mailimf_field *ffrom) return from; } -char *SMTPwrapper::getFrom( mailmime *mail ) -{ +char *SMTPwrapper::getFrom( mailmime *mail ) { /* no need to delete - its just a pointer to structure content */ mailimf_field *ffrom = 0; ffrom = getField( mail->mm_data.mm_message.mm_fields, MAILIMF_FIELD_FROM ); return getFrom(ffrom); } -void SMTPwrapper::progress( size_t current, size_t maximum ) -{ +void SMTPwrapper::progress( size_t current, size_t maximum ) { if (SMTPwrapper::sendProgress) { SMTPwrapper::sendProgress->setSingleMail(current, maximum ); qApp->processEvents(); } } -void SMTPwrapper::storeMail(const char*mail, size_t length, const QString&box) -{ - if (!mail) return; +void SMTPwrapper::storeMail(const char*mail, size_t length, const QString&box) { + if (!mail) + return; QString localfolders = AbstractMail::defaultLocalfolder(); AbstractMail*wrap = AbstractMail::getWrapper(localfolders); wrap->createMbox(box); @@ -495,8 +508,7 @@ void SMTPwrapper::storeMail(const char*mail, size_t length, const QString&box) delete wrap; } -void SMTPwrapper::smtpSend( mailmime *mail,bool later, SMTPaccount *smtp ) -{ +void SMTPwrapper::smtpSend( mailmime *mail,bool later, SMTPaccount *smtp ) { clist *rcpts = 0; char *from, *data; size_t size; @@ -513,14 +525,16 @@ void SMTPwrapper::smtpSend( mailmime *mail,bool later, SMTPaccount *smtp ) mime_message_detach_mime(msg); mailmessage_free(msg); if (r != MAIL_NO_ERROR || !data) { - if (data) free(data); + if (data) + free(data); qDebug("Error fetching mime..."); return; } msg = 0; if (later) { storeMail(data,size,"Outgoing"); - if (data) free( data ); + if (data) + free( data ); Config cfg( "mail" ); cfg.setGroup( "Status" ); cfg.writeEntry( "outgoing", ++m_queuedMail ); @@ -530,13 +544,17 @@ 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); - if (data) {free(data);} - if (from) {free(from);} - if (rcpts) smtp_address_list_free( rcpts ); + if (data) { + free(data); + } + if (from) { + free(from); + } + if (rcpts) + smtp_address_list_free( rcpts ); } -int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMTPaccount *smtp ) -{ +int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMTPaccount *smtp ) { const char *server, *user, *pass; bool ssl; uint16_t port; @@ -546,11 +564,20 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT result = 1; server = user = pass = 0; server = smtp->getServer().latin1(); - ssl = smtp->getSSL(); + + // FIXME: currently only TLS and Plain work. + + ssl = false; + + if ( smtp->ConnectionType() == 2 ) { + ssl = true; + } + port = smtp->getPort().toUInt(); session = mailsmtp_new( 20, &progress ); - if ( session == NULL ) goto free_mem; + if ( session == NULL ) + goto free_mem; qDebug( "Servername %s at port %i", server, port ); if ( ssl ) { @@ -560,10 +587,17 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT qDebug( "No SSL session" ); err = mailsmtp_socket_connect( session, server, port ); } - if ( err != MAILSMTP_NO_ERROR ) {qDebug("Error init connection");result = 0;goto free_mem_session;} + if ( err != MAILSMTP_NO_ERROR ) { + qDebug("Error init connection"); + result = 0; + goto free_mem_session; + } err = mailsmtp_init( session ); - if ( err != MAILSMTP_NO_ERROR ) {result = 0; goto free_con_session;} + if ( err != MAILSMTP_NO_ERROR ) { + result = 0; + goto free_con_session; + } qDebug( "INIT OK" ); @@ -578,7 +612,8 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT user = login.getUser().latin1(); pass = login.getPassword().latin1(); } else { - result = 0; goto free_con_session; + result = 0; + goto free_con_session; } } else { user = smtp->getUser().latin1(); @@ -586,7 +621,8 @@ 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"); + if ( err == MAILSMTP_NO_ERROR ) + qDebug("auth ok"); qDebug( "Done auth!" ); } else { qDebug("SMTP without auth"); @@ -595,7 +631,8 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT err = mailsmtp_send( session, from, rcpts, data, size ); if ( err != MAILSMTP_NO_ERROR ) { qDebug("Error sending mail: %s",mailsmtpError(err).latin1()); - result = 0; goto free_con_session; + result = 0; + goto free_con_session; } qDebug( "Mail sent." ); @@ -609,8 +646,7 @@ free_mem: return result; } -void SMTPwrapper::sendMail(const Mail&mail,SMTPaccount*aSmtp,bool later ) -{ +void SMTPwrapper::sendMail(const Mail&mail,SMTPaccount*aSmtp,bool later ) { mailmime * mimeMail; SMTPaccount *smtp = aSmtp; @@ -635,8 +671,7 @@ void SMTPwrapper::sendMail(const Mail&mail,SMTPaccount*aSmtp,bool later ) } } -int SMTPwrapper::sendQueuedMail(AbstractMail*wrap,SMTPaccount*smtp,RecMail*which) -{ +int SMTPwrapper::sendQueuedMail(AbstractMail*wrap,SMTPaccount*smtp,RecMail*which) { size_t curTok = 0; mailimf_fields *fields = 0; mailimf_field*ffrom = 0; @@ -645,7 +680,8 @@ int SMTPwrapper::sendQueuedMail(AbstractMail*wrap,SMTPaccount*smtp,RecMail*which int res = 0; encodedString * data = wrap->fetchRawBody(*which); - if (!data) return 0; + if (!data) + return 0; int err = mailimf_fields_parse( data->Content(), data->Length(), &curTok, &fields ); if (err != MAILIMF_NO_ERROR) { delete data; @@ -677,11 +713,11 @@ int SMTPwrapper::sendQueuedMail(AbstractMail*wrap,SMTPaccount*smtp,RecMail*which } /* this is a special fun */ -bool SMTPwrapper::flushOutbox(SMTPaccount*smtp) -{ +bool SMTPwrapper::flushOutbox(SMTPaccount*smtp) { bool returnValue = true; - if (!smtp) return false; + if (!smtp) + return false; QString localfolders = AbstractMail::defaultLocalfolder(); AbstractMail*wrap = AbstractMail::getWrapper(localfolders); @@ -705,7 +741,7 @@ bool SMTPwrapper::flushOutbox(SMTPaccount*smtp) while (mailsToSend.count()>0) { if (sendQueuedMail(wrap,smtp,mailsToSend.at(0))==0) { QMessageBox::critical(0,tr("Error sending mail"), - tr("Error sending queued mail - breaking")); + tr("Error sending queued mail - breaking")); returnValue = false; break; } diff --git a/noncore/net/mail/smtpconfigui.ui b/noncore/net/mail/smtpconfigui.ui index f5ce8cb..d4151a9 100644 --- a/noncore/net/mail/smtpconfigui.ui +++ b/noncore/net/mail/smtpconfigui.ui @@ -11,8 +11,8 @@ <rect> <x>0</x> <y>0</y> - <width>241</width> - <height>321</height> + <width>335</width> + <height>426</height> </rect> </property> <property stdset="1"> @@ -28,203 +28,303 @@ <vbox> <property stdset="1"> <name>margin</name> - <number>2</number> + <number>3</number> </property> <property stdset="1"> <name>spacing</name> - <number>2</number> + <number>3</number> </property> <widget> - <class>QLayoutWidget</class> + <class>QLabel</class> <property stdset="1"> <name>name</name> - <cstring>Layout4</cstring> + <cstring>accountLabel</cstring> + </property> + <property stdset="1"> + <name>text</name> + <string>Account</string> + </property> + </widget> + <widget> + <class>QLineEdit</class> + <property stdset="1"> + <name>name</name> + <cstring>accountLine</cstring> </property> <property> - <name>layoutSpacing</name> + <name>toolTip</name> + <string>Name of the Account</string> + </property> + </widget> + <widget> + <class>Line</class> + <property stdset="1"> + <name>name</name> + <cstring>line1</cstring> + </property> + <property stdset="1"> + <name>sizePolicy</name> + <sizepolicy> + <hsizetype>1</hsizetype> + <vsizetype>0</vsizetype> + </sizepolicy> + </property> + <property stdset="1"> + <name>orientation</name> + <enum>Horizontal</enum> </property> - <grid> + </widget> + <widget> + <class>QLayoutWidget</class> + <property stdset="1"> + <name>name</name> + <cstring>Layout20</cstring> + </property> + <hbox> <property stdset="1"> <name>margin</name> <number>0</number> </property> <property stdset="1"> <name>spacing</name> - <number>2</number> + <number>6</number> </property> - <widget row="0" column="0" rowspan="1" colspan="2" > - <class>QLabel</class> - <property stdset="1"> - <name>name</name> - <cstring>accountLabel</cstring> - </property> - <property stdset="1"> - <name>text</name> - <string>Account</string> - </property> - </widget> - <widget row="8" column="2" > - <class>QLineEdit</class> - <property stdset="1"> - <name>name</name> - <cstring>passLine</cstring> - </property> - <property stdset="1"> - <name>enabled</name> - <bool>false</bool> - </property> - <property stdset="1"> - <name>echoMode</name> - <enum>Password</enum> - </property> - </widget> - <widget row="4" column="0" rowspan="1" colspan="3" > - <class>QCheckBox</class> - <property stdset="1"> - <name>name</name> - <cstring>sslBox</cstring> - </property> - <property stdset="1"> - <name>text</name> - <string>Use SSL</string> - </property> - </widget> - <widget row="6" column="0" rowspan="1" colspan="3" > - <class>QCheckBox</class> - <property stdset="1"> - <name>name</name> - <cstring>loginBox</cstring> - </property> - <property stdset="1"> - <name>text</name> - <string>Use Login</string> - </property> - </widget> - <widget row="0" column="2" > - <class>QLineEdit</class> - <property stdset="1"> - <name>name</name> - <cstring>accountLine</cstring> - </property> - <property> - <name>toolTip</name> - <string>Name of the Account</string> - </property> - </widget> - <widget row="2" column="1" rowspan="1" colspan="2" > - <class>QLineEdit</class> - <property stdset="1"> - <name>name</name> - <cstring>serverLine</cstring> - </property> - <property> - <name>toolTip</name> - <string>Name of the SMTP Server</string> - </property> - </widget> - <widget row="7" column="2" > - <class>QLineEdit</class> - <property stdset="1"> - <name>name</name> - <cstring>userLine</cstring> - </property> - <property stdset="1"> - <name>enabled</name> - <bool>false</bool> - </property> - </widget> - <widget row="8" column="0" rowspan="1" colspan="2" > - <class>QLabel</class> - <property stdset="1"> - <name>name</name> - <cstring>passLabel</cstring> - </property> - <property stdset="1"> - <name>text</name> - <string>Password</string> - </property> - </widget> - <widget row="3" column="0" > - <class>QLabel</class> + <widget> + <class>QLayoutWidget</class> <property stdset="1"> <name>name</name> - <cstring>portLabel</cstring> - </property> - <property stdset="1"> - <name>text</name> - <string>Port</string> - </property> - </widget> - <widget row="2" column="0" > - <class>QLabel</class> - <property stdset="1"> - <name>name</name> - <cstring>serverLabel</cstring> - </property> - <property stdset="1"> - <name>text</name> - <string>Server</string> - </property> - </widget> - <widget row="3" column="1" rowspan="1" colspan="2" > - <class>QLineEdit</class> - <property stdset="1"> - <name>name</name> - <cstring>portLine</cstring> - </property> - <property> - <name>toolTip</name> - <string>Port of the SMTP Server</string> + <cstring>Layout18</cstring> </property> + <vbox> + <property stdset="1"> + <name>margin</name> + <number>0</number> + </property> + <property stdset="1"> + <name>spacing</name> + <number>6</number> + </property> + <widget> + <class>QLabel</class> + <property stdset="1"> + <name>name</name> + <cstring>serverLabel</cstring> + </property> + <property stdset="1"> + <name>text</name> + <string>Server</string> + </property> + </widget> + <widget> + <class>QLabel</class> + <property stdset="1"> + <name>name</name> + <cstring>portLabel</cstring> + </property> + <property stdset="1"> + <name>text</name> + <string>Port</string> + </property> + </widget> + </vbox> </widget> - <widget row="1" column="0" rowspan="1" colspan="3" > - <class>Line</class> + <widget> + <class>QLayoutWidget</class> <property stdset="1"> <name>name</name> - <cstring>line1</cstring> - </property> - <property stdset="1"> - <name>sizePolicy</name> - <sizepolicy> - <hsizetype>3</hsizetype> - <vsizetype>0</vsizetype> - </sizepolicy> - </property> - <property stdset="1"> - <name>orientation</name> - <enum>Horizontal</enum> + <cstring>Layout19</cstring> </property> + <vbox> + <property stdset="1"> + <name>margin</name> + <number>0</number> + </property> + <property stdset="1"> + <name>spacing</name> + <number>6</number> + </property> + <widget> + <class>QLineEdit</class> + <property stdset="1"> + <name>name</name> + <cstring>serverLine</cstring> + </property> + <property> + <name>toolTip</name> + <string>Name of the SMTP Server</string> + </property> + </widget> + <widget> + <class>QLineEdit</class> + <property stdset="1"> + <name>name</name> + <cstring>portLine</cstring> + </property> + <property> + <name>toolTip</name> + <string>Port of the SMTP Server</string> + </property> + </widget> + </vbox> </widget> - <widget row="7" column="0" rowspan="1" colspan="2" > - <class>QLabel</class> + </hbox> + </widget> + <widget> + <class>QLabel</class> + <property stdset="1"> + <name>name</name> + <cstring>TextLabel1</cstring> + </property> + <property stdset="1"> + <name>text</name> + <string>Use secure sockets:</string> + </property> + </widget> + <widget> + <class>QComboBox</class> + <property stdset="1"> + <name>name</name> + <cstring>ComboBox1</cstring> + </property> + </widget> + <widget> + <class>QLineEdit</class> + <property stdset="1"> + <name>name</name> + <cstring>CommandEdit</cstring> + </property> + <property stdset="1"> + <name>text</name> + <string>ssh $SERVER exec</string> + </property> + </widget> + <widget> + <class>Line</class> + <property stdset="1"> + <name>name</name> + <cstring>line2</cstring> + </property> + <property stdset="1"> + <name>sizePolicy</name> + <sizepolicy> + <hsizetype>1</hsizetype> + <vsizetype>0</vsizetype> + </sizepolicy> + </property> + <property stdset="1"> + <name>orientation</name> + <enum>Horizontal</enum> + </property> + </widget> + <widget> + <class>QCheckBox</class> + <property stdset="1"> + <name>name</name> + <cstring>loginBox</cstring> + </property> + <property stdset="1"> + <name>text</name> + <string>Use Login</string> + </property> + </widget> + <widget> + <class>QLayoutWidget</class> + <property stdset="1"> + <name>name</name> + <cstring>Layout17</cstring> + </property> + <hbox> + <property stdset="1"> + <name>margin</name> + <number>0</number> + </property> + <property stdset="1"> + <name>spacing</name> + <number>6</number> + </property> + <widget> + <class>QLayoutWidget</class> <property stdset="1"> <name>name</name> - <cstring>userLabel</cstring> - </property> - <property stdset="1"> - <name>text</name> - <string>User</string> + <cstring>Layout15</cstring> </property> + <vbox> + <property stdset="1"> + <name>margin</name> + <number>0</number> + </property> + <property stdset="1"> + <name>spacing</name> + <number>6</number> + </property> + <widget> + <class>QLabel</class> + <property stdset="1"> + <name>name</name> + <cstring>userLabel</cstring> + </property> + <property stdset="1"> + <name>text</name> + <string>User</string> + </property> + </widget> + <widget> + <class>QLabel</class> + <property stdset="1"> + <name>name</name> + <cstring>passLabel</cstring> + </property> + <property stdset="1"> + <name>text</name> + <string>Password</string> + </property> + </widget> + </vbox> </widget> - <widget row="5" column="0" rowspan="1" colspan="3" > - <class>Line</class> + <widget> + <class>QLayoutWidget</class> <property stdset="1"> <name>name</name> - <cstring>line2</cstring> - </property> - <property stdset="1"> - <name>sizePolicy</name> - <sizepolicy> - <hsizetype>3</hsizetype> - <vsizetype>0</vsizetype> - </sizepolicy> - </property> - <property stdset="1"> - <name>orientation</name> - <enum>Horizontal</enum> + <cstring>Layout16</cstring> </property> + <vbox> + <property stdset="1"> + <name>margin</name> + <number>0</number> + </property> + <property stdset="1"> + <name>spacing</name> + <number>6</number> + </property> + <widget> + <class>QLineEdit</class> + <property stdset="1"> + <name>name</name> + <cstring>userLine</cstring> + </property> + <property stdset="1"> + <name>enabled</name> + <bool>false</bool> + </property> + </widget> + <widget> + <class>QLineEdit</class> + <property stdset="1"> + <name>name</name> + <cstring>passLine</cstring> + </property> + <property stdset="1"> + <name>enabled</name> + <bool>false</bool> + </property> + <property stdset="1"> + <name>echoMode</name> + <enum>Password</enum> + </property> + </widget> + </vbox> </widget> - </grid> + </hbox> </widget> <spacer> <property> @@ -253,7 +353,6 @@ <tabstop>accountLine</tabstop> <tabstop>serverLine</tabstop> <tabstop>portLine</tabstop> - <tabstop>sslBox</tabstop> <tabstop>loginBox</tabstop> <tabstop>userLine</tabstop> <tabstop>passLine</tabstop> |