summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/net/mail/editaccounts.cpp20
-rw-r--r--noncore/net/mail/editaccounts.h2
-rw-r--r--noncore/net/mail/libmailwrapper/settings.cpp4
-rw-r--r--noncore/net/mail/libmailwrapper/smtpwrapper.cpp206
-rw-r--r--noncore/net/mail/smtpconfigui.ui275
5 files changed, 328 insertions, 179 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,
370 370
371 fillValues(); 371 fillValues();
372 372
373 connect( sslBox, SIGNAL( toggled( bool ) ), SLOT( slotSSL( bool ) ) ); 373 connect( ComboBox1, SIGNAL( activated( int ) ), SLOT( slotConnectionToggle( int ) ) );
374 ComboBox1->insertItem( "Only if available", 0 );
375 ComboBox1->insertItem( "Always, Negotiated", 1 );
376 ComboBox1->insertItem( "Connect on secure port", 2 );
377 ComboBox1->insertItem( "Run command instead", 3 );
378 CommandEdit->hide();
379 ComboBox1->setCurrentItem( data->ConnectionType() );
374} 380}
375 381
376void SMTPconfig::slotSSL( bool enabled ) 382void SMTPconfig::slotConnectionToggle( int index )
377{ 383{
378 if ( enabled ) { 384 // 2 is ssl connection
385 if ( index == 2 ) {
379 portLine->setText( SMTP_SSL_PORT ); 386 portLine->setText( SMTP_SSL_PORT );
387 } else if ( index == 3 ) {
388 portLine->setText( SMTP_PORT );
389 CommandEdit->show();
380 } else { 390 } else {
381 portLine->setText( SMTP_PORT ); 391 portLine->setText( SMTP_PORT );
382 } 392 }
@@ -387,7 +397,7 @@ void SMTPconfig::fillValues()
387 accountLine->setText( data->getAccountName() ); 397 accountLine->setText( data->getAccountName() );
388 serverLine->setText( data->getServer() ); 398 serverLine->setText( data->getServer() );
389 portLine->setText( data->getPort() ); 399 portLine->setText( data->getPort() );
390 sslBox->setChecked( data->getSSL() ); 400 ComboBox1->setCurrentItem( data->ConnectionType() );
391 loginBox->setChecked( data->getLogin() ); 401 loginBox->setChecked( data->getLogin() );
392 userLine->setText( data->getUser() ); 402 userLine->setText( data->getUser() );
393 passLine->setText( data->getPassword() ); 403 passLine->setText( data->getPassword() );
@@ -398,7 +408,7 @@ void SMTPconfig::accept()
398 data->setAccountName( accountLine->text() ); 408 data->setAccountName( accountLine->text() );
399 data->setServer( serverLine->text() ); 409 data->setServer( serverLine->text() );
400 data->setPort( portLine->text() ); 410 data->setPort( portLine->text() );
401 data->setSSL( sslBox->isChecked() ); 411 data->setConnectionType( ComboBox1->currentItem() );
402 data->setLogin( loginBox->isChecked() ); 412 data->setLogin( loginBox->isChecked() );
403 data->setUser( userLine->text() ); 413 data->setUser( userLine->text() );
404 data->setPassword( passLine->text() ); 414 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:
114 SMTPconfig( SMTPaccount *account, QWidget *parent = 0, const char *name = 0, bool modal = 0, WFlags flags = 0 ); 114 SMTPconfig( SMTPaccount *account, QWidget *parent = 0, const char *name = 0, bool modal = 0, WFlags flags = 0 );
115 115
116public slots: 116public slots:
117 void slotSSL( bool enabled );
118 void fillValues(); 117 void fillValues();
119 118
120protected slots: 119protected slots:
120 void slotConnectionToggle( int index );
121 void accept(); 121 void accept();
122 122
123private: 123private:
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()
283 file = SMTPaccount::getUniqueFileName(); 283 file = SMTPaccount::getUniqueFileName();
284 accountName = "New SMTP Account"; 284 accountName = "New SMTP Account";
285 ssl = false; 285 ssl = false;
286 connectionType = 1;
286 login = false; 287 login = false;
287 useCC = false; 288 useCC = false;
288 useBCC = false; 289 useBCC = false;
@@ -297,6 +298,7 @@ SMTPaccount::SMTPaccount( QString filename )
297 file = filename; 298 file = filename;
298 accountName = "New SMTP Account"; 299 accountName = "New SMTP Account";
299 ssl = false; 300 ssl = false;
301 connectionType = 1;
300 login = false; 302 login = false;
301 type = "SMTP"; 303 type = "SMTP";
302 port = SMTP_PORT; 304 port = SMTP_PORT;
@@ -325,6 +327,7 @@ void SMTPaccount::read()
325 server = conf->readEntry( "Server" ); 327 server = conf->readEntry( "Server" );
326 port = conf->readEntry( "Port" ); 328 port = conf->readEntry( "Port" );
327 ssl = conf->readBoolEntry( "SSL" ); 329 ssl = conf->readBoolEntry( "SSL" );
330 connectionType = conf->readNumEntry( "ConnectionType" );
328 login = conf->readBoolEntry( "Login" ); 331 login = conf->readBoolEntry( "Login" );
329 user = conf->readEntry( "User" ); 332 user = conf->readEntry( "User" );
330 password = conf->readEntryCrypt( "Password" ); 333 password = conf->readEntryCrypt( "Password" );
@@ -342,6 +345,7 @@ void SMTPaccount::save()
342 conf->writeEntry( "Server", server ); 345 conf->writeEntry( "Server", server );
343 conf->writeEntry( "Port", port ); 346 conf->writeEntry( "Port", port );
344 conf->writeEntry( "SSL", ssl ); 347 conf->writeEntry( "SSL", ssl );
348 conf->writeEntry( "ConnectionType", connectionType );
345 conf->writeEntry( "Login", login ); 349 conf->writeEntry( "Login", login );
346 conf->writeEntry( "User", user ); 350 conf->writeEntry( "User", user );
347 conf->writeEntryCrypt( "Password", password ); 351 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";
25progressMailSend*SMTPwrapper::sendProgress = 0; 25progressMailSend*SMTPwrapper::sendProgress = 0;
26 26
27SMTPwrapper::SMTPwrapper( Settings *s ) 27SMTPwrapper::SMTPwrapper( Settings *s )
28 : QObject() 28: QObject() {
29{
30 settings = s; 29 settings = s;
31 Config cfg( "mail" ); 30 Config cfg( "mail" );
32 cfg.setGroup( "Status" ); 31 cfg.setGroup( "Status" );
@@ -40,8 +39,7 @@ void SMTPwrapper::emitQCop( int queued ) {
40 env << queued; 39 env << queued;
41} 40}
42 41
43QString SMTPwrapper::mailsmtpError( int errnum ) 42QString SMTPwrapper::mailsmtpError( int errnum ) {
44{
45 switch ( errnum ) { 43 switch ( errnum ) {
46 case MAILSMTP_NO_ERROR: 44 case MAILSMTP_NO_ERROR:
47 return tr( "No error" ); 45 return tr( "No error" );
@@ -82,17 +80,16 @@ QString SMTPwrapper::mailsmtpError( int errnum )
82 } 80 }
83} 81}
84 82
85mailimf_mailbox *SMTPwrapper::newMailbox(const QString&name, const QString&mail ) 83mailimf_mailbox *SMTPwrapper::newMailbox(const QString&name, const QString&mail ) {
86{
87 return mailimf_mailbox_new( strdup( name.latin1() ), 84 return mailimf_mailbox_new( strdup( name.latin1() ),
88 strdup( mail.latin1() ) ); 85 strdup( mail.latin1() ) );
89} 86}
90 87
91mailimf_address_list *SMTPwrapper::parseAddresses(const QString&addr ) 88mailimf_address_list *SMTPwrapper::parseAddresses(const QString&addr ) {
92{
93 mailimf_address_list *addresses; 89 mailimf_address_list *addresses;
94 90
95 if ( addr.isEmpty() ) return NULL; 91 if ( addr.isEmpty() )
92 return NULL;
96 93
97 addresses = mailimf_address_list_new_empty(); 94 addresses = mailimf_address_list_new_empty();
98 95
@@ -139,8 +136,7 @@ mailimf_address_list *SMTPwrapper::parseAddresses(const QString&addr )
139 return addresses; 136 return addresses;
140} 137}
141 138
142mailimf_fields *SMTPwrapper::createImfFields(const Mail&mail ) 139mailimf_fields *SMTPwrapper::createImfFields(const Mail&mail ) {
143{
144 mailimf_fields *fields; 140 mailimf_fields *fields;
145 mailimf_field *xmailer; 141 mailimf_field *xmailer;
146 mailimf_mailbox *sender=0,*fromBox=0; 142 mailimf_mailbox *sender=0,*fromBox=0;
@@ -150,19 +146,24 @@ mailimf_fields *SMTPwrapper::createImfFields(const Mail&mail )
150 int err; 146 int err;
151 147
152 sender = newMailbox( mail.getName(), mail.getMail() ); 148 sender = newMailbox( mail.getName(), mail.getMail() );
153 if ( sender == NULL ) goto err_free; 149 if ( sender == NULL )
150 goto err_free;
154 151
155 fromBox = newMailbox( mail.getName(), mail.getMail() ); 152 fromBox = newMailbox( mail.getName(), mail.getMail() );
156 if ( fromBox == NULL ) goto err_free_sender; 153 if ( fromBox == NULL )
154 goto err_free_sender;
157 155
158 from = mailimf_mailbox_list_new_empty(); 156 from = mailimf_mailbox_list_new_empty();
159 if ( from == NULL ) goto err_free_fromBox; 157 if ( from == NULL )
158 goto err_free_fromBox;
160 159
161 err = mailimf_mailbox_list_add( from, fromBox ); 160 err = mailimf_mailbox_list_add( from, fromBox );
162 if ( err != MAILIMF_NO_ERROR ) goto err_free_from; 161 if ( err != MAILIMF_NO_ERROR )
162 goto err_free_from;
163 163
164 to = parseAddresses( mail.getTo() ); 164 to = parseAddresses( mail.getTo() );
165 if ( to == NULL ) goto err_free_from; 165 if ( to == NULL )
166 goto err_free_from;
166 167
167 cc = parseAddresses( mail.getCC() ); 168 cc = parseAddresses( mail.getCC() );
168 bcc = parseAddresses( mail.getBCC() ); 169 bcc = parseAddresses( mail.getBCC() );
@@ -170,41 +171,52 @@ mailimf_fields *SMTPwrapper::createImfFields(const Mail&mail )
170 171
171 fields = mailimf_fields_new_with_data( from, sender, reply, to, cc, bcc, 172 fields = mailimf_fields_new_with_data( from, sender, reply, to, cc, bcc,
172 NULL, NULL, subject ); 173 NULL, NULL, subject );
173 if ( fields == NULL ) goto err_free_reply; 174 if ( fields == NULL )
175 goto err_free_reply;
174 176
175 xmailer = mailimf_field_new_custom( strdup( "User-Agent" ), 177 xmailer = mailimf_field_new_custom( strdup( "User-Agent" ),
176 strdup( USER_AGENT ) ); 178 strdup( USER_AGENT ) );
177 if ( xmailer == NULL ) goto err_free_fields; 179 if ( xmailer == NULL )
180 goto err_free_fields;
178 181
179 err = mailimf_fields_add( fields, xmailer ); 182 err = mailimf_fields_add( fields, xmailer );
180 if ( err != MAILIMF_NO_ERROR ) goto err_free_xmailer; 183 if ( err != MAILIMF_NO_ERROR )
184 goto err_free_xmailer;
181 185
182 return fields; // Success :) 186 return fields; // Success :)
183 187
184err_free_xmailer: 188err_free_xmailer:
185 if (xmailer) mailimf_field_free( xmailer ); 189 if (xmailer)
190 mailimf_field_free( xmailer );
186err_free_fields: 191err_free_fields:
187 if (fields) mailimf_fields_free( fields ); 192 if (fields)
193 mailimf_fields_free( fields );
188err_free_reply: 194err_free_reply:
189 if (reply) mailimf_address_list_free( reply ); 195 if (reply)
190 if (bcc) mailimf_address_list_free( bcc ); 196 mailimf_address_list_free( reply );
191 if (cc) mailimf_address_list_free( cc ); 197 if (bcc)
192 if (to) mailimf_address_list_free( to ); 198 mailimf_address_list_free( bcc );
199 if (cc)
200 mailimf_address_list_free( cc );
201 if (to)
202 mailimf_address_list_free( to );
193err_free_from: 203err_free_from:
194 if (from) mailimf_mailbox_list_free( from ); 204 if (from)
205 mailimf_mailbox_list_free( from );
195err_free_fromBox: 206err_free_fromBox:
196 mailimf_mailbox_free( fromBox ); 207 mailimf_mailbox_free( fromBox );
197err_free_sender: 208err_free_sender:
198 if (sender) mailimf_mailbox_free( sender ); 209 if (sender)
210 mailimf_mailbox_free( sender );
199err_free: 211err_free:
200 if (subject) free( subject ); 212 if (subject)
213 free( subject );
201 qDebug( "createImfFields - error" ); 214 qDebug( "createImfFields - error" );
202 215
203 return NULL; // Error :( 216 return NULL; // Error :(
204} 217}
205 218
206mailmime *SMTPwrapper::buildTxtPart(const QString&str ) 219mailmime *SMTPwrapper::buildTxtPart(const QString&str ) {
207{
208 mailmime *txtPart; 220 mailmime *txtPart;
209 mailmime_fields *fields; 221 mailmime_fields *fields;
210 mailmime_content *content; 222 mailmime_content *content;
@@ -213,22 +225,28 @@ mailmime *SMTPwrapper::buildTxtPart(const QString&str )
213 225
214 param = mailmime_parameter_new( strdup( "charset" ), 226 param = mailmime_parameter_new( strdup( "charset" ),
215 strdup( "iso-8859-1" ) ); 227 strdup( "iso-8859-1" ) );
216 if ( param == NULL ) goto err_free; 228 if ( param == NULL )
229 goto err_free;
217 230
218 content = mailmime_content_new_with_str( "text/plain" ); 231 content = mailmime_content_new_with_str( "text/plain" );
219 if ( content == NULL ) goto err_free_param; 232 if ( content == NULL )
233 goto err_free_param;
220 234
221 err = clist_append( content->ct_parameters, param ); 235 err = clist_append( content->ct_parameters, param );
222 if ( err != MAILIMF_NO_ERROR ) goto err_free_content; 236 if ( err != MAILIMF_NO_ERROR )
237 goto err_free_content;
223 238
224 fields = mailmime_fields_new_encoding(MAILMIME_MECHANISM_8BIT); 239 fields = mailmime_fields_new_encoding(MAILMIME_MECHANISM_8BIT);
225 if ( fields == NULL ) goto err_free_content; 240 if ( fields == NULL )
241 goto err_free_content;
226 242
227 txtPart = mailmime_new_empty( content, fields ); 243 txtPart = mailmime_new_empty( content, fields );
228 if ( txtPart == NULL ) goto err_free_fields; 244 if ( txtPart == NULL )
245 goto err_free_fields;
229 246
230 err = mailmime_set_body_text( txtPart, (char*)str.data(), str.length() ); 247 err = mailmime_set_body_text( txtPart, (char*)str.data(), str.length() );
231 if ( err != MAILIMF_NO_ERROR ) goto err_free_txtPart; 248 if ( err != MAILIMF_NO_ERROR )
249 goto err_free_txtPart;
232 250
233 return txtPart; // Success :) 251 return txtPart; // Success :)
234 252
@@ -246,8 +264,7 @@ err_free:
246 return NULL; // Error :( 264 return NULL; // Error :(
247} 265}
248 266
249mailmime *SMTPwrapper::buildFilePart(const QString&filename,const QString&mimetype,const QString&TextContent ) 267mailmime *SMTPwrapper::buildFilePart(const QString&filename,const QString&mimetype,const QString&TextContent ) {
250{
251 mailmime * filePart = 0; 268 mailmime * filePart = 0;
252 mailmime_fields * fields = 0; 269 mailmime_fields * fields = 0;
253 mailmime_content * content = 0; 270 mailmime_content * content = 0;
@@ -325,8 +342,7 @@ mailmime *SMTPwrapper::buildFilePart(const QString&filename,const QString&mimety
325 342
326} 343}
327 344
328void SMTPwrapper::addFileParts( mailmime *message,const QList<Attachment>&files ) 345void SMTPwrapper::addFileParts( mailmime *message,const QList<Attachment>&files ) {
329{
330 const Attachment *it; 346 const Attachment *it;
331 unsigned int count = files.count(); 347 unsigned int count = files.count();
332 qDebug("List contains %i values",count); 348 qDebug("List contains %i values",count);
@@ -350,26 +366,29 @@ void SMTPwrapper::addFileParts( mailmime *message,const QList<Attachment>&files
350 } 366 }
351} 367}
352 368
353mailmime *SMTPwrapper::createMimeMail(const Mail &mail ) 369mailmime *SMTPwrapper::createMimeMail(const Mail &mail ) {
354{
355 mailmime *message, *txtPart; 370 mailmime *message, *txtPart;
356 mailimf_fields *fields; 371 mailimf_fields *fields;
357 int err; 372 int err;
358 373
359 fields = createImfFields( mail ); 374 fields = createImfFields( mail );
360 if ( fields == NULL ) goto err_free; 375 if ( fields == NULL )
376 goto err_free;
361 377
362 message = mailmime_new_message_data( NULL ); 378 message = mailmime_new_message_data( NULL );
363 if ( message == NULL ) goto err_free_fields; 379 if ( message == NULL )
380 goto err_free_fields;
364 381
365 mailmime_set_imf_fields( message, fields ); 382 mailmime_set_imf_fields( message, fields );
366 383
367 txtPart = buildTxtPart( mail.getMessage() ); 384 txtPart = buildTxtPart( mail.getMessage() );
368 385
369 if ( txtPart == NULL ) goto err_free_message; 386 if ( txtPart == NULL )
387 goto err_free_message;
370 388
371 err = mailmime_smart_add_part( message, txtPart ); 389 err = mailmime_smart_add_part( message, txtPart );
372 if ( err != MAILIMF_NO_ERROR ) goto err_free_txtPart; 390 if ( err != MAILIMF_NO_ERROR )
391 goto err_free_txtPart;
373 392
374 addFileParts( message, mail.getAttachments() ); 393 addFileParts( message, mail.getAttachments() );
375 394
@@ -387,8 +406,7 @@ err_free:
387 return NULL; // Error :( 406 return NULL; // Error :(
388} 407}
389 408
390mailimf_field *SMTPwrapper::getField( mailimf_fields *fields, int type ) 409mailimf_field *SMTPwrapper::getField( mailimf_fields *fields, int type ) {
391{
392 mailimf_field *field; 410 mailimf_field *field;
393 clistiter *it; 411 clistiter *it;
394 412
@@ -404,8 +422,7 @@ mailimf_field *SMTPwrapper::getField( mailimf_fields *fields, int type )
404 return NULL; 422 return NULL;
405} 423}
406 424
407void SMTPwrapper::addRcpts( clist *list, mailimf_address_list *addr_list ) 425void SMTPwrapper::addRcpts( clist *list, mailimf_address_list *addr_list ) {
408{
409 clistiter *it, *it2; 426 clistiter *it, *it2;
410 427
411 for ( it = clist_begin( addr_list->ad_list ); it; it = it->next ) { 428 for ( it = clist_begin( addr_list->ad_list ); it; it = it->next ) {
@@ -425,8 +442,7 @@ void SMTPwrapper::addRcpts( clist *list, mailimf_address_list *addr_list )
425 } 442 }
426} 443}
427 444
428clist *SMTPwrapper::createRcptList( mailimf_fields *fields ) 445clist *SMTPwrapper::createRcptList( mailimf_fields *fields ) {
429{
430 clist *rcptList; 446 clist *rcptList;
431 mailimf_field *field; 447 mailimf_field *field;
432 448
@@ -453,8 +469,7 @@ clist *SMTPwrapper::createRcptList( mailimf_fields *fields )
453 return rcptList; 469 return rcptList;
454} 470}
455 471
456char *SMTPwrapper::getFrom( mailimf_field *ffrom) 472char *SMTPwrapper::getFrom( mailimf_field *ffrom) {
457{
458 char *from = NULL; 473 char *from = NULL;
459 if ( ffrom && (ffrom->fld_type == MAILIMF_FIELD_FROM) 474 if ( ffrom && (ffrom->fld_type == MAILIMF_FIELD_FROM)
460 && ffrom->fld_data.fld_from->frm_mb_list && ffrom->fld_data.fld_from->frm_mb_list->mb_list ) { 475 && ffrom->fld_data.fld_from->frm_mb_list && ffrom->fld_data.fld_from->frm_mb_list->mb_list ) {
@@ -469,25 +484,23 @@ char *SMTPwrapper::getFrom( mailimf_field *ffrom)
469 return from; 484 return from;
470} 485}
471 486
472char *SMTPwrapper::getFrom( mailmime *mail ) 487char *SMTPwrapper::getFrom( mailmime *mail ) {
473{
474 /* no need to delete - its just a pointer to structure content */ 488 /* no need to delete - its just a pointer to structure content */
475 mailimf_field *ffrom = 0; 489 mailimf_field *ffrom = 0;
476 ffrom = getField( mail->mm_data.mm_message.mm_fields, MAILIMF_FIELD_FROM ); 490 ffrom = getField( mail->mm_data.mm_message.mm_fields, MAILIMF_FIELD_FROM );
477 return getFrom(ffrom); 491 return getFrom(ffrom);
478} 492}
479 493
480void SMTPwrapper::progress( size_t current, size_t maximum ) 494void SMTPwrapper::progress( size_t current, size_t maximum ) {
481{
482 if (SMTPwrapper::sendProgress) { 495 if (SMTPwrapper::sendProgress) {
483 SMTPwrapper::sendProgress->setSingleMail(current, maximum ); 496 SMTPwrapper::sendProgress->setSingleMail(current, maximum );
484 qApp->processEvents(); 497 qApp->processEvents();
485 } 498 }
486} 499}
487 500
488void SMTPwrapper::storeMail(const char*mail, size_t length, const QString&box) 501void SMTPwrapper::storeMail(const char*mail, size_t length, const QString&box) {
489{ 502 if (!mail)
490 if (!mail) return; 503 return;
491 QString localfolders = AbstractMail::defaultLocalfolder(); 504 QString localfolders = AbstractMail::defaultLocalfolder();
492 AbstractMail*wrap = AbstractMail::getWrapper(localfolders); 505 AbstractMail*wrap = AbstractMail::getWrapper(localfolders);
493 wrap->createMbox(box); 506 wrap->createMbox(box);
@@ -495,8 +508,7 @@ void SMTPwrapper::storeMail(const char*mail, size_t length, const QString&box)
495 delete wrap; 508 delete wrap;
496} 509}
497 510
498void SMTPwrapper::smtpSend( mailmime *mail,bool later, SMTPaccount *smtp ) 511void SMTPwrapper::smtpSend( mailmime *mail,bool later, SMTPaccount *smtp ) {
499{
500 clist *rcpts = 0; 512 clist *rcpts = 0;
501 char *from, *data; 513 char *from, *data;
502 size_t size; 514 size_t size;
@@ -513,14 +525,16 @@ void SMTPwrapper::smtpSend( mailmime *mail,bool later, SMTPaccount *smtp )
513 mime_message_detach_mime(msg); 525 mime_message_detach_mime(msg);
514 mailmessage_free(msg); 526 mailmessage_free(msg);
515 if (r != MAIL_NO_ERROR || !data) { 527 if (r != MAIL_NO_ERROR || !data) {
516 if (data) free(data); 528 if (data)
529 free(data);
517 qDebug("Error fetching mime..."); 530 qDebug("Error fetching mime...");
518 return; 531 return;
519 } 532 }
520 msg = 0; 533 msg = 0;
521 if (later) { 534 if (later) {
522 storeMail(data,size,"Outgoing"); 535 storeMail(data,size,"Outgoing");
523 if (data) free( data ); 536 if (data)
537 free( data );
524 Config cfg( "mail" ); 538 Config cfg( "mail" );
525 cfg.setGroup( "Status" ); 539 cfg.setGroup( "Status" );
526 cfg.writeEntry( "outgoing", ++m_queuedMail ); 540 cfg.writeEntry( "outgoing", ++m_queuedMail );
@@ -530,13 +544,17 @@ void SMTPwrapper::smtpSend( mailmime *mail,bool later, SMTPaccount *smtp )
530 from = getFrom( mail ); 544 from = getFrom( mail );
531 rcpts = createRcptList( mail->mm_data.mm_message.mm_fields ); 545 rcpts = createRcptList( mail->mm_data.mm_message.mm_fields );
532 smtpSend(from,rcpts,data,size,smtp); 546 smtpSend(from,rcpts,data,size,smtp);
533 if (data) {free(data);} 547 if (data) {
534 if (from) {free(from);} 548 free(data);
535 if (rcpts) smtp_address_list_free( rcpts ); 549 }
550 if (from) {
551 free(from);
552 }
553 if (rcpts)
554 smtp_address_list_free( rcpts );
536} 555}
537 556
538int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMTPaccount *smtp ) 557int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMTPaccount *smtp ) {
539{
540 const char *server, *user, *pass; 558 const char *server, *user, *pass;
541 bool ssl; 559 bool ssl;
542 uint16_t port; 560 uint16_t port;
@@ -546,11 +564,20 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT
546 result = 1; 564 result = 1;
547 server = user = pass = 0; 565 server = user = pass = 0;
548 server = smtp->getServer().latin1(); 566 server = smtp->getServer().latin1();
549 ssl = smtp->getSSL(); 567
568 // FIXME: currently only TLS and Plain work.
569
570 ssl = false;
571
572 if ( smtp->ConnectionType() == 2 ) {
573 ssl = true;
574 }
575
550 port = smtp->getPort().toUInt(); 576 port = smtp->getPort().toUInt();
551 577
552 session = mailsmtp_new( 20, &progress ); 578 session = mailsmtp_new( 20, &progress );
553 if ( session == NULL ) goto free_mem; 579 if ( session == NULL )
580 goto free_mem;
554 581
555 qDebug( "Servername %s at port %i", server, port ); 582 qDebug( "Servername %s at port %i", server, port );
556 if ( ssl ) { 583 if ( ssl ) {
@@ -560,10 +587,17 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT
560 qDebug( "No SSL session" ); 587 qDebug( "No SSL session" );
561 err = mailsmtp_socket_connect( session, server, port ); 588 err = mailsmtp_socket_connect( session, server, port );
562 } 589 }
563 if ( err != MAILSMTP_NO_ERROR ) {qDebug("Error init connection");result = 0;goto free_mem_session;} 590 if ( err != MAILSMTP_NO_ERROR ) {
591 qDebug("Error init connection");
592 result = 0;
593 goto free_mem_session;
594 }
564 595
565 err = mailsmtp_init( session ); 596 err = mailsmtp_init( session );
566 if ( err != MAILSMTP_NO_ERROR ) {result = 0; goto free_con_session;} 597 if ( err != MAILSMTP_NO_ERROR ) {
598 result = 0;
599 goto free_con_session;
600 }
567 601
568 qDebug( "INIT OK" ); 602 qDebug( "INIT OK" );
569 603
@@ -578,7 +612,8 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT
578 user = login.getUser().latin1(); 612 user = login.getUser().latin1();
579 pass = login.getPassword().latin1(); 613 pass = login.getPassword().latin1();
580 } else { 614 } else {
581 result = 0; goto free_con_session; 615 result = 0;
616 goto free_con_session;
582 } 617 }
583 } else { 618 } else {
584 user = smtp->getUser().latin1(); 619 user = smtp->getUser().latin1();
@@ -586,7 +621,8 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT
586 } 621 }
587 qDebug( "session->auth: %i", session->auth); 622 qDebug( "session->auth: %i", session->auth);
588 err = mailsmtp_auth( session, (char*)user, (char*)pass ); 623 err = mailsmtp_auth( session, (char*)user, (char*)pass );
589 if ( err == MAILSMTP_NO_ERROR ) qDebug("auth ok"); 624 if ( err == MAILSMTP_NO_ERROR )
625 qDebug("auth ok");
590 qDebug( "Done auth!" ); 626 qDebug( "Done auth!" );
591 } else { 627 } else {
592 qDebug("SMTP without auth"); 628 qDebug("SMTP without auth");
@@ -595,7 +631,8 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size, SMT
595 err = mailsmtp_send( session, from, rcpts, data, size ); 631 err = mailsmtp_send( session, from, rcpts, data, size );
596 if ( err != MAILSMTP_NO_ERROR ) { 632 if ( err != MAILSMTP_NO_ERROR ) {
597 qDebug("Error sending mail: %s",mailsmtpError(err).latin1()); 633 qDebug("Error sending mail: %s",mailsmtpError(err).latin1());
598 result = 0; goto free_con_session; 634 result = 0;
635 goto free_con_session;
599 } 636 }
600 637
601 qDebug( "Mail sent." ); 638 qDebug( "Mail sent." );
@@ -609,8 +646,7 @@ free_mem:
609 return result; 646 return result;
610} 647}
611 648
612void SMTPwrapper::sendMail(const Mail&mail,SMTPaccount*aSmtp,bool later ) 649void SMTPwrapper::sendMail(const Mail&mail,SMTPaccount*aSmtp,bool later ) {
613{
614 mailmime * mimeMail; 650 mailmime * mimeMail;
615 651
616 SMTPaccount *smtp = aSmtp; 652 SMTPaccount *smtp = aSmtp;
@@ -635,8 +671,7 @@ void SMTPwrapper::sendMail(const Mail&mail,SMTPaccount*aSmtp,bool later )
635 } 671 }
636} 672}
637 673
638int SMTPwrapper::sendQueuedMail(AbstractMail*wrap,SMTPaccount*smtp,RecMail*which) 674int SMTPwrapper::sendQueuedMail(AbstractMail*wrap,SMTPaccount*smtp,RecMail*which) {
639{
640 size_t curTok = 0; 675 size_t curTok = 0;
641 mailimf_fields *fields = 0; 676 mailimf_fields *fields = 0;
642 mailimf_field*ffrom = 0; 677 mailimf_field*ffrom = 0;
@@ -645,7 +680,8 @@ int SMTPwrapper::sendQueuedMail(AbstractMail*wrap,SMTPaccount*smtp,RecMail*which
645 int res = 0; 680 int res = 0;
646 681
647 encodedString * data = wrap->fetchRawBody(*which); 682 encodedString * data = wrap->fetchRawBody(*which);
648 if (!data) return 0; 683 if (!data)
684 return 0;
649 int err = mailimf_fields_parse( data->Content(), data->Length(), &curTok, &fields ); 685 int err = mailimf_fields_parse( data->Content(), data->Length(), &curTok, &fields );
650 if (err != MAILIMF_NO_ERROR) { 686 if (err != MAILIMF_NO_ERROR) {
651 delete data; 687 delete data;
@@ -677,11 +713,11 @@ int SMTPwrapper::sendQueuedMail(AbstractMail*wrap,SMTPaccount*smtp,RecMail*which
677} 713}
678 714
679/* this is a special fun */ 715/* this is a special fun */
680bool SMTPwrapper::flushOutbox(SMTPaccount*smtp) 716bool SMTPwrapper::flushOutbox(SMTPaccount*smtp) {
681{
682 bool returnValue = true; 717 bool returnValue = true;
683 718
684 if (!smtp) return false; 719 if (!smtp)
720 return false;
685 721
686 QString localfolders = AbstractMail::defaultLocalfolder(); 722 QString localfolders = AbstractMail::defaultLocalfolder();
687 AbstractMail*wrap = AbstractMail::getWrapper(localfolders); 723 AbstractMail*wrap = AbstractMail::getWrapper(localfolders);
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 @@
11 <rect> 11 <rect>
12 <x>0</x> 12 <x>0</x>
13 <y>0</y> 13 <y>0</y>
14 <width>241</width> 14 <width>335</width>
15 <height>321</height> 15 <height>426</height>
16 </rect> 16 </rect>
17 </property> 17 </property>
18 <property stdset="1"> 18 <property stdset="1">
@@ -28,90 +28,122 @@
28 <vbox> 28 <vbox>
29 <property stdset="1"> 29 <property stdset="1">
30 <name>margin</name> 30 <name>margin</name>
31 <number>2</number> 31 <number>3</number>
32 </property> 32 </property>
33 <property stdset="1"> 33 <property stdset="1">
34 <name>spacing</name> 34 <name>spacing</name>
35 <number>2</number> 35 <number>3</number>
36 </property> 36 </property>
37 <widget> 37 <widget>
38 <class>QLayoutWidget</class> 38 <class>QLabel</class>
39 <property stdset="1">
40 <name>name</name>
41 <cstring>accountLabel</cstring>
42 </property>
43 <property stdset="1">
44 <name>text</name>
45 <string>Account</string>
46 </property>
47 </widget>
48 <widget>
49 <class>QLineEdit</class>
39 <property stdset="1"> 50 <property stdset="1">
40 <name>name</name> 51 <name>name</name>
41 <cstring>Layout4</cstring> 52 <cstring>accountLine</cstring>
42 </property> 53 </property>
43 <property> 54 <property>
44 <name>layoutSpacing</name> 55 <name>toolTip</name>
56 <string>Name of the Account</string>
45 </property> 57 </property>
46 <grid> 58 </widget>
59 <widget>
60 <class>Line</class>
47 <property stdset="1"> 61 <property stdset="1">
48 <name>margin</name> 62 <name>name</name>
49 <number>0</number> 63 <cstring>line1</cstring>
50 </property> 64 </property>
51 <property stdset="1"> 65 <property stdset="1">
52 <name>spacing</name> 66 <name>sizePolicy</name>
53 <number>2</number> 67 <sizepolicy>
68 <hsizetype>1</hsizetype>
69 <vsizetype>0</vsizetype>
70 </sizepolicy>
54 </property> 71 </property>
55 <widget row="0" column="0" rowspan="1" colspan="2" > 72 <property stdset="1">
56 <class>QLabel</class> 73 <name>orientation</name>
74 <enum>Horizontal</enum>
75 </property>
76 </widget>
77 <widget>
78 <class>QLayoutWidget</class>
57 <property stdset="1"> 79 <property stdset="1">
58 <name>name</name> 80 <name>name</name>
59 <cstring>accountLabel</cstring> 81 <cstring>Layout20</cstring>
60 </property> 82 </property>
83 <hbox>
61 <property stdset="1"> 84 <property stdset="1">
62 <name>text</name> 85 <name>margin</name>
63 <string>Account</string> 86 <number>0</number>
64 </property> 87 </property>
65 </widget> 88 <property stdset="1">
66 <widget row="8" column="2" > 89 <name>spacing</name>
67 <class>QLineEdit</class> 90 <number>6</number>
91 </property>
92 <widget>
93 <class>QLayoutWidget</class>
68 <property stdset="1"> 94 <property stdset="1">
69 <name>name</name> 95 <name>name</name>
70 <cstring>passLine</cstring> 96 <cstring>Layout18</cstring>
71 </property> 97 </property>
98 <vbox>
72 <property stdset="1"> 99 <property stdset="1">
73 <name>enabled</name> 100 <name>margin</name>
74 <bool>false</bool> 101 <number>0</number>
75 </property> 102 </property>
76 <property stdset="1"> 103 <property stdset="1">
77 <name>echoMode</name> 104 <name>spacing</name>
78 <enum>Password</enum> 105 <number>6</number>
79 </property> 106 </property>
80 </widget> 107 <widget>
81 <widget row="4" column="0" rowspan="1" colspan="3" > 108 <class>QLabel</class>
82 <class>QCheckBox</class>
83 <property stdset="1"> 109 <property stdset="1">
84 <name>name</name> 110 <name>name</name>
85 <cstring>sslBox</cstring> 111 <cstring>serverLabel</cstring>
86 </property> 112 </property>
87 <property stdset="1"> 113 <property stdset="1">
88 <name>text</name> 114 <name>text</name>
89 <string>Use SSL</string> 115 <string>Server</string>
90 </property> 116 </property>
91 </widget> 117 </widget>
92 <widget row="6" column="0" rowspan="1" colspan="3" > 118 <widget>
93 <class>QCheckBox</class> 119 <class>QLabel</class>
94 <property stdset="1"> 120 <property stdset="1">
95 <name>name</name> 121 <name>name</name>
96 <cstring>loginBox</cstring> 122 <cstring>portLabel</cstring>
97 </property> 123 </property>
98 <property stdset="1"> 124 <property stdset="1">
99 <name>text</name> 125 <name>text</name>
100 <string>Use Login</string> 126 <string>Port</string>
101 </property> 127 </property>
102 </widget> 128 </widget>
103 <widget row="0" column="2" > 129 </vbox>
104 <class>QLineEdit</class> 130 </widget>
131 <widget>
132 <class>QLayoutWidget</class>
105 <property stdset="1"> 133 <property stdset="1">
106 <name>name</name> 134 <name>name</name>
107 <cstring>accountLine</cstring> 135 <cstring>Layout19</cstring>
108 </property> 136 </property>
109 <property> 137 <vbox>
110 <name>toolTip</name> 138 <property stdset="1">
111 <string>Name of the Account</string> 139 <name>margin</name>
140 <number>0</number>
112 </property> 141 </property>
113 </widget> 142 <property stdset="1">
114 <widget row="2" column="1" rowspan="1" colspan="2" > 143 <name>spacing</name>
144 <number>6</number>
145 </property>
146 <widget>
115 <class>QLineEdit</class> 147 <class>QLineEdit</class>
116 <property stdset="1"> 148 <property stdset="1">
117 <name>name</name> 149 <name>name</name>
@@ -122,71 +154,60 @@
122 <string>Name of the SMTP Server</string> 154 <string>Name of the SMTP Server</string>
123 </property> 155 </property>
124 </widget> 156 </widget>
125 <widget row="7" column="2" > 157 <widget>
126 <class>QLineEdit</class> 158 <class>QLineEdit</class>
127 <property stdset="1"> 159 <property stdset="1">
128 <name>name</name> 160 <name>name</name>
129 <cstring>userLine</cstring> 161 <cstring>portLine</cstring>
130 </property> 162 </property>
131 <property stdset="1"> 163 <property>
132 <name>enabled</name> 164 <name>toolTip</name>
133 <bool>false</bool> 165 <string>Port of the SMTP Server</string>
134 </property> 166 </property>
135 </widget> 167 </widget>
136 <widget row="8" column="0" rowspan="1" colspan="2" > 168 </vbox>
137 <class>QLabel</class> 169 </widget>
138 <property stdset="1"> 170 </hbox>
139 <name>name</name>
140 <cstring>passLabel</cstring>
141 </property>
142 <property stdset="1">
143 <name>text</name>
144 <string>Password</string>
145 </property>
146 </widget> 171 </widget>
147 <widget row="3" column="0" > 172 <widget>
148 <class>QLabel</class> 173 <class>QLabel</class>
149 <property stdset="1"> 174 <property stdset="1">
150 <name>name</name> 175 <name>name</name>
151 <cstring>portLabel</cstring> 176 <cstring>TextLabel1</cstring>
152 </property> 177 </property>
153 <property stdset="1"> 178 <property stdset="1">
154 <name>text</name> 179 <name>text</name>
155 <string>Port</string> 180 <string>Use secure sockets:</string>
156 </property> 181 </property>
157 </widget> 182 </widget>
158 <widget row="2" column="0" > 183 <widget>
159 <class>QLabel</class> 184 <class>QComboBox</class>
160 <property stdset="1"> 185 <property stdset="1">
161 <name>name</name> 186 <name>name</name>
162 <cstring>serverLabel</cstring> 187 <cstring>ComboBox1</cstring>
163 </property>
164 <property stdset="1">
165 <name>text</name>
166 <string>Server</string>
167 </property> 188 </property>
168 </widget> 189 </widget>
169 <widget row="3" column="1" rowspan="1" colspan="2" > 190 <widget>
170 <class>QLineEdit</class> 191 <class>QLineEdit</class>
171 <property stdset="1"> 192 <property stdset="1">
172 <name>name</name> 193 <name>name</name>
173 <cstring>portLine</cstring> 194 <cstring>CommandEdit</cstring>
174 </property> 195 </property>
175 <property> 196 <property stdset="1">
176 <name>toolTip</name> 197 <name>text</name>
177 <string>Port of the SMTP Server</string> 198 <string>ssh $SERVER exec</string>
178 </property> 199 </property>
179 </widget> 200 </widget>
180 <widget row="1" column="0" rowspan="1" colspan="3" > 201 <widget>
181 <class>Line</class> 202 <class>Line</class>
182 <property stdset="1"> 203 <property stdset="1">
183 <name>name</name> 204 <name>name</name>
184 <cstring>line1</cstring> 205 <cstring>line2</cstring>
185 </property> 206 </property>
186 <property stdset="1"> 207 <property stdset="1">
187 <name>sizePolicy</name> 208 <name>sizePolicy</name>
188 <sizepolicy> 209 <sizepolicy>
189 <hsizetype>3</hsizetype> 210 <hsizetype>1</hsizetype>
190 <vsizetype>0</vsizetype> 211 <vsizetype>0</vsizetype>
191 </sizepolicy> 212 </sizepolicy>
192 </property> 213 </property>
@@ -195,7 +216,48 @@
195 <enum>Horizontal</enum> 216 <enum>Horizontal</enum>
196 </property> 217 </property>
197 </widget> 218 </widget>
198 <widget row="7" column="0" rowspan="1" colspan="2" > 219 <widget>
220 <class>QCheckBox</class>
221 <property stdset="1">
222 <name>name</name>
223 <cstring>loginBox</cstring>
224 </property>
225 <property stdset="1">
226 <name>text</name>
227 <string>Use Login</string>
228 </property>
229 </widget>
230 <widget>
231 <class>QLayoutWidget</class>
232 <property stdset="1">
233 <name>name</name>
234 <cstring>Layout17</cstring>
235 </property>
236 <hbox>
237 <property stdset="1">
238 <name>margin</name>
239 <number>0</number>
240 </property>
241 <property stdset="1">
242 <name>spacing</name>
243 <number>6</number>
244 </property>
245 <widget>
246 <class>QLayoutWidget</class>
247 <property stdset="1">
248 <name>name</name>
249 <cstring>Layout15</cstring>
250 </property>
251 <vbox>
252 <property stdset="1">
253 <name>margin</name>
254 <number>0</number>
255 </property>
256 <property stdset="1">
257 <name>spacing</name>
258 <number>6</number>
259 </property>
260 <widget>
199 <class>QLabel</class> 261 <class>QLabel</class>
200 <property stdset="1"> 262 <property stdset="1">
201 <name>name</name> 263 <name>name</name>
@@ -206,25 +268,63 @@
206 <string>User</string> 268 <string>User</string>
207 </property> 269 </property>
208 </widget> 270 </widget>
209 <widget row="5" column="0" rowspan="1" colspan="3" > 271 <widget>
210 <class>Line</class> 272 <class>QLabel</class>
211 <property stdset="1"> 273 <property stdset="1">
212 <name>name</name> 274 <name>name</name>
213 <cstring>line2</cstring> 275 <cstring>passLabel</cstring>
214 </property> 276 </property>
215 <property stdset="1"> 277 <property stdset="1">
216 <name>sizePolicy</name> 278 <name>text</name>
217 <sizepolicy> 279 <string>Password</string>
218 <hsizetype>3</hsizetype> 280 </property>
219 <vsizetype>0</vsizetype> 281 </widget>
220 </sizepolicy> 282 </vbox>
283 </widget>
284 <widget>
285 <class>QLayoutWidget</class>
286 <property stdset="1">
287 <name>name</name>
288 <cstring>Layout16</cstring>
289 </property>
290 <vbox>
291 <property stdset="1">
292 <name>margin</name>
293 <number>0</number>
221 </property> 294 </property>
222 <property stdset="1"> 295 <property stdset="1">
223 <name>orientation</name> 296 <name>spacing</name>
224 <enum>Horizontal</enum> 297 <number>6</number>
225 </property> 298 </property>
299 <widget>
300 <class>QLineEdit</class>
301 <property stdset="1">
302 <name>name</name>
303 <cstring>userLine</cstring>
304 </property>
305 <property stdset="1">
306 <name>enabled</name>
307 <bool>false</bool>
308 </property>
309 </widget>
310 <widget>
311 <class>QLineEdit</class>
312 <property stdset="1">
313 <name>name</name>
314 <cstring>passLine</cstring>
315 </property>
316 <property stdset="1">
317 <name>enabled</name>
318 <bool>false</bool>
319 </property>
320 <property stdset="1">
321 <name>echoMode</name>
322 <enum>Password</enum>
323 </property>
324 </widget>
325 </vbox>
226 </widget> 326 </widget>
227 </grid> 327 </hbox>
228 </widget> 328 </widget>
229 <spacer> 329 <spacer>
230 <property> 330 <property>
@@ -253,7 +353,6 @@
253 <tabstop>accountLine</tabstop> 353 <tabstop>accountLine</tabstop>
254 <tabstop>serverLine</tabstop> 354 <tabstop>serverLine</tabstop>
255 <tabstop>portLine</tabstop> 355 <tabstop>portLine</tabstop>
256 <tabstop>sslBox</tabstop>
257 <tabstop>loginBox</tabstop> 356 <tabstop>loginBox</tabstop>
258 <tabstop>userLine</tabstop> 357 <tabstop>userLine</tabstop>
259 <tabstop>passLine</tabstop> 358 <tabstop>passLine</tabstop>