Diffstat (limited to 'noncore/net/mail/libmailwrapper/smtpwrapper.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/net/mail/libmailwrapper/smtpwrapper.cpp | 308 |
1 files changed, 172 insertions, 136 deletions
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 @@ -27,4 +27,3 @@ progressMailSend*SMTPwrapper::sendProgress = 0; SMTPwrapper::SMTPwrapper( Settings *s ) - : QObject() -{ +: QObject() { settings = s; @@ -42,41 +41,40 @@ void SMTPwrapper::emitQCop( int 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" ); } @@ -84,4 +82,3 @@ QString SMTPwrapper::mailsmtpError( int errnum ) -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() ), @@ -90,7 +87,7 @@ mailimf_mailbox *SMTPwrapper::newMailbox(const QString&name, const QString&mail -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; @@ -125,4 +122,4 @@ mailimf_address_list *SMTPwrapper::parseAddresses(const QString&addr ) if (!s.isEmpty()) { - list.append(s); - qDebug("Appended %s",s.latin1()); + list.append(s); + qDebug("Appended %s",s.latin1()); } @@ -141,4 +138,3 @@ mailimf_address_list *SMTPwrapper::parseAddresses(const QString&addr ) -mailimf_fields *SMTPwrapper::createImfFields(const Mail&mail ) -{ +mailimf_fields *SMTPwrapper::createImfFields(const Mail&mail ) { mailimf_fields *fields; @@ -152,15 +148,20 @@ mailimf_fields *SMTPwrapper::createImfFields(const Mail&mail ) 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; @@ -172,3 +173,4 @@ mailimf_fields *SMTPwrapper::createImfFields(const Mail&mail ) NULL, NULL, subject ); - if ( fields == NULL ) goto err_free_reply; + if ( fields == NULL ) + goto err_free_reply; @@ -176,6 +178,8 @@ mailimf_fields *SMTPwrapper::createImfFields(const Mail&mail ) 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; @@ -184,12 +188,19 @@ mailimf_fields *SMTPwrapper::createImfFields(const Mail&mail ) 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: @@ -197,5 +208,7 @@ err_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" ); @@ -205,4 +218,3 @@ err_free: -mailmime *SMTPwrapper::buildTxtPart(const QString&str ) -{ +mailmime *SMTPwrapper::buildTxtPart(const QString&str ) { mailmime *txtPart; @@ -215,18 +227,24 @@ mailmime *SMTPwrapper::buildTxtPart(const QString&str ) 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; @@ -248,4 +266,3 @@ err_free: -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; @@ -276,4 +293,4 @@ 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() ); @@ -327,4 +344,3 @@ 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; @@ -352,4 +368,3 @@ void SMTPwrapper::addFileParts( mailmime *message,const QList<Attachment>&files -mailmime *SMTPwrapper::createMimeMail(const Mail &mail ) -{ +mailmime *SMTPwrapper::createMimeMail(const Mail &mail ) { mailmime *message, *txtPart; @@ -359,6 +374,8 @@ mailmime *SMTPwrapper::createMimeMail(const Mail &mail ) 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; @@ -368,6 +385,8 @@ mailmime *SMTPwrapper::createMimeMail(const Mail &mail ) - 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; @@ -389,4 +408,3 @@ err_free: -mailimf_field *SMTPwrapper::getField( mailimf_fields *fields, int type ) -{ +mailimf_field *SMTPwrapper::getField( mailimf_fields *fields, int type ) { mailimf_field *field; @@ -406,4 +424,3 @@ mailimf_field *SMTPwrapper::getField( mailimf_fields *fields, int type ) -void SMTPwrapper::addRcpts( clist *list, mailimf_address_list *addr_list ) -{ +void SMTPwrapper::addRcpts( clist *list, mailimf_address_list *addr_list ) { clistiter *it, *it2; @@ -415,11 +432,11 @@ void SMTPwrapper::addRcpts( clist *list, mailimf_address_list *addr_list ) 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 ); + } + } } @@ -427,4 +444,3 @@ void SMTPwrapper::addRcpts( clist *list, mailimf_address_list *addr_list ) -clist *SMTPwrapper::createRcptList( mailimf_fields *fields ) -{ +clist *SMTPwrapper::createRcptList( mailimf_fields *fields ) { clist *rcptList; @@ -436,3 +452,3 @@ clist *SMTPwrapper::createRcptList( mailimf_fields *fields ) 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 ); @@ -442,3 +458,3 @@ clist *SMTPwrapper::createRcptList( mailimf_fields *fields ) 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 ); @@ -448,3 +464,3 @@ clist *SMTPwrapper::createRcptList( mailimf_fields *fields ) 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 ); @@ -455,7 +471,6 @@ clist *SMTPwrapper::createRcptList( mailimf_fields *fields ) -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; @@ -471,4 +486,3 @@ char *SMTPwrapper::getFrom( mailimf_field *ffrom) -char *SMTPwrapper::getFrom( mailmime *mail ) -{ +char *SMTPwrapper::getFrom( mailmime *mail ) { /* no need to delete - its just a pointer to structure content */ @@ -479,4 +493,3 @@ char *SMTPwrapper::getFrom( mailmime *mail ) -void SMTPwrapper::progress( size_t current, size_t maximum ) -{ +void SMTPwrapper::progress( size_t current, size_t maximum ) { if (SMTPwrapper::sendProgress) { @@ -487,5 +500,5 @@ void SMTPwrapper::progress( size_t current, size_t maximum ) -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(); @@ -497,4 +510,3 @@ 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, SMTPaccount *smtp ) { clist *rcpts = 0; @@ -515,3 +527,4 @@ void SMTPwrapper::smtpSend( mailmime *mail,bool later, SMTPaccount *smtp ) if (r != MAIL_NO_ERROR || !data) { - if (data) free(data); + if (data) + free(data); qDebug("Error fetching mime..."); @@ -522,3 +535,4 @@ void SMTPwrapper::smtpSend( mailmime *mail,bool later, SMTPaccount *smtp ) storeMail(data,size,"Outgoing"); - if (data) free( data ); + if (data) + free( data ); Config cfg( "mail" ); @@ -532,9 +546,13 @@ void SMTPwrapper::smtpSend( mailmime *mail,bool later, SMTPaccount *smtp ) 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; @@ -548,3 +566,11 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT 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(); @@ -552,3 +578,4 @@ 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 ) + goto free_mem; @@ -562,6 +589,13 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT } - 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; + } @@ -580,3 +614,4 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT } else { - result = 0; goto free_con_session; + result = 0; + goto free_con_session; } @@ -588,3 +623,4 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT 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!" ); @@ -597,3 +633,4 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT qDebug("Error sending mail: %s",mailsmtpError(err).latin1()); - result = 0; goto free_con_session; + result = 0; + goto free_con_session; } @@ -611,4 +648,3 @@ free_mem: -void SMTPwrapper::sendMail(const Mail&mail,SMTPaccount*aSmtp,bool later ) -{ +void SMTPwrapper::sendMail(const Mail&mail,SMTPaccount*aSmtp,bool later ) { mailmime * mimeMail; @@ -637,4 +673,3 @@ 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; @@ -647,3 +682,4 @@ int SMTPwrapper::sendQueuedMail(AbstractMail*wrap,SMTPaccount*smtp,RecMail*which encodedString * data = wrap->fetchRawBody(*which); - if (!data) return 0; + if (!data) + return 0; int err = mailimf_fields_parse( data->Content(), data->Length(), &curTok, &fields ); @@ -679,7 +715,7 @@ 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; @@ -707,3 +743,3 @@ bool SMTPwrapper::flushOutbox(SMTPaccount*smtp) QMessageBox::critical(0,tr("Error sending mail"), - tr("Error sending queued mail - breaking")); + tr("Error sending queued mail - breaking")); returnValue = false; |