summaryrefslogtreecommitdiff
authoralwin <alwin>2003-12-25 02:10:29 (UTC)
committer alwin <alwin>2003-12-25 02:10:29 (UTC)
commitaf6b80a3d184e8984575a2cf7741058302c1c30b (patch) (unidiff)
treef6f66284fd9f1fd3403b188c1a1afae58ec951dc
parent52ccb19535d332f38dcd49f9d115192668c45357 (diff)
downloadopie-af6b80a3d184e8984575a2cf7741058302c1c30b.zip
opie-af6b80a3d184e8984575a2cf7741058302c1c30b.tar.gz
opie-af6b80a3d184e8984575a2cf7741058302c1c30b.tar.bz2
fixed an address parsing bug
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/mail/libmailwrapper/smtpwrapper.cpp39
-rw-r--r--noncore/net/mail/smtpwrapper.cpp39
2 files changed, 70 insertions, 8 deletions
diff --git a/noncore/net/mail/libmailwrapper/smtpwrapper.cpp b/noncore/net/mail/libmailwrapper/smtpwrapper.cpp
index 21992b4..285561c 100644
--- a/noncore/net/mail/libmailwrapper/smtpwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/smtpwrapper.cpp
@@ -36,110 +36,138 @@ QString SMTPwrapper::mailsmtpError( int errnum )
36 return tr( "Service not available" ); 36 return tr( "Service not available" );
37 case MAILSMTP_ERROR_STREAM: 37 case MAILSMTP_ERROR_STREAM:
38 return tr( "Stream error" ); 38 return tr( "Stream error" );
39 case MAILSMTP_ERROR_HOSTNAME: 39 case MAILSMTP_ERROR_HOSTNAME:
40 return tr( "gethostname() failed" ); 40 return tr( "gethostname() failed" );
41 case MAILSMTP_ERROR_NOT_IMPLEMENTED: 41 case MAILSMTP_ERROR_NOT_IMPLEMENTED:
42 return tr( "Not implemented" ); 42 return tr( "Not implemented" );
43 case MAILSMTP_ERROR_ACTION_NOT_TAKEN: 43 case MAILSMTP_ERROR_ACTION_NOT_TAKEN:
44 return tr( "Error, action not taken" ); 44 return tr( "Error, action not taken" );
45 case MAILSMTP_ERROR_EXCEED_STORAGE_ALLOCATION: 45 case MAILSMTP_ERROR_EXCEED_STORAGE_ALLOCATION:
46 return tr( "Data exceeds storage allocation" ); 46 return tr( "Data exceeds storage allocation" );
47 case MAILSMTP_ERROR_IN_PROCESSING: 47 case MAILSMTP_ERROR_IN_PROCESSING:
48 return tr( "Error in processing" ); 48 return tr( "Error in processing" );
49 // case MAILSMTP_ERROR_INSUFFISANT_SYSTEM_STORAGE: 49 // case MAILSMTP_ERROR_INSUFFISANT_SYSTEM_STORAGE:
50 // return tr( "Insufficient system storage" ); 50 // return tr( "Insufficient system storage" );
51 case MAILSMTP_ERROR_MAILBOX_UNAVAILABLE: 51 case MAILSMTP_ERROR_MAILBOX_UNAVAILABLE:
52 return tr( "Mailbox unavailable" ); 52 return tr( "Mailbox unavailable" );
53 case MAILSMTP_ERROR_MAILBOX_NAME_NOT_ALLOWED: 53 case MAILSMTP_ERROR_MAILBOX_NAME_NOT_ALLOWED:
54 return tr( "Mailbox name not allowed" ); 54 return tr( "Mailbox name not allowed" );
55 case MAILSMTP_ERROR_BAD_SEQUENCE_OF_COMMAND: 55 case MAILSMTP_ERROR_BAD_SEQUENCE_OF_COMMAND:
56 return tr( "Bad command sequence" ); 56 return tr( "Bad command sequence" );
57 case MAILSMTP_ERROR_USER_NOT_LOCAL: 57 case MAILSMTP_ERROR_USER_NOT_LOCAL:
58 return tr( "User not local" ); 58 return tr( "User not local" );
59 case MAILSMTP_ERROR_TRANSACTION_FAILED: 59 case MAILSMTP_ERROR_TRANSACTION_FAILED:
60 return tr( "Transaction failed" ); 60 return tr( "Transaction failed" );
61 case MAILSMTP_ERROR_MEMORY: 61 case MAILSMTP_ERROR_MEMORY:
62 return tr( "Memory error" ); 62 return tr( "Memory error" );
63 case MAILSMTP_ERROR_CONNECTION_REFUSED: 63 case MAILSMTP_ERROR_CONNECTION_REFUSED:
64 return tr( "Connection refused" ); 64 return tr( "Connection refused" );
65 default: 65 default:
66 return tr( "Unknown error code" ); 66 return tr( "Unknown error code" );
67 } 67 }
68} 68}
69 69
70mailimf_mailbox *SMTPwrapper::newMailbox(const QString&name, const QString&mail ) 70mailimf_mailbox *SMTPwrapper::newMailbox(const QString&name, const QString&mail )
71{ 71{
72 return mailimf_mailbox_new( strdup( name.latin1() ), 72 return mailimf_mailbox_new( strdup( name.latin1() ),
73 strdup( mail.latin1() ) ); 73 strdup( mail.latin1() ) );
74} 74}
75 75
76mailimf_address_list *SMTPwrapper::parseAddresses(const QString&addr ) 76mailimf_address_list *SMTPwrapper::parseAddresses(const QString&addr )
77{ 77{
78 mailimf_address_list *addresses; 78 mailimf_address_list *addresses;
79 79
80 if ( addr.isEmpty() ) return NULL; 80 if ( addr.isEmpty() ) return NULL;
81 81
82 addresses = mailimf_address_list_new_empty(); 82 addresses = mailimf_address_list_new_empty();
83 83
84 QStringList list = QStringList::split( ',', addr ); 84 bool literal_open = false;
85 unsigned int startpos = 0;
86 QStringList list;
87 QString s;
88 unsigned int i = 0;
89 for (; i < addr.length();++i) {
90 switch (addr[i]) {
91 case '\"':
92 literal_open = !literal_open;
93 break;
94 case ',':
95 if (!literal_open) {
96 s = addr.mid(startpos,i-startpos);
97 if (!s.isEmpty()) {
98 list.append(s);
99 qDebug("Appended %s",s.latin1());
100 }
101 // !!!! this is a MUST BE!
102 startpos = ++i;
103 }
104 break;
105 default:
106 break;
107 }
108 }
109 s = addr.mid(startpos,i-startpos);
110 if (!s.isEmpty()) {
111 list.append(s);
112 qDebug("Appended %s",s.latin1());
113 }
85 QStringList::Iterator it; 114 QStringList::Iterator it;
86 for ( it = list.begin(); it != list.end(); it++ ) { 115 for ( it = list.begin(); it != list.end(); it++ ) {
87 char *str = strdup( (*it).latin1() ); 116 char *str = strdup( (*it).latin1() );
88 int err = mailimf_address_list_add_parse( addresses, str ); 117 int err = mailimf_address_list_add_parse( addresses, str );
89 if ( err != MAILIMF_NO_ERROR ) { 118 if ( err != MAILIMF_NO_ERROR ) {
90 qDebug( "Error parsing" ); 119 qDebug( "Error parsing" );
91 qDebug( *it ); 120 qDebug( *it );
92 free( str ); 121 free( str );
93 } else { 122 } else {
94 qDebug( "Parse success! :)" ); 123 qDebug( "Parse success! %s",(*it).latin1());
95 } 124 }
96 } 125 }
97
98 return addresses; 126 return addresses;
99} 127}
100 128
101mailimf_fields *SMTPwrapper::createImfFields(const Mail&mail ) 129mailimf_fields *SMTPwrapper::createImfFields(const Mail&mail )
102{ 130{
103 mailimf_fields *fields; 131 mailimf_fields *fields;
104 mailimf_field *xmailer; 132 mailimf_field *xmailer;
105 mailimf_mailbox *sender, *fromBox; 133 mailimf_mailbox *sender, *fromBox;
106 mailimf_mailbox_list *from; 134 mailimf_mailbox_list *from;
107 mailimf_address_list *to, *cc, *bcc, *reply; 135 mailimf_address_list *to, *cc, *bcc, *reply;
108 char *subject = strdup( mail.getSubject().latin1() ); 136 char *subject = strdup( mail.getSubject().latin1() );
109 int err; 137 int err;
110 138
111 sender = newMailbox( mail.getName(), mail.getMail() ); 139 sender = newMailbox( mail.getName(), mail.getMail() );
112 if ( sender == NULL ) goto err_free; 140 if ( sender == NULL ) goto err_free;
113 141
114 fromBox = newMailbox( mail.getName(), mail.getMail() ); 142 fromBox = newMailbox( mail.getName(), mail.getMail() );
115 if ( fromBox == NULL ) goto err_free_sender; 143 if ( fromBox == NULL ) goto err_free_sender;
116 144
117 from = mailimf_mailbox_list_new_empty(); 145 from = mailimf_mailbox_list_new_empty();
118 if ( from == NULL ) goto err_free_fromBox; 146 if ( from == NULL ) goto err_free_fromBox;
119 147
120 err = mailimf_mailbox_list_add( from, fromBox ); 148 err = mailimf_mailbox_list_add( from, fromBox );
121 if ( err != MAILIMF_NO_ERROR ) goto err_free_from; 149 if ( err != MAILIMF_NO_ERROR ) goto err_free_from;
122 150
123 to = parseAddresses( mail.getTo() ); 151 to = parseAddresses( mail.getTo() );
124 if ( to == NULL ) goto err_free_from; 152 if ( to == NULL ) goto err_free_from;
125 153
126 cc = parseAddresses( mail.getCC() ); 154 cc = parseAddresses( mail.getCC() );
127 bcc = parseAddresses( mail.getBCC() ); 155 bcc = parseAddresses( mail.getBCC() );
128 reply = parseAddresses( mail.getReply() ); 156 reply = parseAddresses( mail.getReply() );
129 157
130 fields = mailimf_fields_new_with_data( from, sender, reply, to, cc, bcc, 158 fields = mailimf_fields_new_with_data( from, sender, reply, to, cc, bcc,
131 NULL, NULL, subject ); 159 NULL, NULL, subject );
132 if ( fields == NULL ) goto err_free_reply; 160 if ( fields == NULL ) goto err_free_reply;
133 161
134 xmailer = mailimf_field_new_custom( strdup( "User-Agent" ), 162 xmailer = mailimf_field_new_custom( strdup( "User-Agent" ),
135 strdup( USER_AGENT ) ); 163 strdup( USER_AGENT ) );
136 if ( xmailer == NULL ) goto err_free_fields; 164 if ( xmailer == NULL ) goto err_free_fields;
137 165
138 err = mailimf_fields_add( fields, xmailer ); 166 err = mailimf_fields_add( fields, xmailer );
139 if ( err != MAILIMF_NO_ERROR ) goto err_free_xmailer; 167 if ( err != MAILIMF_NO_ERROR ) goto err_free_xmailer;
140 168
141 return fields; // Success :) 169 return fields; // Success :)
142 170
143err_free_xmailer: 171err_free_xmailer:
144 mailimf_field_free( xmailer ); 172 mailimf_field_free( xmailer );
145err_free_fields: 173err_free_fields:
@@ -580,97 +608,100 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,char*data,size_t size, SMTPaccou
580 608
581 result = 1; 609 result = 1;
582 server = user = pass = 0; 610 server = user = pass = 0;
583 server = strdup( smtp->getServer().latin1() ); 611 server = strdup( smtp->getServer().latin1() );
584 ssl = smtp->getSSL(); 612 ssl = smtp->getSSL();
585 port = smtp->getPort().toUInt(); 613 port = smtp->getPort().toUInt();
586 614
587 session = mailsmtp_new( 20, &progress ); 615 session = mailsmtp_new( 20, &progress );
588 if ( session == NULL ) goto free_mem; 616 if ( session == NULL ) goto free_mem;
589 617
590 qDebug( "Servername %s at port %i", server, port ); 618 qDebug( "Servername %s at port %i", server, port );
591 if ( ssl ) { 619 if ( ssl ) {
592 qDebug( "SSL session" ); 620 qDebug( "SSL session" );
593 err = mailsmtp_ssl_connect( session, server, port ); 621 err = mailsmtp_ssl_connect( session, server, port );
594 } else { 622 } else {
595 qDebug( "No SSL session" ); 623 qDebug( "No SSL session" );
596 err = mailsmtp_socket_connect( session, server, port ); 624 err = mailsmtp_socket_connect( session, server, port );
597 } 625 }
598 if ( err != MAILSMTP_NO_ERROR ) {result = 0;goto free_mem_session;} 626 if ( err != MAILSMTP_NO_ERROR ) {result = 0;goto free_mem_session;}
599 627
600 err = mailsmtp_init( session ); 628 err = mailsmtp_init( session );
601 if ( err != MAILSMTP_NO_ERROR ) {result = 0; goto free_con_session;} 629 if ( err != MAILSMTP_NO_ERROR ) {result = 0; goto free_con_session;}
602 630
603 qDebug( "INIT OK" ); 631 qDebug( "INIT OK" );
604 632
605 if ( smtp->getLogin() ) { 633 if ( smtp->getLogin() ) {
606 if ( smtp->getUser().isEmpty() || smtp->getPassword().isEmpty() ) { 634 if ( smtp->getUser().isEmpty() || smtp->getPassword().isEmpty() ) {
607 // get'em 635 // get'em
608 LoginDialog login( smtp->getUser(), smtp->getPassword(), NULL, 0, true ); 636 LoginDialog login( smtp->getUser(), smtp->getPassword(), NULL, 0, true );
609 login.show(); 637 login.show();
610 if ( QDialog::Accepted == login.exec() ) { 638 if ( QDialog::Accepted == login.exec() ) {
611 // ok 639 // ok
612 user = strdup( login.getUser().latin1() ); 640 user = strdup( login.getUser().latin1() );
613 pass = strdup( login.getPassword().latin1() ); 641 pass = strdup( login.getPassword().latin1() );
614 } else { 642 } else {
615 result = 0; goto free_con_session; 643 result = 0; goto free_con_session;
616 } 644 }
617 } else { 645 } else {
618 user = strdup( smtp->getUser().latin1() ); 646 user = strdup( smtp->getUser().latin1() );
619 pass = strdup( smtp->getPassword().latin1() ); 647 pass = strdup( smtp->getPassword().latin1() );
620 } 648 }
621 qDebug( "session->auth: %i", session->auth); 649 qDebug( "session->auth: %i", session->auth);
622 err = mailsmtp_auth( session, user, pass ); 650 err = mailsmtp_auth( session, user, pass );
623 if ( err == MAILSMTP_NO_ERROR ) qDebug("auth ok"); 651 if ( err == MAILSMTP_NO_ERROR ) qDebug("auth ok");
624 qDebug( "Done auth!" ); 652 qDebug( "Done auth!" );
625 } 653 }
626 654
627 err = mailsmtp_send( session, from, rcpts, data, size ); 655 err = mailsmtp_send( session, from, rcpts, data, size );
628 if ( err != MAILSMTP_NO_ERROR ) {result = 0; goto free_con_session;} 656 if ( err != MAILSMTP_NO_ERROR ) {
657 qDebug("Error sending mail: %s",mailsmtpError(err).latin1());
658 result = 0; goto free_con_session;
659 }
629 660
630 qDebug( "Mail sent." ); 661 qDebug( "Mail sent." );
631 storeMail(data,size,"Sent"); 662 storeMail(data,size,"Sent");
632 663
633free_con_session: 664free_con_session:
634 mailsmtp_quit( session ); 665 mailsmtp_quit( session );
635free_mem_session: 666free_mem_session:
636 mailsmtp_free( session ); 667 mailsmtp_free( session );
637free_mem: 668free_mem:
638 if (server) free( server ); 669 if (server) free( server );
639 if ( smtp->getLogin() ) { 670 if ( smtp->getLogin() ) {
640 free( user ); 671 free( user );
641 free( pass ); 672 free( pass );
642 } 673 }
643 return result; 674 return result;
644} 675}
645 676
646void SMTPwrapper::sendMail(const Mail&mail,bool later ) 677void SMTPwrapper::sendMail(const Mail&mail,bool later )
647{ 678{
648 mailmime * mimeMail; 679 mailmime * mimeMail;
649 680
650 SMTPaccount *smtp = getAccount(mail.getName()); 681 SMTPaccount *smtp = getAccount(mail.getName());
651 682
652 mimeMail = createMimeMail(mail ); 683 mimeMail = createMimeMail(mail );
653 if ( mimeMail == NULL ) { 684 if ( mimeMail == NULL ) {
654 qDebug( "sendMail: error creating mime mail" ); 685 qDebug( "sendMail: error creating mime mail" );
655 } else { 686 } else {
656 sendProgress = new progressMailSend(); 687 sendProgress = new progressMailSend();
657 sendProgress->show(); 688 sendProgress->show();
658 sendProgress->setMaxMails(1); 689 sendProgress->setMaxMails(1);
659 smtpSend( mimeMail,later,smtp); 690 smtpSend( mimeMail,later,smtp);
660 mailmime_free( mimeMail ); 691 mailmime_free( mimeMail );
661 qDebug("Clean up done"); 692 qDebug("Clean up done");
662 sendProgress->hide(); 693 sendProgress->hide();
663 delete sendProgress; 694 delete sendProgress;
664 sendProgress = 0; 695 sendProgress = 0;
665 } 696 }
666} 697}
667 698
668int SMTPwrapper::sendQueuedMail(MBOXwrapper*wrap,SMTPaccount*smtp,RecMail*which) 699int SMTPwrapper::sendQueuedMail(MBOXwrapper*wrap,SMTPaccount*smtp,RecMail*which)
669{ 700{
670 char*data = 0; 701 char*data = 0;
671 size_t length = 0; 702 size_t length = 0;
672 size_t curTok = 0; 703 size_t curTok = 0;
673 mailimf_fields *fields = 0; 704 mailimf_fields *fields = 0;
674 mailimf_field*ffrom = 0; 705 mailimf_field*ffrom = 0;
675 clist *rcpts = 0; 706 clist *rcpts = 0;
676 char*from = 0; 707 char*from = 0;
diff --git a/noncore/net/mail/smtpwrapper.cpp b/noncore/net/mail/smtpwrapper.cpp
index 21992b4..285561c 100644
--- a/noncore/net/mail/smtpwrapper.cpp
+++ b/noncore/net/mail/smtpwrapper.cpp
@@ -36,110 +36,138 @@ QString SMTPwrapper::mailsmtpError( int errnum )
36 return tr( "Service not available" ); 36 return tr( "Service not available" );
37 case MAILSMTP_ERROR_STREAM: 37 case MAILSMTP_ERROR_STREAM:
38 return tr( "Stream error" ); 38 return tr( "Stream error" );
39 case MAILSMTP_ERROR_HOSTNAME: 39 case MAILSMTP_ERROR_HOSTNAME:
40 return tr( "gethostname() failed" ); 40 return tr( "gethostname() failed" );
41 case MAILSMTP_ERROR_NOT_IMPLEMENTED: 41 case MAILSMTP_ERROR_NOT_IMPLEMENTED:
42 return tr( "Not implemented" ); 42 return tr( "Not implemented" );
43 case MAILSMTP_ERROR_ACTION_NOT_TAKEN: 43 case MAILSMTP_ERROR_ACTION_NOT_TAKEN:
44 return tr( "Error, action not taken" ); 44 return tr( "Error, action not taken" );
45 case MAILSMTP_ERROR_EXCEED_STORAGE_ALLOCATION: 45 case MAILSMTP_ERROR_EXCEED_STORAGE_ALLOCATION:
46 return tr( "Data exceeds storage allocation" ); 46 return tr( "Data exceeds storage allocation" );
47 case MAILSMTP_ERROR_IN_PROCESSING: 47 case MAILSMTP_ERROR_IN_PROCESSING:
48 return tr( "Error in processing" ); 48 return tr( "Error in processing" );
49 // case MAILSMTP_ERROR_INSUFFISANT_SYSTEM_STORAGE: 49 // case MAILSMTP_ERROR_INSUFFISANT_SYSTEM_STORAGE:
50 // return tr( "Insufficient system storage" ); 50 // return tr( "Insufficient system storage" );
51 case MAILSMTP_ERROR_MAILBOX_UNAVAILABLE: 51 case MAILSMTP_ERROR_MAILBOX_UNAVAILABLE:
52 return tr( "Mailbox unavailable" ); 52 return tr( "Mailbox unavailable" );
53 case MAILSMTP_ERROR_MAILBOX_NAME_NOT_ALLOWED: 53 case MAILSMTP_ERROR_MAILBOX_NAME_NOT_ALLOWED:
54 return tr( "Mailbox name not allowed" ); 54 return tr( "Mailbox name not allowed" );
55 case MAILSMTP_ERROR_BAD_SEQUENCE_OF_COMMAND: 55 case MAILSMTP_ERROR_BAD_SEQUENCE_OF_COMMAND:
56 return tr( "Bad command sequence" ); 56 return tr( "Bad command sequence" );
57 case MAILSMTP_ERROR_USER_NOT_LOCAL: 57 case MAILSMTP_ERROR_USER_NOT_LOCAL:
58 return tr( "User not local" ); 58 return tr( "User not local" );
59 case MAILSMTP_ERROR_TRANSACTION_FAILED: 59 case MAILSMTP_ERROR_TRANSACTION_FAILED:
60 return tr( "Transaction failed" ); 60 return tr( "Transaction failed" );
61 case MAILSMTP_ERROR_MEMORY: 61 case MAILSMTP_ERROR_MEMORY:
62 return tr( "Memory error" ); 62 return tr( "Memory error" );
63 case MAILSMTP_ERROR_CONNECTION_REFUSED: 63 case MAILSMTP_ERROR_CONNECTION_REFUSED:
64 return tr( "Connection refused" ); 64 return tr( "Connection refused" );
65 default: 65 default:
66 return tr( "Unknown error code" ); 66 return tr( "Unknown error code" );
67 } 67 }
68} 68}
69 69
70mailimf_mailbox *SMTPwrapper::newMailbox(const QString&name, const QString&mail ) 70mailimf_mailbox *SMTPwrapper::newMailbox(const QString&name, const QString&mail )
71{ 71{
72 return mailimf_mailbox_new( strdup( name.latin1() ), 72 return mailimf_mailbox_new( strdup( name.latin1() ),
73 strdup( mail.latin1() ) ); 73 strdup( mail.latin1() ) );
74} 74}
75 75
76mailimf_address_list *SMTPwrapper::parseAddresses(const QString&addr ) 76mailimf_address_list *SMTPwrapper::parseAddresses(const QString&addr )
77{ 77{
78 mailimf_address_list *addresses; 78 mailimf_address_list *addresses;
79 79
80 if ( addr.isEmpty() ) return NULL; 80 if ( addr.isEmpty() ) return NULL;
81 81
82 addresses = mailimf_address_list_new_empty(); 82 addresses = mailimf_address_list_new_empty();
83 83
84 QStringList list = QStringList::split( ',', addr ); 84 bool literal_open = false;
85 unsigned int startpos = 0;
86 QStringList list;
87 QString s;
88 unsigned int i = 0;
89 for (; i < addr.length();++i) {
90 switch (addr[i]) {
91 case '\"':
92 literal_open = !literal_open;
93 break;
94 case ',':
95 if (!literal_open) {
96 s = addr.mid(startpos,i-startpos);
97 if (!s.isEmpty()) {
98 list.append(s);
99 qDebug("Appended %s",s.latin1());
100 }
101 // !!!! this is a MUST BE!
102 startpos = ++i;
103 }
104 break;
105 default:
106 break;
107 }
108 }
109 s = addr.mid(startpos,i-startpos);
110 if (!s.isEmpty()) {
111 list.append(s);
112 qDebug("Appended %s",s.latin1());
113 }
85 QStringList::Iterator it; 114 QStringList::Iterator it;
86 for ( it = list.begin(); it != list.end(); it++ ) { 115 for ( it = list.begin(); it != list.end(); it++ ) {
87 char *str = strdup( (*it).latin1() ); 116 char *str = strdup( (*it).latin1() );
88 int err = mailimf_address_list_add_parse( addresses, str ); 117 int err = mailimf_address_list_add_parse( addresses, str );
89 if ( err != MAILIMF_NO_ERROR ) { 118 if ( err != MAILIMF_NO_ERROR ) {
90 qDebug( "Error parsing" ); 119 qDebug( "Error parsing" );
91 qDebug( *it ); 120 qDebug( *it );
92 free( str ); 121 free( str );
93 } else { 122 } else {
94 qDebug( "Parse success! :)" ); 123 qDebug( "Parse success! %s",(*it).latin1());
95 } 124 }
96 } 125 }
97
98 return addresses; 126 return addresses;
99} 127}
100 128
101mailimf_fields *SMTPwrapper::createImfFields(const Mail&mail ) 129mailimf_fields *SMTPwrapper::createImfFields(const Mail&mail )
102{ 130{
103 mailimf_fields *fields; 131 mailimf_fields *fields;
104 mailimf_field *xmailer; 132 mailimf_field *xmailer;
105 mailimf_mailbox *sender, *fromBox; 133 mailimf_mailbox *sender, *fromBox;
106 mailimf_mailbox_list *from; 134 mailimf_mailbox_list *from;
107 mailimf_address_list *to, *cc, *bcc, *reply; 135 mailimf_address_list *to, *cc, *bcc, *reply;
108 char *subject = strdup( mail.getSubject().latin1() ); 136 char *subject = strdup( mail.getSubject().latin1() );
109 int err; 137 int err;
110 138
111 sender = newMailbox( mail.getName(), mail.getMail() ); 139 sender = newMailbox( mail.getName(), mail.getMail() );
112 if ( sender == NULL ) goto err_free; 140 if ( sender == NULL ) goto err_free;
113 141
114 fromBox = newMailbox( mail.getName(), mail.getMail() ); 142 fromBox = newMailbox( mail.getName(), mail.getMail() );
115 if ( fromBox == NULL ) goto err_free_sender; 143 if ( fromBox == NULL ) goto err_free_sender;
116 144
117 from = mailimf_mailbox_list_new_empty(); 145 from = mailimf_mailbox_list_new_empty();
118 if ( from == NULL ) goto err_free_fromBox; 146 if ( from == NULL ) goto err_free_fromBox;
119 147
120 err = mailimf_mailbox_list_add( from, fromBox ); 148 err = mailimf_mailbox_list_add( from, fromBox );
121 if ( err != MAILIMF_NO_ERROR ) goto err_free_from; 149 if ( err != MAILIMF_NO_ERROR ) goto err_free_from;
122 150
123 to = parseAddresses( mail.getTo() ); 151 to = parseAddresses( mail.getTo() );
124 if ( to == NULL ) goto err_free_from; 152 if ( to == NULL ) goto err_free_from;
125 153
126 cc = parseAddresses( mail.getCC() ); 154 cc = parseAddresses( mail.getCC() );
127 bcc = parseAddresses( mail.getBCC() ); 155 bcc = parseAddresses( mail.getBCC() );
128 reply = parseAddresses( mail.getReply() ); 156 reply = parseAddresses( mail.getReply() );
129 157
130 fields = mailimf_fields_new_with_data( from, sender, reply, to, cc, bcc, 158 fields = mailimf_fields_new_with_data( from, sender, reply, to, cc, bcc,
131 NULL, NULL, subject ); 159 NULL, NULL, subject );
132 if ( fields == NULL ) goto err_free_reply; 160 if ( fields == NULL ) goto err_free_reply;
133 161
134 xmailer = mailimf_field_new_custom( strdup( "User-Agent" ), 162 xmailer = mailimf_field_new_custom( strdup( "User-Agent" ),
135 strdup( USER_AGENT ) ); 163 strdup( USER_AGENT ) );
136 if ( xmailer == NULL ) goto err_free_fields; 164 if ( xmailer == NULL ) goto err_free_fields;
137 165
138 err = mailimf_fields_add( fields, xmailer ); 166 err = mailimf_fields_add( fields, xmailer );
139 if ( err != MAILIMF_NO_ERROR ) goto err_free_xmailer; 167 if ( err != MAILIMF_NO_ERROR ) goto err_free_xmailer;
140 168
141 return fields; // Success :) 169 return fields; // Success :)
142 170
143err_free_xmailer: 171err_free_xmailer:
144 mailimf_field_free( xmailer ); 172 mailimf_field_free( xmailer );
145err_free_fields: 173err_free_fields:
@@ -580,97 +608,100 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,char*data,size_t size, SMTPaccou
580 608
581 result = 1; 609 result = 1;
582 server = user = pass = 0; 610 server = user = pass = 0;
583 server = strdup( smtp->getServer().latin1() ); 611 server = strdup( smtp->getServer().latin1() );
584 ssl = smtp->getSSL(); 612 ssl = smtp->getSSL();
585 port = smtp->getPort().toUInt(); 613 port = smtp->getPort().toUInt();
586 614
587 session = mailsmtp_new( 20, &progress ); 615 session = mailsmtp_new( 20, &progress );
588 if ( session == NULL ) goto free_mem; 616 if ( session == NULL ) goto free_mem;
589 617
590 qDebug( "Servername %s at port %i", server, port ); 618 qDebug( "Servername %s at port %i", server, port );
591 if ( ssl ) { 619 if ( ssl ) {
592 qDebug( "SSL session" ); 620 qDebug( "SSL session" );
593 err = mailsmtp_ssl_connect( session, server, port ); 621 err = mailsmtp_ssl_connect( session, server, port );
594 } else { 622 } else {
595 qDebug( "No SSL session" ); 623 qDebug( "No SSL session" );
596 err = mailsmtp_socket_connect( session, server, port ); 624 err = mailsmtp_socket_connect( session, server, port );
597 } 625 }
598 if ( err != MAILSMTP_NO_ERROR ) {result = 0;goto free_mem_session;} 626 if ( err != MAILSMTP_NO_ERROR ) {result = 0;goto free_mem_session;}
599 627
600 err = mailsmtp_init( session ); 628 err = mailsmtp_init( session );
601 if ( err != MAILSMTP_NO_ERROR ) {result = 0; goto free_con_session;} 629 if ( err != MAILSMTP_NO_ERROR ) {result = 0; goto free_con_session;}
602 630
603 qDebug( "INIT OK" ); 631 qDebug( "INIT OK" );
604 632
605 if ( smtp->getLogin() ) { 633 if ( smtp->getLogin() ) {
606 if ( smtp->getUser().isEmpty() || smtp->getPassword().isEmpty() ) { 634 if ( smtp->getUser().isEmpty() || smtp->getPassword().isEmpty() ) {
607 // get'em 635 // get'em
608 LoginDialog login( smtp->getUser(), smtp->getPassword(), NULL, 0, true ); 636 LoginDialog login( smtp->getUser(), smtp->getPassword(), NULL, 0, true );
609 login.show(); 637 login.show();
610 if ( QDialog::Accepted == login.exec() ) { 638 if ( QDialog::Accepted == login.exec() ) {
611 // ok 639 // ok
612 user = strdup( login.getUser().latin1() ); 640 user = strdup( login.getUser().latin1() );
613 pass = strdup( login.getPassword().latin1() ); 641 pass = strdup( login.getPassword().latin1() );
614 } else { 642 } else {
615 result = 0; goto free_con_session; 643 result = 0; goto free_con_session;
616 } 644 }
617 } else { 645 } else {
618 user = strdup( smtp->getUser().latin1() ); 646 user = strdup( smtp->getUser().latin1() );
619 pass = strdup( smtp->getPassword().latin1() ); 647 pass = strdup( smtp->getPassword().latin1() );
620 } 648 }
621 qDebug( "session->auth: %i", session->auth); 649 qDebug( "session->auth: %i", session->auth);
622 err = mailsmtp_auth( session, user, pass ); 650 err = mailsmtp_auth( session, user, pass );
623 if ( err == MAILSMTP_NO_ERROR ) qDebug("auth ok"); 651 if ( err == MAILSMTP_NO_ERROR ) qDebug("auth ok");
624 qDebug( "Done auth!" ); 652 qDebug( "Done auth!" );
625 } 653 }
626 654
627 err = mailsmtp_send( session, from, rcpts, data, size ); 655 err = mailsmtp_send( session, from, rcpts, data, size );
628 if ( err != MAILSMTP_NO_ERROR ) {result = 0; goto free_con_session;} 656 if ( err != MAILSMTP_NO_ERROR ) {
657 qDebug("Error sending mail: %s",mailsmtpError(err).latin1());
658 result = 0; goto free_con_session;
659 }
629 660
630 qDebug( "Mail sent." ); 661 qDebug( "Mail sent." );
631 storeMail(data,size,"Sent"); 662 storeMail(data,size,"Sent");
632 663
633free_con_session: 664free_con_session:
634 mailsmtp_quit( session ); 665 mailsmtp_quit( session );
635free_mem_session: 666free_mem_session:
636 mailsmtp_free( session ); 667 mailsmtp_free( session );
637free_mem: 668free_mem:
638 if (server) free( server ); 669 if (server) free( server );
639 if ( smtp->getLogin() ) { 670 if ( smtp->getLogin() ) {
640 free( user ); 671 free( user );
641 free( pass ); 672 free( pass );
642 } 673 }
643 return result; 674 return result;
644} 675}
645 676
646void SMTPwrapper::sendMail(const Mail&mail,bool later ) 677void SMTPwrapper::sendMail(const Mail&mail,bool later )
647{ 678{
648 mailmime * mimeMail; 679 mailmime * mimeMail;
649 680
650 SMTPaccount *smtp = getAccount(mail.getName()); 681 SMTPaccount *smtp = getAccount(mail.getName());
651 682
652 mimeMail = createMimeMail(mail ); 683 mimeMail = createMimeMail(mail );
653 if ( mimeMail == NULL ) { 684 if ( mimeMail == NULL ) {
654 qDebug( "sendMail: error creating mime mail" ); 685 qDebug( "sendMail: error creating mime mail" );
655 } else { 686 } else {
656 sendProgress = new progressMailSend(); 687 sendProgress = new progressMailSend();
657 sendProgress->show(); 688 sendProgress->show();
658 sendProgress->setMaxMails(1); 689 sendProgress->setMaxMails(1);
659 smtpSend( mimeMail,later,smtp); 690 smtpSend( mimeMail,later,smtp);
660 mailmime_free( mimeMail ); 691 mailmime_free( mimeMail );
661 qDebug("Clean up done"); 692 qDebug("Clean up done");
662 sendProgress->hide(); 693 sendProgress->hide();
663 delete sendProgress; 694 delete sendProgress;
664 sendProgress = 0; 695 sendProgress = 0;
665 } 696 }
666} 697}
667 698
668int SMTPwrapper::sendQueuedMail(MBOXwrapper*wrap,SMTPaccount*smtp,RecMail*which) 699int SMTPwrapper::sendQueuedMail(MBOXwrapper*wrap,SMTPaccount*smtp,RecMail*which)
669{ 700{
670 char*data = 0; 701 char*data = 0;
671 size_t length = 0; 702 size_t length = 0;
672 size_t curTok = 0; 703 size_t curTok = 0;
673 mailimf_fields *fields = 0; 704 mailimf_fields *fields = 0;
674 mailimf_field*ffrom = 0; 705 mailimf_field*ffrom = 0;
675 clist *rcpts = 0; 706 clist *rcpts = 0;
676 char*from = 0; 707 char*from = 0;