summaryrefslogtreecommitdiff
path: root/noncore/net/mail/smtpwrapper.cpp
Unidiff
Diffstat (limited to 'noncore/net/mail/smtpwrapper.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/mail/smtpwrapper.cpp61
1 files changed, 51 insertions, 10 deletions
diff --git a/noncore/net/mail/smtpwrapper.cpp b/noncore/net/mail/smtpwrapper.cpp
index 162b1b9..a6a46ba 100644
--- a/noncore/net/mail/smtpwrapper.cpp
+++ b/noncore/net/mail/smtpwrapper.cpp
@@ -3,20 +3,23 @@
3#include <sys/types.h> 3#include <sys/types.h>
4#include <unistd.h> 4#include <unistd.h>
5#include <fcntl.h> 5#include <fcntl.h>
6#include <string.h> 6#include <string.h>
7#include <qdir.h> 7#include <qdir.h>
8 8
9#include <libetpan/mailmime.h> 9#include <libetpan/libetpan.h>
10#if 0
10#include <libetpan/mailimf.h> 11#include <libetpan/mailimf.h>
11#include <libetpan/mailsmtp.h> 12#include <libetpan/mailsmtp.h>
12#include <libetpan/mailstorage.h> 13#include <libetpan/mailstorage.h>
13#include <libetpan/maildriver.h> 14#include <libetpan/maildriver.h>
15#endif
14 16
15#include "smtpwrapper.h" 17#include "smtpwrapper.h"
16#include "mailwrapper.h" 18#include "mailwrapper.h"
19#include "mboxwrapper.h"
17#include "logindialog.h" 20#include "logindialog.h"
18#include "defines.h" 21#include "defines.h"
19 22
20SMTPwrapper::SMTPwrapper( Settings *s ) 23SMTPwrapper::SMTPwrapper( Settings *s )
21 : QObject() 24 : QObject()
22{ 25{
@@ -462,12 +465,29 @@ void SMTPwrapper::writeToFile(const QString&file, mailmime *mail )
462 465
463 fclose( f ); 466 fclose( f );
464} 467}
465 468
466void SMTPwrapper::readFromFile(const QString&file, char **data, size_t *size ) 469void SMTPwrapper::readFromFile(const QString&file, char **data, size_t *size )
467{ 470{
471
472 QFile msg_cache(file);
473 QString msg = "";
474 msg_cache.open(IO_ReadOnly);
475 char*message = new char[4096];
476 memset(message,0,4096);
477 while (msg_cache.readBlock(message,4095)>0) {
478 msg+=message;
479 memset(message,0,4096);
480 }
481 delete message;
482 *data = (char*)malloc(msg.length()+1*sizeof(char));
483 memset(*data,0,msg.length()+1);
484 memcpy(*data,msg.ascii(),msg.length());
485 *size=msg.length();
486
487#if 0
468 char *buf; 488 char *buf;
469 struct stat st; 489 struct stat st;
470 int fd, count = 0, total = 0; 490 int fd, count = 0, total = 0;
471 491
472 fd = open( file.latin1(), O_RDONLY, 0 ); 492 fd = open( file.latin1(), O_RDONLY, 0 );
473 if ( fd == -1 ) return; 493 if ( fd == -1 ) return;
@@ -492,20 +512,30 @@ void SMTPwrapper::readFromFile(const QString&file, char **data, size_t *size )
492 return; // Success :) 512 return; // Success :)
493 513
494err_free: 514err_free:
495 free( buf ); 515 free( buf );
496err_close: 516err_close:
497 close( fd ); 517 close( fd );
518#endif
498} 519}
499 520
500void SMTPwrapper::progress( size_t current, size_t maximum ) 521void SMTPwrapper::progress( size_t current, size_t maximum )
501{ 522{
502 qDebug( "Current: %i of %i", current, maximum ); 523 qDebug( "Current: %i of %i", current, maximum );
503} 524}
504 525
505void SMTPwrapper::smtpSend( mailmime *mail ) 526void SMTPwrapper::storeMail(char*mail, size_t length, const QString&box)
527{
528 if (!mail) return;
529 QString localfolders = (QString) getenv( "HOME" ) + QString("/Applications/opiemail/localmail/");
530 MBOXwrapper*wrap = new MBOXwrapper(localfolders);
531 wrap->storeMessage(mail,length,box);
532 delete wrap;
533}
534
535void SMTPwrapper::smtpSend( mailmime *mail,bool later )
506{ 536{
507 mailsmtp *session; 537 mailsmtp *session;
508 clist *rcpts; 538 clist *rcpts;
509 char *from, *data, *server, *user = NULL, *pass = NULL; 539 char *from, *data, *server, *user = NULL, *pass = NULL;
510 size_t size; 540 size_t size;
511 int err; 541 int err;
@@ -516,23 +546,33 @@ void SMTPwrapper::smtpSend( mailmime *mail )
516 from = getFrom( mail ); 546 from = getFrom( mail );
517 SMTPaccount *smtp = getAccount( from ); 547 SMTPaccount *smtp = getAccount( from );
518 if ( smtp == NULL ) { 548 if ( smtp == NULL ) {
519 free(from); 549 free(from);
520 return; 550 return;
521 } 551 }
522 server = strdup( smtp->getServer().latin1() );
523 ssl = smtp->getSSL();
524 port = smtp->getPort().toUInt();
525 rcpts = createRcptList( mail->mm_data.mm_message.mm_fields ); 552 rcpts = createRcptList( mail->mm_data.mm_message.mm_fields );
526 553
527 QString file = getTmpFile(); 554 QString file = getTmpFile();
528 writeToFile( file, mail ); 555 writeToFile( file, mail );
556
529 readFromFile( file, &data, &size ); 557 readFromFile( file, &data, &size );
530 QFile f( file ); 558 QFile f( file );
531 f.remove(); 559 f.remove();
560
561 storeMail(data,size,(later?"Outgoing":"Sent"));
532 562
563 if (later) {
564 smtp_address_list_free( rcpts );
565 if (data) free( data );
566 if (from) free(from);
567 return;
568 }
569 server = strdup( smtp->getServer().latin1() );
570 ssl = smtp->getSSL();
571 port = smtp->getPort().toUInt();
572
533 session = mailsmtp_new( 20, &progress ); 573 session = mailsmtp_new( 20, &progress );
534 if ( session == NULL ) goto free_mem; 574 if ( session == NULL ) goto free_mem;
535 575
536 qDebug( "Servername %s at port %i", server, port ); 576 qDebug( "Servername %s at port %i", server, port );
537 if ( ssl ) { 577 if ( ssl ) {
538 qDebug( "SSL session" ); 578 qDebug( "SSL session" );
@@ -578,27 +618,28 @@ void SMTPwrapper::smtpSend( mailmime *mail )
578free_con_session: 618free_con_session:
579 mailsmtp_quit( session ); 619 mailsmtp_quit( session );
580free_mem_session: 620free_mem_session:
581 mailsmtp_free( session ); 621 mailsmtp_free( session );
582free_mem: 622free_mem:
583 smtp_address_list_free( rcpts ); 623 smtp_address_list_free( rcpts );
584 free( data ); 624 if (data) free( data );
585 free( server ); 625 if (from) free(from);
626 if (server) free( server );
586 if ( smtp->getLogin() ) { 627 if ( smtp->getLogin() ) {
587 free( user ); 628 free( user );
588 free( pass ); 629 free( pass );
589 } 630 }
590 free( from ); 631 free( from );
591} 632}
592 633
593void SMTPwrapper::sendMail(const Mail&mail ) 634void SMTPwrapper::sendMail(const Mail&mail,bool later )
594{ 635{
595 mailmime *mimeMail; 636 mailmime * mimeMail;
596 637
597 mimeMail = createMimeMail(mail ); 638 mimeMail = createMimeMail(mail );
598 if ( mimeMail == NULL ) { 639 if ( mimeMail == NULL ) {
599 qDebug( "sendMail: error creating mime mail" ); 640 qDebug( "sendMail: error creating mime mail" );
600 } else { 641 } else {
601 smtpSend( mimeMail ); 642 smtpSend( mimeMail,later );
602 mailmime_free( mimeMail ); 643 mailmime_free( mimeMail );
603 } 644 }
604} 645}