summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/mail/genericwrapper.cpp6
-rw-r--r--noncore/net/mail/imapwrapper.cpp12
-rw-r--r--noncore/net/mail/libmailwrapper/genericwrapper.cpp6
-rw-r--r--noncore/net/mail/libmailwrapper/imapwrapper.cpp12
-rw-r--r--noncore/net/mail/libmailwrapper/mailwrapper.cpp2
-rw-r--r--noncore/net/mail/libmailwrapper/mboxwrapper.cpp12
-rw-r--r--noncore/net/mail/libmailwrapper/smtpwrapper.cpp33
-rw-r--r--noncore/net/mail/mailwrapper.cpp2
-rw-r--r--noncore/net/mail/mboxwrapper.cpp12
-rw-r--r--noncore/net/mail/smtpwrapper.cpp33
10 files changed, 84 insertions, 46 deletions
diff --git a/noncore/net/mail/genericwrapper.cpp b/noncore/net/mail/genericwrapper.cpp
index 447cad0..c1b6e48 100644
--- a/noncore/net/mail/genericwrapper.cpp
+++ b/noncore/net/mail/genericwrapper.cpp
@@ -170,51 +170,51 @@ void Genericwrapper::traverseBody(RecBody&target,mailmessage*message,mailmime*mi
170 traverseBody(target,message,mime->mm_data.mm_message.mm_msg_mime,current_rec+1); 170 traverseBody(target,message,mime->mm_data.mm_message.mm_msg_mime,current_rec+1);
171 } 171 }
172 break; 172 break;
173 } 173 }
174} 174}
175 175
176RecBody Genericwrapper::parseMail( mailmessage * msg ) 176RecBody Genericwrapper::parseMail( mailmessage * msg )
177{ 177{
178 int err = MAILIMF_NO_ERROR; 178 int err = MAILIMF_NO_ERROR;
179 mailmime_single_fields fields; 179 mailmime_single_fields fields;
180 /* is bound to msg and will be freed there */ 180 /* is bound to msg and will be freed there */
181 mailmime * mime=0; 181 mailmime * mime=0;
182 RecBody body; 182 RecBody body;
183 memset(&fields, 0, sizeof(struct mailmime_single_fields)); 183 memset(&fields, 0, sizeof(struct mailmime_single_fields));
184 err = mailmessage_get_bodystructure(msg,&mime); 184 err = mailmessage_get_bodystructure(msg,&mime);
185 traverseBody(body,msg,mime); 185 traverseBody(body,msg,mime);
186 return body; 186 return body;
187} 187}
188 188
189RecMail *Genericwrapper::parseHeader( const char *header ) 189RecMail *Genericwrapper::parseHeader( const char *header )
190{ 190{
191 int err = MAILIMF_NO_ERROR; 191 int err = MAILIMF_NO_ERROR;
192 size_t curTok = 0; 192 size_t curTok = 0;
193 RecMail *mail = new RecMail(); 193 RecMail *mail = new RecMail();
194 mailimf_fields *fields; 194 mailimf_fields *fields = 0;
195 mailimf_references * refs; 195 mailimf_references * refs = 0;
196 mailimf_keywords*keys; 196 mailimf_keywords*keys = 0;
197 QString status; 197 QString status;
198 QString value; 198 QString value;
199 QBitArray mFlags(7); 199 QBitArray mFlags(7);
200 200
201 err = mailimf_fields_parse( (char *) header, strlen( header ), &curTok, &fields ); 201 err = mailimf_fields_parse( (char *) header, strlen( header ), &curTok, &fields );
202 for ( clistiter *current = clist_begin( fields->fld_list ); current != NULL; current = current->next ) { 202 for ( clistiter *current = clist_begin( fields->fld_list ); current != NULL; current = current->next ) {
203 mailimf_field *field = (mailimf_field *) current->data; 203 mailimf_field *field = (mailimf_field *) current->data;
204 switch ( field->fld_type ) { 204 switch ( field->fld_type ) {
205 case MAILIMF_FIELD_FROM: 205 case MAILIMF_FIELD_FROM:
206 mail->setFrom( parseMailboxList( field->fld_data.fld_from->frm_mb_list ) ); 206 mail->setFrom( parseMailboxList( field->fld_data.fld_from->frm_mb_list ) );
207 break; 207 break;
208 case MAILIMF_FIELD_TO: 208 case MAILIMF_FIELD_TO:
209 mail->setTo( parseAddressList( field->fld_data.fld_to->to_addr_list ) ); 209 mail->setTo( parseAddressList( field->fld_data.fld_to->to_addr_list ) );
210 break; 210 break;
211 case MAILIMF_FIELD_CC: 211 case MAILIMF_FIELD_CC:
212 mail->setCC( parseAddressList( field->fld_data.fld_cc->cc_addr_list ) ); 212 mail->setCC( parseAddressList( field->fld_data.fld_cc->cc_addr_list ) );
213 break; 213 break;
214 case MAILIMF_FIELD_BCC: 214 case MAILIMF_FIELD_BCC:
215 mail->setBcc( parseAddressList( field->fld_data.fld_bcc->bcc_addr_list ) ); 215 mail->setBcc( parseAddressList( field->fld_data.fld_bcc->bcc_addr_list ) );
216 break; 216 break;
217 case MAILIMF_FIELD_SUBJECT: 217 case MAILIMF_FIELD_SUBJECT:
218 mail->setSubject(convert_String( field->fld_data.fld_subject->sbj_value ) ); 218 mail->setSubject(convert_String( field->fld_data.fld_subject->sbj_value ) );
219 break; 219 break;
220 case MAILIMF_FIELD_ORIG_DATE: 220 case MAILIMF_FIELD_ORIG_DATE:
diff --git a/noncore/net/mail/imapwrapper.cpp b/noncore/net/mail/imapwrapper.cpp
index 853e4a2..0178e33 100644
--- a/noncore/net/mail/imapwrapper.cpp
+++ b/noncore/net/mail/imapwrapper.cpp
@@ -73,109 +73,107 @@ void IMAPwrapper::login()
73 } 73 }
74 74
75 /* login */ 75 /* login */
76 err = mailimap_login_simple( m_imap, (char*)user, (char*)pass ); 76 err = mailimap_login_simple( m_imap, (char*)user, (char*)pass );
77 if ( err != MAILIMAP_NO_ERROR ) { 77 if ( err != MAILIMAP_NO_ERROR ) {
78 qDebug("error logging in imap: %s",m_imap->imap_response); 78 qDebug("error logging in imap: %s",m_imap->imap_response);
79 err = mailimap_close( m_imap ); 79 err = mailimap_close( m_imap );
80 mailimap_free( m_imap ); 80 mailimap_free( m_imap );
81 m_imap = 0; 81 m_imap = 0;
82 } 82 }
83} 83}
84 84
85void IMAPwrapper::logout() 85void IMAPwrapper::logout()
86{ 86{
87 int err = MAILIMAP_NO_ERROR; 87 int err = MAILIMAP_NO_ERROR;
88 if (!m_imap) return; 88 if (!m_imap) return;
89 err = mailimap_logout( m_imap ); 89 err = mailimap_logout( m_imap );
90 err = mailimap_close( m_imap ); 90 err = mailimap_close( m_imap );
91 mailimap_free( m_imap ); 91 mailimap_free( m_imap );
92 m_imap = 0; 92 m_imap = 0;
93} 93}
94 94
95void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target ) 95void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target )
96{ 96{
97 const char *mb; 97 const char *mb = 0;
98 int err = MAILIMAP_NO_ERROR; 98 int err = MAILIMAP_NO_ERROR;
99 clist *result; 99 clist *result = 0;
100 clistcell *current; 100 clistcell *current;
101// mailimap_fetch_att *fetchAtt,*fetchAttFlags,*fetchAttDate,*fetchAttSize; 101// mailimap_fetch_att *fetchAtt,*fetchAttFlags,*fetchAttDate,*fetchAttSize;
102 mailimap_fetch_type *fetchType; 102 mailimap_fetch_type *fetchType = 0;
103 mailimap_set *set; 103 mailimap_set *set = 0;
104 104
105 mb = mailbox.latin1(); 105 mb = mailbox.latin1();
106 login(); 106 login();
107 if (!m_imap) { 107 if (!m_imap) {
108 return; 108 return;
109 } 109 }
110 /* select mailbox READONLY for operations */ 110 /* select mailbox READONLY for operations */
111 err = mailimap_examine( m_imap, (char*)mb); 111 err = mailimap_examine( m_imap, (char*)mb);
112 if ( err != MAILIMAP_NO_ERROR ) { 112 if ( err != MAILIMAP_NO_ERROR ) {
113 qDebug("error selecting mailbox: %s",m_imap->imap_response); 113 qDebug("error selecting mailbox: %s",m_imap->imap_response);
114 return; 114 return;
115 } 115 }
116 116
117 int last = m_imap->imap_selection_info->sel_exists; 117 int last = m_imap->imap_selection_info->sel_exists;
118 118
119 if (last == 0) { 119 if (last == 0) {
120 qDebug("mailbox has no mails"); 120 qDebug("mailbox has no mails");
121 return; 121 return;
122 } 122 }
123 123
124 result = clist_new();
125 /* the range has to start at 1!!! not with 0!!!! */ 124 /* the range has to start at 1!!! not with 0!!!! */
126 set = mailimap_set_new_interval( 1, last ); 125 set = mailimap_set_new_interval( 1, last );
127 fetchType = mailimap_fetch_type_new_fetch_att_list_empty(); 126 fetchType = mailimap_fetch_type_new_fetch_att_list_empty();
128 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_envelope()); 127 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_envelope());
129 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_flags()); 128 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_flags());
130 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_internaldate()); 129 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_internaldate());
131 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_rfc822_size()); 130 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_rfc822_size());
132 131
133 err = mailimap_fetch( m_imap, set, fetchType, &result ); 132 err = mailimap_fetch( m_imap, set, fetchType, &result );
134 mailimap_set_free( set ); 133 mailimap_set_free( set );
135 mailimap_fetch_type_free( fetchType ); 134 mailimap_fetch_type_free( fetchType );
136 135
137 QString date,subject,from; 136 QString date,subject,from;
138 137
139 if ( err == MAILIMAP_NO_ERROR ) { 138 if ( err == MAILIMAP_NO_ERROR ) {
140
141 mailimap_msg_att * msg_att; 139 mailimap_msg_att * msg_att;
142 int i = 0; 140 int i = 0;
143 for (current = clist_begin(result); current != 0; current=clist_next(current)) { 141 for (current = clist_begin(result); current != 0; current=clist_next(current)) {
144 ++i; 142 ++i;
145 msg_att = (mailimap_msg_att*)current->data; 143 msg_att = (mailimap_msg_att*)current->data;
146 RecMail*m = parse_list_result(msg_att); 144 RecMail*m = parse_list_result(msg_att);
147 if (m) { 145 if (m) {
148 m->setNumber(i); 146 m->setNumber(i);
149 m->setMbox(mailbox); 147 m->setMbox(mailbox);
150 m->setWrapper(this); 148 m->setWrapper(this);
151 target.append(m); 149 target.append(m);
152 } 150 }
153 } 151 }
154 } else { 152 } else {
155 qDebug("Error fetching headers: %s",m_imap->imap_response); 153 qDebug("Error fetching headers: %s",m_imap->imap_response);
156 } 154 }
157 mailimap_fetch_list_free(result); 155 if (result) mailimap_fetch_list_free(result);
158} 156}
159 157
160QList<Folder>* IMAPwrapper::listFolders() 158QList<Folder>* IMAPwrapper::listFolders()
161{ 159{
162 const char *path, *mask; 160 const char *path, *mask;
163 int err = MAILIMAP_NO_ERROR; 161 int err = MAILIMAP_NO_ERROR;
164 clist *result; 162 clist *result;
165 clistcell *current; 163 clistcell *current;
166 164
167 QList<Folder> * folders = new QList<Folder>(); 165 QList<Folder> * folders = new QList<Folder>();
168 folders->setAutoDelete( false ); 166 folders->setAutoDelete( false );
169 login(); 167 login();
170 if (!m_imap) { 168 if (!m_imap) {
171 return folders; 169 return folders;
172 } 170 }
173 171
174/* 172/*
175 * First we have to check for INBOX 'cause it sometimes it's not inside the path. 173 * First we have to check for INBOX 'cause it sometimes it's not inside the path.
176 * We must not forget to filter them out in next loop! 174 * We must not forget to filter them out in next loop!
177 * it seems like ugly code. and yes - it is ugly code. but the best way. 175 * it seems like ugly code. and yes - it is ugly code. but the best way.
178 */ 176 */
179 QString temp; 177 QString temp;
180 mask = "INBOX" ; 178 mask = "INBOX" ;
181 result = clist_new(); 179 result = clist_new();
diff --git a/noncore/net/mail/libmailwrapper/genericwrapper.cpp b/noncore/net/mail/libmailwrapper/genericwrapper.cpp
index 447cad0..c1b6e48 100644
--- a/noncore/net/mail/libmailwrapper/genericwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/genericwrapper.cpp
@@ -170,51 +170,51 @@ void Genericwrapper::traverseBody(RecBody&target,mailmessage*message,mailmime*mi
170 traverseBody(target,message,mime->mm_data.mm_message.mm_msg_mime,current_rec+1); 170 traverseBody(target,message,mime->mm_data.mm_message.mm_msg_mime,current_rec+1);
171 } 171 }
172 break; 172 break;
173 } 173 }
174} 174}
175 175
176RecBody Genericwrapper::parseMail( mailmessage * msg ) 176RecBody Genericwrapper::parseMail( mailmessage * msg )
177{ 177{
178 int err = MAILIMF_NO_ERROR; 178 int err = MAILIMF_NO_ERROR;
179 mailmime_single_fields fields; 179 mailmime_single_fields fields;
180 /* is bound to msg and will be freed there */ 180 /* is bound to msg and will be freed there */
181 mailmime * mime=0; 181 mailmime * mime=0;
182 RecBody body; 182 RecBody body;
183 memset(&fields, 0, sizeof(struct mailmime_single_fields)); 183 memset(&fields, 0, sizeof(struct mailmime_single_fields));
184 err = mailmessage_get_bodystructure(msg,&mime); 184 err = mailmessage_get_bodystructure(msg,&mime);
185 traverseBody(body,msg,mime); 185 traverseBody(body,msg,mime);
186 return body; 186 return body;
187} 187}
188 188
189RecMail *Genericwrapper::parseHeader( const char *header ) 189RecMail *Genericwrapper::parseHeader( const char *header )
190{ 190{
191 int err = MAILIMF_NO_ERROR; 191 int err = MAILIMF_NO_ERROR;
192 size_t curTok = 0; 192 size_t curTok = 0;
193 RecMail *mail = new RecMail(); 193 RecMail *mail = new RecMail();
194 mailimf_fields *fields; 194 mailimf_fields *fields = 0;
195 mailimf_references * refs; 195 mailimf_references * refs = 0;
196 mailimf_keywords*keys; 196 mailimf_keywords*keys = 0;
197 QString status; 197 QString status;
198 QString value; 198 QString value;
199 QBitArray mFlags(7); 199 QBitArray mFlags(7);
200 200
201 err = mailimf_fields_parse( (char *) header, strlen( header ), &curTok, &fields ); 201 err = mailimf_fields_parse( (char *) header, strlen( header ), &curTok, &fields );
202 for ( clistiter *current = clist_begin( fields->fld_list ); current != NULL; current = current->next ) { 202 for ( clistiter *current = clist_begin( fields->fld_list ); current != NULL; current = current->next ) {
203 mailimf_field *field = (mailimf_field *) current->data; 203 mailimf_field *field = (mailimf_field *) current->data;
204 switch ( field->fld_type ) { 204 switch ( field->fld_type ) {
205 case MAILIMF_FIELD_FROM: 205 case MAILIMF_FIELD_FROM:
206 mail->setFrom( parseMailboxList( field->fld_data.fld_from->frm_mb_list ) ); 206 mail->setFrom( parseMailboxList( field->fld_data.fld_from->frm_mb_list ) );
207 break; 207 break;
208 case MAILIMF_FIELD_TO: 208 case MAILIMF_FIELD_TO:
209 mail->setTo( parseAddressList( field->fld_data.fld_to->to_addr_list ) ); 209 mail->setTo( parseAddressList( field->fld_data.fld_to->to_addr_list ) );
210 break; 210 break;
211 case MAILIMF_FIELD_CC: 211 case MAILIMF_FIELD_CC:
212 mail->setCC( parseAddressList( field->fld_data.fld_cc->cc_addr_list ) ); 212 mail->setCC( parseAddressList( field->fld_data.fld_cc->cc_addr_list ) );
213 break; 213 break;
214 case MAILIMF_FIELD_BCC: 214 case MAILIMF_FIELD_BCC:
215 mail->setBcc( parseAddressList( field->fld_data.fld_bcc->bcc_addr_list ) ); 215 mail->setBcc( parseAddressList( field->fld_data.fld_bcc->bcc_addr_list ) );
216 break; 216 break;
217 case MAILIMF_FIELD_SUBJECT: 217 case MAILIMF_FIELD_SUBJECT:
218 mail->setSubject(convert_String( field->fld_data.fld_subject->sbj_value ) ); 218 mail->setSubject(convert_String( field->fld_data.fld_subject->sbj_value ) );
219 break; 219 break;
220 case MAILIMF_FIELD_ORIG_DATE: 220 case MAILIMF_FIELD_ORIG_DATE:
diff --git a/noncore/net/mail/libmailwrapper/imapwrapper.cpp b/noncore/net/mail/libmailwrapper/imapwrapper.cpp
index 853e4a2..0178e33 100644
--- a/noncore/net/mail/libmailwrapper/imapwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/imapwrapper.cpp
@@ -73,109 +73,107 @@ void IMAPwrapper::login()
73 } 73 }
74 74
75 /* login */ 75 /* login */
76 err = mailimap_login_simple( m_imap, (char*)user, (char*)pass ); 76 err = mailimap_login_simple( m_imap, (char*)user, (char*)pass );
77 if ( err != MAILIMAP_NO_ERROR ) { 77 if ( err != MAILIMAP_NO_ERROR ) {
78 qDebug("error logging in imap: %s",m_imap->imap_response); 78 qDebug("error logging in imap: %s",m_imap->imap_response);
79 err = mailimap_close( m_imap ); 79 err = mailimap_close( m_imap );
80 mailimap_free( m_imap ); 80 mailimap_free( m_imap );
81 m_imap = 0; 81 m_imap = 0;
82 } 82 }
83} 83}
84 84
85void IMAPwrapper::logout() 85void IMAPwrapper::logout()
86{ 86{
87 int err = MAILIMAP_NO_ERROR; 87 int err = MAILIMAP_NO_ERROR;
88 if (!m_imap) return; 88 if (!m_imap) return;
89 err = mailimap_logout( m_imap ); 89 err = mailimap_logout( m_imap );
90 err = mailimap_close( m_imap ); 90 err = mailimap_close( m_imap );
91 mailimap_free( m_imap ); 91 mailimap_free( m_imap );
92 m_imap = 0; 92 m_imap = 0;
93} 93}
94 94
95void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target ) 95void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target )
96{ 96{
97 const char *mb; 97 const char *mb = 0;
98 int err = MAILIMAP_NO_ERROR; 98 int err = MAILIMAP_NO_ERROR;
99 clist *result; 99 clist *result = 0;
100 clistcell *current; 100 clistcell *current;
101// mailimap_fetch_att *fetchAtt,*fetchAttFlags,*fetchAttDate,*fetchAttSize; 101// mailimap_fetch_att *fetchAtt,*fetchAttFlags,*fetchAttDate,*fetchAttSize;
102 mailimap_fetch_type *fetchType; 102 mailimap_fetch_type *fetchType = 0;
103 mailimap_set *set; 103 mailimap_set *set = 0;
104 104
105 mb = mailbox.latin1(); 105 mb = mailbox.latin1();
106 login(); 106 login();
107 if (!m_imap) { 107 if (!m_imap) {
108 return; 108 return;
109 } 109 }
110 /* select mailbox READONLY for operations */ 110 /* select mailbox READONLY for operations */
111 err = mailimap_examine( m_imap, (char*)mb); 111 err = mailimap_examine( m_imap, (char*)mb);
112 if ( err != MAILIMAP_NO_ERROR ) { 112 if ( err != MAILIMAP_NO_ERROR ) {
113 qDebug("error selecting mailbox: %s",m_imap->imap_response); 113 qDebug("error selecting mailbox: %s",m_imap->imap_response);
114 return; 114 return;
115 } 115 }
116 116
117 int last = m_imap->imap_selection_info->sel_exists; 117 int last = m_imap->imap_selection_info->sel_exists;
118 118
119 if (last == 0) { 119 if (last == 0) {
120 qDebug("mailbox has no mails"); 120 qDebug("mailbox has no mails");
121 return; 121 return;
122 } 122 }
123 123
124 result = clist_new();
125 /* the range has to start at 1!!! not with 0!!!! */ 124 /* the range has to start at 1!!! not with 0!!!! */
126 set = mailimap_set_new_interval( 1, last ); 125 set = mailimap_set_new_interval( 1, last );
127 fetchType = mailimap_fetch_type_new_fetch_att_list_empty(); 126 fetchType = mailimap_fetch_type_new_fetch_att_list_empty();
128 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_envelope()); 127 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_envelope());
129 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_flags()); 128 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_flags());
130 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_internaldate()); 129 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_internaldate());
131 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_rfc822_size()); 130 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_rfc822_size());
132 131
133 err = mailimap_fetch( m_imap, set, fetchType, &result ); 132 err = mailimap_fetch( m_imap, set, fetchType, &result );
134 mailimap_set_free( set ); 133 mailimap_set_free( set );
135 mailimap_fetch_type_free( fetchType ); 134 mailimap_fetch_type_free( fetchType );
136 135
137 QString date,subject,from; 136 QString date,subject,from;
138 137
139 if ( err == MAILIMAP_NO_ERROR ) { 138 if ( err == MAILIMAP_NO_ERROR ) {
140
141 mailimap_msg_att * msg_att; 139 mailimap_msg_att * msg_att;
142 int i = 0; 140 int i = 0;
143 for (current = clist_begin(result); current != 0; current=clist_next(current)) { 141 for (current = clist_begin(result); current != 0; current=clist_next(current)) {
144 ++i; 142 ++i;
145 msg_att = (mailimap_msg_att*)current->data; 143 msg_att = (mailimap_msg_att*)current->data;
146 RecMail*m = parse_list_result(msg_att); 144 RecMail*m = parse_list_result(msg_att);
147 if (m) { 145 if (m) {
148 m->setNumber(i); 146 m->setNumber(i);
149 m->setMbox(mailbox); 147 m->setMbox(mailbox);
150 m->setWrapper(this); 148 m->setWrapper(this);
151 target.append(m); 149 target.append(m);
152 } 150 }
153 } 151 }
154 } else { 152 } else {
155 qDebug("Error fetching headers: %s",m_imap->imap_response); 153 qDebug("Error fetching headers: %s",m_imap->imap_response);
156 } 154 }
157 mailimap_fetch_list_free(result); 155 if (result) mailimap_fetch_list_free(result);
158} 156}
159 157
160QList<Folder>* IMAPwrapper::listFolders() 158QList<Folder>* IMAPwrapper::listFolders()
161{ 159{
162 const char *path, *mask; 160 const char *path, *mask;
163 int err = MAILIMAP_NO_ERROR; 161 int err = MAILIMAP_NO_ERROR;
164 clist *result; 162 clist *result;
165 clistcell *current; 163 clistcell *current;
166 164
167 QList<Folder> * folders = new QList<Folder>(); 165 QList<Folder> * folders = new QList<Folder>();
168 folders->setAutoDelete( false ); 166 folders->setAutoDelete( false );
169 login(); 167 login();
170 if (!m_imap) { 168 if (!m_imap) {
171 return folders; 169 return folders;
172 } 170 }
173 171
174/* 172/*
175 * First we have to check for INBOX 'cause it sometimes it's not inside the path. 173 * First we have to check for INBOX 'cause it sometimes it's not inside the path.
176 * We must not forget to filter them out in next loop! 174 * We must not forget to filter them out in next loop!
177 * it seems like ugly code. and yes - it is ugly code. but the best way. 175 * it seems like ugly code. and yes - it is ugly code. but the best way.
178 */ 176 */
179 QString temp; 177 QString temp;
180 mask = "INBOX" ; 178 mask = "INBOX" ;
181 result = clist_new(); 179 result = clist_new();
diff --git a/noncore/net/mail/libmailwrapper/mailwrapper.cpp b/noncore/net/mail/libmailwrapper/mailwrapper.cpp
index f8efd09..6479783 100644
--- a/noncore/net/mail/libmailwrapper/mailwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/mailwrapper.cpp
@@ -34,49 +34,49 @@ IMAPFolder::IMAPFolder(const QString&name,const QString&sep, bool select,const Q
34 // Decode IMAP foldername 34 // Decode IMAP foldername
35 nameDisplay = IMAPFolder::decodeFolderName( name ); 35 nameDisplay = IMAPFolder::decodeFolderName( name );
36 qDebug( "folder " + name + " - displayed as " + nameDisplay ); 36 qDebug( "folder " + name + " - displayed as " + nameDisplay );
37 37
38 if (prefix.length()>0) { 38 if (prefix.length()>0) {
39 if (nameDisplay.startsWith(prefix) && nameDisplay.length()>prefix.length()) { 39 if (nameDisplay.startsWith(prefix) && nameDisplay.length()>prefix.length()) {
40 nameDisplay=nameDisplay.right(nameDisplay.length()-prefix.length()); 40 nameDisplay=nameDisplay.right(nameDisplay.length()-prefix.length());
41 } 41 }
42 } 42 }
43} 43}
44 44
45static unsigned char base64chars[] = 45static unsigned char base64chars[] =
46 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+,"; 46 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+,";
47 47
48/** 48/**
49 * Decodes base64 encoded parts of the imapfolder name 49 * Decodes base64 encoded parts of the imapfolder name
50 * Code taken from kde cvs: kdebase/kioslave/imap4/rfcdecoder.cc 50 * Code taken from kde cvs: kdebase/kioslave/imap4/rfcdecoder.cc
51 */ 51 */
52QString IMAPFolder::decodeFolderName( const QString &name ) 52QString IMAPFolder::decodeFolderName( const QString &name )
53{ 53{
54 unsigned char c, i, bitcount; 54 unsigned char c, i, bitcount;
55 unsigned long ucs4, utf16, bitbuf; 55 unsigned long ucs4, utf16, bitbuf;
56 unsigned char base64[256], utf8[6]; 56 unsigned char base64[256], utf8[6];
57 unsigned long srcPtr = 0; 57 unsigned long srcPtr = 0;
58 QCString dst; 58 QCString dst = "";
59 QCString src = name.ascii(); 59 QCString src = name.ascii();
60 60
61 /* initialize modified base64 decoding table */ 61 /* initialize modified base64 decoding table */
62 memset(base64, UNDEFINED, sizeof(base64)); 62 memset(base64, UNDEFINED, sizeof(base64));
63 for (i = 0; i < sizeof(base64chars); ++i) { 63 for (i = 0; i < sizeof(base64chars); ++i) {
64 base64[(int)base64chars[i]] = i; 64 base64[(int)base64chars[i]] = i;
65 } 65 }
66 66
67 /* loop until end of string */ 67 /* loop until end of string */
68 while (srcPtr < src.length ()) { 68 while (srcPtr < src.length ()) {
69 c = src[srcPtr++]; 69 c = src[srcPtr++];
70 /* deal with literal characters and &- */ 70 /* deal with literal characters and &- */
71 if (c != '&' || src[srcPtr] == '-') { 71 if (c != '&' || src[srcPtr] == '-') {
72 /* encode literally */ 72 /* encode literally */
73 dst += c; 73 dst += c;
74 /* skip over the '-' if this is an &- sequence */ 74 /* skip over the '-' if this is an &- sequence */
75 if (c == '&') 75 if (c == '&')
76 srcPtr++; 76 srcPtr++;
77 } else { 77 } else {
78 /* convert modified UTF-7 -> UTF-16 -> UCS-4 -> UTF-8 -> HEX */ 78 /* convert modified UTF-7 -> UTF-16 -> UCS-4 -> UTF-8 -> HEX */
79 bitbuf = 0; 79 bitbuf = 0;
80 bitcount = 0; 80 bitcount = 0;
81 ucs4 = 0; 81 ucs4 = 0;
82 while ((c = base64[(unsigned char) src[srcPtr]]) != UNDEFINED) { 82 while ((c = base64[(unsigned char) src[srcPtr]]) != UNDEFINED) {
diff --git a/noncore/net/mail/libmailwrapper/mboxwrapper.cpp b/noncore/net/mail/libmailwrapper/mboxwrapper.cpp
index 293ae1b..6d69263 100644
--- a/noncore/net/mail/libmailwrapper/mboxwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/mboxwrapper.cpp
@@ -1,76 +1,83 @@
1#include "mboxwrapper.h" 1#include "mboxwrapper.h"
2#include "mailtypes.h" 2#include "mailtypes.h"
3#include "mailwrapper.h" 3#include "mailwrapper.h"
4#include <libetpan/libetpan.h> 4#include <libetpan/libetpan.h>
5#include <libetpan/mailstorage.h> 5#include <libetpan/mailstorage.h>
6#include <qdir.h> 6#include <qdir.h>
7#include <stdlib.h>
7 8
8MBOXwrapper::MBOXwrapper(const QString & mbox_dir) 9MBOXwrapper::MBOXwrapper(const QString & mbox_dir)
9 : Genericwrapper(),MBOXPath(mbox_dir) 10 : Genericwrapper(),MBOXPath(mbox_dir)
10{ 11{
11 QDir dir(MBOXPath); 12 QDir dir(MBOXPath);
12 if (!dir.exists()) { 13 if (!dir.exists()) {
13 dir.mkdir(MBOXPath); 14 dir.mkdir(MBOXPath);
14 } 15 }
15} 16}
16 17
17MBOXwrapper::~MBOXwrapper() 18MBOXwrapper::~MBOXwrapper()
18{ 19{
19} 20}
20 21
21void MBOXwrapper::listMessages(const QString & mailbox, QList<RecMail> &target ) 22void MBOXwrapper::listMessages(const QString & mailbox, QList<RecMail> &target )
22{ 23{
23 mailstorage*storage = mailstorage_new(NULL); 24 mailstorage*storage = mailstorage_new(NULL);
24 QString p = MBOXPath+"/"; 25 QString p = MBOXPath+"/";
25 p+=mailbox; 26 p+=mailbox;
27 char*fname = 0;
26 28
27 int r = mbox_mailstorage_init(storage,strdup(p.latin1()),0,0,0); 29 fname = strdup(p.latin1());
30
31 int r = mbox_mailstorage_init(storage,fname,0,0,0);
28 mailfolder*folder; 32 mailfolder*folder;
29 folder = mailfolder_new( storage,strdup(p.latin1()),NULL); 33 folder = mailfolder_new( storage,fname,NULL);
30 r = mailfolder_connect(folder); 34 r = mailfolder_connect(folder);
31 if (r != MAIL_NO_ERROR) { 35 if (r != MAIL_NO_ERROR) {
32 qDebug("Error initializing mbox"); 36 qDebug("Error initializing mbox");
33 mailfolder_free(folder); 37 mailfolder_free(folder);
34 mailstorage_free(storage); 38 mailstorage_free(storage);
39 free(fname);
35 return; 40 return;
36 } 41 }
37 mailmessage_list * env_list = 0; 42 mailmessage_list * env_list = 0;
38 r = mailsession_get_messages_list(folder->fld_session,&env_list); 43 r = mailsession_get_messages_list(folder->fld_session,&env_list);
39 if (r != MAIL_NO_ERROR) { 44 if (r != MAIL_NO_ERROR) {
40 qDebug("Error message list"); 45 qDebug("Error message list");
41 mailfolder_free(folder); 46 mailfolder_free(folder);
42 mailstorage_free(storage); 47 mailstorage_free(storage);
48 free(fname);
43 return; 49 return;
44 } 50 }
45 r = mailsession_get_envelopes_list(folder->fld_session, env_list); 51 r = mailsession_get_envelopes_list(folder->fld_session, env_list);
46 if (r != MAIL_NO_ERROR) { 52 if (r != MAIL_NO_ERROR) {
47 qDebug("Error filling message list"); 53 qDebug("Error filling message list");
48 if (env_list) { 54 if (env_list) {
49 mailmessage_list_free(env_list); 55 mailmessage_list_free(env_list);
50 } 56 }
51 mailfolder_free(folder); 57 mailfolder_free(folder);
52 mailstorage_free(storage); 58 mailstorage_free(storage);
59 free(fname);
53 return; 60 return;
54 } 61 }
55 mailimf_references * refs; 62 mailimf_references * refs;
56 63
57 for(int i = 0 ; i < carray_count(env_list->msg_tab) ; ++i) { 64 for(int i = 0 ; i < carray_count(env_list->msg_tab) ; ++i) {
58 mailmessage * msg; 65 mailmessage * msg;
59 QBitArray mFlags(7); 66 QBitArray mFlags(7);
60 msg = (mailmessage*)carray_get(env_list->msg_tab, i); 67 msg = (mailmessage*)carray_get(env_list->msg_tab, i);
61 if (msg->msg_fields == NULL) { 68 if (msg->msg_fields == NULL) {
62 qDebug("could not fetch envelope of message %i", i); 69 qDebug("could not fetch envelope of message %i", i);
63 continue; 70 continue;
64 } 71 }
65 RecMail * mail = new RecMail(); 72 RecMail * mail = new RecMail();
66 mail->setWrapper(this); 73 mail->setWrapper(this);
67 mail_flags * flag_result = 0; 74 mail_flags * flag_result = 0;
68 r = mailmessage_get_flags(msg,&flag_result); 75 r = mailmessage_get_flags(msg,&flag_result);
69 if (r == MAIL_ERROR_NOT_IMPLEMENTED) { 76 if (r == MAIL_ERROR_NOT_IMPLEMENTED) {
70 mFlags.setBit(FLAG_SEEN); 77 mFlags.setBit(FLAG_SEEN);
71 } 78 }
72 mailimf_single_fields single_fields; 79 mailimf_single_fields single_fields;
73 mailimf_single_fields_init(&single_fields, msg->msg_fields); 80 mailimf_single_fields_init(&single_fields, msg->msg_fields);
74 mail->setMsgsize(msg->msg_size); 81 mail->setMsgsize(msg->msg_size);
75 mail->setFlags(mFlags); 82 mail->setFlags(mFlags);
76 mail->setMbox(mailbox); 83 mail->setMbox(mailbox);
@@ -82,48 +89,49 @@ void MBOXwrapper::listMessages(const QString & mailbox, QList<RecMail> &target )
82 if (single_fields.fld_to) 89 if (single_fields.fld_to)
83 mail->setTo( parseAddressList( single_fields.fld_to->to_addr_list ) ); 90 mail->setTo( parseAddressList( single_fields.fld_to->to_addr_list ) );
84 if (single_fields.fld_cc) 91 if (single_fields.fld_cc)
85 mail->setCC( parseAddressList( single_fields.fld_cc->cc_addr_list ) ); 92 mail->setCC( parseAddressList( single_fields.fld_cc->cc_addr_list ) );
86 if (single_fields.fld_bcc) 93 if (single_fields.fld_bcc)
87 mail->setBcc( parseAddressList( single_fields.fld_bcc->bcc_addr_list ) ); 94 mail->setBcc( parseAddressList( single_fields.fld_bcc->bcc_addr_list ) );
88 if (single_fields.fld_orig_date) 95 if (single_fields.fld_orig_date)
89 mail->setDate( parseDateTime( single_fields.fld_orig_date->dt_date_time ) ); 96 mail->setDate( parseDateTime( single_fields.fld_orig_date->dt_date_time ) );
90 if (single_fields.fld_message_id->mid_value) 97 if (single_fields.fld_message_id->mid_value)
91 mail->setMsgid(QString(single_fields.fld_message_id->mid_value)); 98 mail->setMsgid(QString(single_fields.fld_message_id->mid_value));
92 refs = single_fields.fld_references; 99 refs = single_fields.fld_references;
93 if (refs && refs->mid_list && clist_count(refs->mid_list)) { 100 if (refs && refs->mid_list && clist_count(refs->mid_list)) {
94 char * text = (char*)refs->mid_list->first->data; 101 char * text = (char*)refs->mid_list->first->data;
95 mail->setReplyto(QString(text)); 102 mail->setReplyto(QString(text));
96 } 103 }
97 104
98 target.append(mail); 105 target.append(mail);
99 } 106 }
100 if (env_list) { 107 if (env_list) {
101 mailmessage_list_free(env_list); 108 mailmessage_list_free(env_list);
102 } 109 }
103 mailfolder_disconnect(folder); 110 mailfolder_disconnect(folder);
104 mailfolder_free(folder); 111 mailfolder_free(folder);
105 mailstorage_free(storage); 112 mailstorage_free(storage);
113 free(fname);
106} 114}
107 115
108QList<Folder>* MBOXwrapper::listFolders() 116QList<Folder>* MBOXwrapper::listFolders()
109{ 117{
110 QList<Folder> * folders = new QList<Folder>(); 118 QList<Folder> * folders = new QList<Folder>();
111 folders->setAutoDelete( false ); 119 folders->setAutoDelete( false );
112 QDir dir(MBOXPath); 120 QDir dir(MBOXPath);
113 if (!dir.exists()) return folders; 121 if (!dir.exists()) return folders;
114 dir.setFilter(QDir::Files|QDir::Writable|QDir::Readable); 122 dir.setFilter(QDir::Files|QDir::Writable|QDir::Readable);
115 QStringList entries = dir.entryList(); 123 QStringList entries = dir.entryList();
116 QStringList::ConstIterator it = entries.begin(); 124 QStringList::ConstIterator it = entries.begin();
117 for (;it!=entries.end();++it) { 125 for (;it!=entries.end();++it) {
118 Folder*inb=new Folder(*it,"/"); 126 Folder*inb=new Folder(*it,"/");
119 folders->append(inb); 127 folders->append(inb);
120 } 128 }
121 return folders; 129 return folders;
122} 130}
123 131
124void MBOXwrapper::deleteMail(const RecMail&mail) 132void MBOXwrapper::deleteMail(const RecMail&mail)
125{ 133{
126 mailstorage*storage = mailstorage_new(NULL); 134 mailstorage*storage = mailstorage_new(NULL);
127 QString p = MBOXPath+"/"; 135 QString p = MBOXPath+"/";
128 p+=mail.getMbox(); 136 p+=mail.getMbox();
129 mailmessage * msg; 137 mailmessage * msg;
diff --git a/noncore/net/mail/libmailwrapper/smtpwrapper.cpp b/noncore/net/mail/libmailwrapper/smtpwrapper.cpp
index a7e4837..21992b4 100644
--- a/noncore/net/mail/libmailwrapper/smtpwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/smtpwrapper.cpp
@@ -420,49 +420,51 @@ clist *SMTPwrapper::createRcptList( mailimf_fields *fields )
420 addRcpts( rcptList, field->fld_data.fld_bcc->bcc_addr_list ); 420 addRcpts( rcptList, field->fld_data.fld_bcc->bcc_addr_list );
421 } 421 }
422 422
423 return rcptList; 423 return rcptList;
424} 424}
425 425
426char *SMTPwrapper::getFrom( mailimf_field *ffrom) 426char *SMTPwrapper::getFrom( mailimf_field *ffrom)
427{ 427{
428 char *from = NULL; 428 char *from = NULL;
429 if ( ffrom && (ffrom->fld_type == MAILIMF_FIELD_FROM) 429 if ( ffrom && (ffrom->fld_type == MAILIMF_FIELD_FROM)
430 && ffrom->fld_data.fld_from->frm_mb_list && ffrom->fld_data.fld_from->frm_mb_list->mb_list ) { 430 && ffrom->fld_data.fld_from->frm_mb_list && ffrom->fld_data.fld_from->frm_mb_list->mb_list ) {
431 clist *cl = ffrom->fld_data.fld_from->frm_mb_list->mb_list; 431 clist *cl = ffrom->fld_data.fld_from->frm_mb_list->mb_list;
432 clistiter *it; 432 clistiter *it;
433 for ( it = clist_begin( cl ); it; it = it->next ) { 433 for ( it = clist_begin( cl ); it; it = it->next ) {
434 mailimf_mailbox *mb = (mailimf_mailbox *) it->data; 434 mailimf_mailbox *mb = (mailimf_mailbox *) it->data;
435 from = strdup( mb->mb_addr_spec ); 435 from = strdup( mb->mb_addr_spec );
436 } 436 }
437 } 437 }
438 438
439 return from; 439 return from;
440} 440}
441 441
442char *SMTPwrapper::getFrom( mailmime *mail ) 442char *SMTPwrapper::getFrom( mailmime *mail )
443{ 443{
444 /* no need to delete - its just a pointer to structure content */
444 mailimf_field *ffrom = 0; 445 mailimf_field *ffrom = 0;
446 char*f = 0;
445 ffrom = getField( mail->mm_data.mm_message.mm_fields, MAILIMF_FIELD_FROM ); 447 ffrom = getField( mail->mm_data.mm_message.mm_fields, MAILIMF_FIELD_FROM );
446 return getFrom(ffrom); 448 return getFrom(ffrom);
447} 449}
448 450
449SMTPaccount *SMTPwrapper::getAccount(const QString&name ) 451SMTPaccount *SMTPwrapper::getAccount(const QString&name )
450{ 452{
451 SMTPaccount *smtp; 453 SMTPaccount *smtp;
452 454
453 QList<Account> list = settings->getAccounts(); 455 QList<Account> list = settings->getAccounts();
454 Account *it; 456 Account *it;
455 for ( it = list.first(); it; it = list.next() ) { 457 for ( it = list.first(); it; it = list.next() ) {
456 if ( it->getType().compare( "SMTP" ) == 0 ) { 458 if ( it->getType().compare( "SMTP" ) == 0 ) {
457 smtp = static_cast<SMTPaccount *>(it); 459 smtp = static_cast<SMTPaccount *>(it);
458 if ( smtp->getName()== name ) { 460 if ( smtp->getName()== name ) {
459 qDebug( "SMTPaccount found for" ); 461 qDebug( "SMTPaccount found for" );
460 qDebug( name ); 462 qDebug( name );
461 return smtp; 463 return smtp;
462 } 464 }
463 } 465 }
464 } 466 }
465 467
466 return NULL; 468 return NULL;
467} 469}
468 470
@@ -542,48 +544,51 @@ void SMTPwrapper::smtpSend( mailmime *mail,bool later, SMTPaccount *smtp )
542{ 544{
543 clist *rcpts = 0; 545 clist *rcpts = 0;
544 char *from, *data; 546 char *from, *data;
545 size_t size; 547 size_t size;
546 548
547 if ( smtp == NULL ) { 549 if ( smtp == NULL ) {
548 return; 550 return;
549 } 551 }
550 from = data = 0; 552 from = data = 0;
551 553
552 QString file = getTmpFile(); 554 QString file = getTmpFile();
553 writeToFile( file, mail ); 555 writeToFile( file, mail );
554 readFromFile( file, &data, &size ); 556 readFromFile( file, &data, &size );
555 QFile f( file ); 557 QFile f( file );
556 f.remove(); 558 f.remove();
557 559
558 if (later) { 560 if (later) {
559 storeMail(data,size,"Outgoing"); 561 storeMail(data,size,"Outgoing");
560 if (data) free( data ); 562 if (data) free( data );
561 return; 563 return;
562 } 564 }
563 from = getFrom( mail ); 565 from = getFrom( mail );
564 rcpts = createRcptList( mail->mm_data.mm_message.mm_fields ); 566 rcpts = createRcptList( mail->mm_data.mm_message.mm_fields );
565 smtpSend(from,rcpts,data,size,smtp); 567 smtpSend(from,rcpts,data,size,smtp);
568 if (data) {free(data);}
569 if (from) {free(from);}
570 if (rcpts) smtp_address_list_free( rcpts );
566} 571}
567 572
568int SMTPwrapper::smtpSend(char*from,clist*rcpts,char*data,size_t size, SMTPaccount *smtp ) 573int SMTPwrapper::smtpSend(char*from,clist*rcpts,char*data,size_t size, SMTPaccount *smtp )
569{ 574{
570 char *server, *user, *pass; 575 char *server, *user, *pass;
571 bool ssl; 576 bool ssl;
572 uint16_t port; 577 uint16_t port;
573 mailsmtp *session; 578 mailsmtp *session;
574 int err,result; 579 int err,result;
575 580
576 result = 1; 581 result = 1;
577 server = user = pass = 0; 582 server = user = pass = 0;
578 server = strdup( smtp->getServer().latin1() ); 583 server = strdup( smtp->getServer().latin1() );
579 ssl = smtp->getSSL(); 584 ssl = smtp->getSSL();
580 port = smtp->getPort().toUInt(); 585 port = smtp->getPort().toUInt();
581 586
582 session = mailsmtp_new( 20, &progress ); 587 session = mailsmtp_new( 20, &progress );
583 if ( session == NULL ) goto free_mem; 588 if ( session == NULL ) goto free_mem;
584 589
585 qDebug( "Servername %s at port %i", server, port ); 590 qDebug( "Servername %s at port %i", server, port );
586 if ( ssl ) { 591 if ( ssl ) {
587 qDebug( "SSL session" ); 592 qDebug( "SSL session" );
588 err = mailsmtp_ssl_connect( session, server, port ); 593 err = mailsmtp_ssl_connect( session, server, port );
589 } else { 594 } else {
@@ -609,136 +614,144 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,char*data,size_t size, SMTPaccou
609 } else { 614 } else {
610 result = 0; goto free_con_session; 615 result = 0; goto free_con_session;
611 } 616 }
612 } else { 617 } else {
613 user = strdup( smtp->getUser().latin1() ); 618 user = strdup( smtp->getUser().latin1() );
614 pass = strdup( smtp->getPassword().latin1() ); 619 pass = strdup( smtp->getPassword().latin1() );
615 } 620 }
616 qDebug( "session->auth: %i", session->auth); 621 qDebug( "session->auth: %i", session->auth);
617 err = mailsmtp_auth( session, user, pass ); 622 err = mailsmtp_auth( session, user, pass );
618 if ( err == MAILSMTP_NO_ERROR ) qDebug("auth ok"); 623 if ( err == MAILSMTP_NO_ERROR ) qDebug("auth ok");
619 qDebug( "Done auth!" ); 624 qDebug( "Done auth!" );
620 } 625 }
621 626
622 err = mailsmtp_send( session, from, rcpts, data, size ); 627 err = mailsmtp_send( session, from, rcpts, data, size );
623 if ( err != MAILSMTP_NO_ERROR ) {result = 0; goto free_con_session;} 628 if ( err != MAILSMTP_NO_ERROR ) {result = 0; goto free_con_session;}
624 629
625 qDebug( "Mail sent." ); 630 qDebug( "Mail sent." );
626 storeMail(data,size,"Sent"); 631 storeMail(data,size,"Sent");
627 632
628free_con_session: 633free_con_session:
629 mailsmtp_quit( session ); 634 mailsmtp_quit( session );
630free_mem_session: 635free_mem_session:
631 mailsmtp_free( session ); 636 mailsmtp_free( session );
632free_mem: 637free_mem:
633 if (rcpts) smtp_address_list_free( rcpts );
634 if (data) free( data );
635 if (server) free( server ); 638 if (server) free( server );
636 if (from) free( from );
637 if ( smtp->getLogin() ) { 639 if ( smtp->getLogin() ) {
638 free( user ); 640 free( user );
639 free( pass ); 641 free( pass );
640 } 642 }
641 return result; 643 return result;
642} 644}
643 645
644void SMTPwrapper::sendMail(const Mail&mail,bool later ) 646void SMTPwrapper::sendMail(const Mail&mail,bool later )
645{ 647{
646 mailmime * mimeMail; 648 mailmime * mimeMail;
647 649
648 SMTPaccount *smtp = getAccount(mail.getName()); 650 SMTPaccount *smtp = getAccount(mail.getName());
649 651
650 mimeMail = createMimeMail(mail ); 652 mimeMail = createMimeMail(mail );
651 if ( mimeMail == NULL ) { 653 if ( mimeMail == NULL ) {
652 qDebug( "sendMail: error creating mime mail" ); 654 qDebug( "sendMail: error creating mime mail" );
653 } else { 655 } else {
654 sendProgress = new progressMailSend(); 656 sendProgress = new progressMailSend();
655// sendProgress->showMaximized();
656 sendProgress->show(); 657 sendProgress->show();
657 sendProgress->setMaxMails(1); 658 sendProgress->setMaxMails(1);
658 smtpSend( mimeMail,later,smtp); 659 smtpSend( mimeMail,later,smtp);
659 mailmime_free( mimeMail ); 660 mailmime_free( mimeMail );
660 qDebug("Clean up done"); 661 qDebug("Clean up done");
661 sendProgress->hide(); 662 sendProgress->hide();
662 delete sendProgress; 663 delete sendProgress;
663 sendProgress = 0; 664 sendProgress = 0;
664 } 665 }
665} 666}
666 667
667int SMTPwrapper::sendQueuedMail(MBOXwrapper*wrap,SMTPaccount*smtp,RecMail*which) 668int SMTPwrapper::sendQueuedMail(MBOXwrapper*wrap,SMTPaccount*smtp,RecMail*which)
668{ 669{
669 char*data = 0; 670 char*data = 0;
670 size_t length = 0; 671 size_t length = 0;
671 size_t curTok = 0; 672 size_t curTok = 0;
672 mailimf_fields *fields = 0; 673 mailimf_fields *fields = 0;
673 mailimf_field*ffrom = 0; 674 mailimf_field*ffrom = 0;
674 clist *rcpts = 0; 675 clist *rcpts = 0;
675 char*from = 0; 676 char*from = 0;
677 int res = 0;
676 678
677 wrap->fetchRawBody(*which,&data,&length); 679 wrap->fetchRawBody(*which,&data,&length);
678 if (!data) return 0; 680 if (!data) return 0;
679 int err = mailimf_fields_parse( data, length, &curTok, &fields ); 681 int err = mailimf_fields_parse( data, length, &curTok, &fields );
680 if (err != MAILIMF_NO_ERROR) { 682 if (err != MAILIMF_NO_ERROR) {
681 free(data); 683 free(data);
682 delete wrap; 684 delete wrap;
683 return 0; 685 return 0;
684 } 686 }
685 687
686 rcpts = createRcptList( fields ); 688 rcpts = createRcptList( fields );
687 ffrom = getField(fields, MAILIMF_FIELD_FROM ); 689 ffrom = getField(fields, MAILIMF_FIELD_FROM );
688 from = getFrom(ffrom); 690 from = getFrom(ffrom);
689 691
690 qDebug("Size: %i vs. %i",length,strlen(data)); 692 qDebug("Size: %i vs. %i",length,strlen(data));
691 if (rcpts && from) { 693 if (rcpts && from) {
692 return smtpSend(from,rcpts,data,strlen(data),smtp ); 694 res = smtpSend(from,rcpts,data,length,smtp );
693 } 695 }
694 return 0; 696 if (fields) {
697 mailimf_fields_free(fields);
698 fields = 0;
699 }
700 if (data) {
701 free(data);
702 }
703 if (from) {
704 free(from);
705 }
706 if (rcpts) {
707 smtp_address_list_free( rcpts );
708 }
709 return res;
695} 710}
696 711
697/* this is a special fun */ 712/* this is a special fun */
698bool SMTPwrapper::flushOutbox(SMTPaccount*smtp) 713bool SMTPwrapper::flushOutbox(SMTPaccount*smtp)
699{ 714{
700 bool returnValue = true; 715 bool returnValue = true;
701 716
702 if (!smtp) return false; 717 if (!smtp) return false;
703 718
704 QString localfolders = (QString) getenv( "HOME" ) + QString("/Applications/opiemail/localmail/"); 719 QString localfolders = (QString) getenv( "HOME" ) + QString("/Applications/opiemail/localmail/");
705 MBOXwrapper*wrap = new MBOXwrapper(localfolders); 720 MBOXwrapper*wrap = new MBOXwrapper(localfolders);
706 if (!wrap) { 721 if (!wrap) {
707 qDebug("memory error"); 722 qDebug("memory error");
708 return false; 723 return false;
709 } 724 }
710 QList<RecMail> mailsToSend; 725 QList<RecMail> mailsToSend;
711 QList<RecMail> mailsToRemove; 726 QList<RecMail> mailsToRemove;
712 QString mbox("Outgoing"); 727 QString mbox("Outgoing");
713 wrap->listMessages(mbox,mailsToSend); 728 wrap->listMessages(mbox,mailsToSend);
714 if (mailsToSend.count()==0) { 729 if (mailsToSend.count()==0) {
715 delete wrap; 730 delete wrap;
716 return false; 731 return false;
717 } 732 }
718 mailsToSend.setAutoDelete(false); 733 mailsToSend.setAutoDelete(false);
719 sendProgress = new progressMailSend(); 734 sendProgress = new progressMailSend();
720// sendProgress->showMaximized(); 735 sendProgress->show();
721 sendProgress->show(); 736 sendProgress->setMaxMails(mailsToSend.count());
722 sendProgress->setMaxMails(mailsToSend.count());
723 737
724 while (mailsToSend.count()>0) { 738 while (mailsToSend.count()>0) {
725 if (sendQueuedMail(wrap,smtp,mailsToSend.at(0))==0) { 739 if (sendQueuedMail(wrap,smtp,mailsToSend.at(0))==0) {
726 QMessageBox::critical(0,tr("Error sending mail"), 740 QMessageBox::critical(0,tr("Error sending mail"),
727 tr("Error sending queued mail - breaking")); 741 tr("Error sending queued mail - breaking"));
728 742
729 returnValue = false; 743 returnValue = false;
730 break; 744 break;
731 } 745 }
732 mailsToRemove.append(mailsToSend.at(0)); 746 mailsToRemove.append(mailsToSend.at(0));
733 mailsToSend.removeFirst(); 747 mailsToSend.removeFirst();
734 sendProgress->setCurrentMails(mailsToRemove.count()); 748 sendProgress->setCurrentMails(mailsToRemove.count());
735 } 749 }
736 sendProgress->hide(); 750 sendProgress->hide();
737 delete sendProgress; 751 delete sendProgress;
738 sendProgress = 0; 752 sendProgress = 0;
739 wrap->deleteMails(mbox,mailsToRemove); 753 wrap->deleteMails(mbox,mailsToRemove);
740 mailsToSend.setAutoDelete(true); 754 mailsToSend.setAutoDelete(true);
741 delete wrap; 755 delete wrap;
742 return returnValue; 756 return returnValue;
743
744} 757}
diff --git a/noncore/net/mail/mailwrapper.cpp b/noncore/net/mail/mailwrapper.cpp
index f8efd09..6479783 100644
--- a/noncore/net/mail/mailwrapper.cpp
+++ b/noncore/net/mail/mailwrapper.cpp
@@ -34,49 +34,49 @@ IMAPFolder::IMAPFolder(const QString&name,const QString&sep, bool select,const Q
34 // Decode IMAP foldername 34 // Decode IMAP foldername
35 nameDisplay = IMAPFolder::decodeFolderName( name ); 35 nameDisplay = IMAPFolder::decodeFolderName( name );
36 qDebug( "folder " + name + " - displayed as " + nameDisplay ); 36 qDebug( "folder " + name + " - displayed as " + nameDisplay );
37 37
38 if (prefix.length()>0) { 38 if (prefix.length()>0) {
39 if (nameDisplay.startsWith(prefix) && nameDisplay.length()>prefix.length()) { 39 if (nameDisplay.startsWith(prefix) && nameDisplay.length()>prefix.length()) {
40 nameDisplay=nameDisplay.right(nameDisplay.length()-prefix.length()); 40 nameDisplay=nameDisplay.right(nameDisplay.length()-prefix.length());
41 } 41 }
42 } 42 }
43} 43}
44 44
45static unsigned char base64chars[] = 45static unsigned char base64chars[] =
46 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+,"; 46 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+,";
47 47
48/** 48/**
49 * Decodes base64 encoded parts of the imapfolder name 49 * Decodes base64 encoded parts of the imapfolder name
50 * Code taken from kde cvs: kdebase/kioslave/imap4/rfcdecoder.cc 50 * Code taken from kde cvs: kdebase/kioslave/imap4/rfcdecoder.cc
51 */ 51 */
52QString IMAPFolder::decodeFolderName( const QString &name ) 52QString IMAPFolder::decodeFolderName( const QString &name )
53{ 53{
54 unsigned char c, i, bitcount; 54 unsigned char c, i, bitcount;
55 unsigned long ucs4, utf16, bitbuf; 55 unsigned long ucs4, utf16, bitbuf;
56 unsigned char base64[256], utf8[6]; 56 unsigned char base64[256], utf8[6];
57 unsigned long srcPtr = 0; 57 unsigned long srcPtr = 0;
58 QCString dst; 58 QCString dst = "";
59 QCString src = name.ascii(); 59 QCString src = name.ascii();
60 60
61 /* initialize modified base64 decoding table */ 61 /* initialize modified base64 decoding table */
62 memset(base64, UNDEFINED, sizeof(base64)); 62 memset(base64, UNDEFINED, sizeof(base64));
63 for (i = 0; i < sizeof(base64chars); ++i) { 63 for (i = 0; i < sizeof(base64chars); ++i) {
64 base64[(int)base64chars[i]] = i; 64 base64[(int)base64chars[i]] = i;
65 } 65 }
66 66
67 /* loop until end of string */ 67 /* loop until end of string */
68 while (srcPtr < src.length ()) { 68 while (srcPtr < src.length ()) {
69 c = src[srcPtr++]; 69 c = src[srcPtr++];
70 /* deal with literal characters and &- */ 70 /* deal with literal characters and &- */
71 if (c != '&' || src[srcPtr] == '-') { 71 if (c != '&' || src[srcPtr] == '-') {
72 /* encode literally */ 72 /* encode literally */
73 dst += c; 73 dst += c;
74 /* skip over the '-' if this is an &- sequence */ 74 /* skip over the '-' if this is an &- sequence */
75 if (c == '&') 75 if (c == '&')
76 srcPtr++; 76 srcPtr++;
77 } else { 77 } else {
78 /* convert modified UTF-7 -> UTF-16 -> UCS-4 -> UTF-8 -> HEX */ 78 /* convert modified UTF-7 -> UTF-16 -> UCS-4 -> UTF-8 -> HEX */
79 bitbuf = 0; 79 bitbuf = 0;
80 bitcount = 0; 80 bitcount = 0;
81 ucs4 = 0; 81 ucs4 = 0;
82 while ((c = base64[(unsigned char) src[srcPtr]]) != UNDEFINED) { 82 while ((c = base64[(unsigned char) src[srcPtr]]) != UNDEFINED) {
diff --git a/noncore/net/mail/mboxwrapper.cpp b/noncore/net/mail/mboxwrapper.cpp
index 293ae1b..6d69263 100644
--- a/noncore/net/mail/mboxwrapper.cpp
+++ b/noncore/net/mail/mboxwrapper.cpp
@@ -1,76 +1,83 @@
1#include "mboxwrapper.h" 1#include "mboxwrapper.h"
2#include "mailtypes.h" 2#include "mailtypes.h"
3#include "mailwrapper.h" 3#include "mailwrapper.h"
4#include <libetpan/libetpan.h> 4#include <libetpan/libetpan.h>
5#include <libetpan/mailstorage.h> 5#include <libetpan/mailstorage.h>
6#include <qdir.h> 6#include <qdir.h>
7#include <stdlib.h>
7 8
8MBOXwrapper::MBOXwrapper(const QString & mbox_dir) 9MBOXwrapper::MBOXwrapper(const QString & mbox_dir)
9 : Genericwrapper(),MBOXPath(mbox_dir) 10 : Genericwrapper(),MBOXPath(mbox_dir)
10{ 11{
11 QDir dir(MBOXPath); 12 QDir dir(MBOXPath);
12 if (!dir.exists()) { 13 if (!dir.exists()) {
13 dir.mkdir(MBOXPath); 14 dir.mkdir(MBOXPath);
14 } 15 }
15} 16}
16 17
17MBOXwrapper::~MBOXwrapper() 18MBOXwrapper::~MBOXwrapper()
18{ 19{
19} 20}
20 21
21void MBOXwrapper::listMessages(const QString & mailbox, QList<RecMail> &target ) 22void MBOXwrapper::listMessages(const QString & mailbox, QList<RecMail> &target )
22{ 23{
23 mailstorage*storage = mailstorage_new(NULL); 24 mailstorage*storage = mailstorage_new(NULL);
24 QString p = MBOXPath+"/"; 25 QString p = MBOXPath+"/";
25 p+=mailbox; 26 p+=mailbox;
27 char*fname = 0;
26 28
27 int r = mbox_mailstorage_init(storage,strdup(p.latin1()),0,0,0); 29 fname = strdup(p.latin1());
30
31 int r = mbox_mailstorage_init(storage,fname,0,0,0);
28 mailfolder*folder; 32 mailfolder*folder;
29 folder = mailfolder_new( storage,strdup(p.latin1()),NULL); 33 folder = mailfolder_new( storage,fname,NULL);
30 r = mailfolder_connect(folder); 34 r = mailfolder_connect(folder);
31 if (r != MAIL_NO_ERROR) { 35 if (r != MAIL_NO_ERROR) {
32 qDebug("Error initializing mbox"); 36 qDebug("Error initializing mbox");
33 mailfolder_free(folder); 37 mailfolder_free(folder);
34 mailstorage_free(storage); 38 mailstorage_free(storage);
39 free(fname);
35 return; 40 return;
36 } 41 }
37 mailmessage_list * env_list = 0; 42 mailmessage_list * env_list = 0;
38 r = mailsession_get_messages_list(folder->fld_session,&env_list); 43 r = mailsession_get_messages_list(folder->fld_session,&env_list);
39 if (r != MAIL_NO_ERROR) { 44 if (r != MAIL_NO_ERROR) {
40 qDebug("Error message list"); 45 qDebug("Error message list");
41 mailfolder_free(folder); 46 mailfolder_free(folder);
42 mailstorage_free(storage); 47 mailstorage_free(storage);
48 free(fname);
43 return; 49 return;
44 } 50 }
45 r = mailsession_get_envelopes_list(folder->fld_session, env_list); 51 r = mailsession_get_envelopes_list(folder->fld_session, env_list);
46 if (r != MAIL_NO_ERROR) { 52 if (r != MAIL_NO_ERROR) {
47 qDebug("Error filling message list"); 53 qDebug("Error filling message list");
48 if (env_list) { 54 if (env_list) {
49 mailmessage_list_free(env_list); 55 mailmessage_list_free(env_list);
50 } 56 }
51 mailfolder_free(folder); 57 mailfolder_free(folder);
52 mailstorage_free(storage); 58 mailstorage_free(storage);
59 free(fname);
53 return; 60 return;
54 } 61 }
55 mailimf_references * refs; 62 mailimf_references * refs;
56 63
57 for(int i = 0 ; i < carray_count(env_list->msg_tab) ; ++i) { 64 for(int i = 0 ; i < carray_count(env_list->msg_tab) ; ++i) {
58 mailmessage * msg; 65 mailmessage * msg;
59 QBitArray mFlags(7); 66 QBitArray mFlags(7);
60 msg = (mailmessage*)carray_get(env_list->msg_tab, i); 67 msg = (mailmessage*)carray_get(env_list->msg_tab, i);
61 if (msg->msg_fields == NULL) { 68 if (msg->msg_fields == NULL) {
62 qDebug("could not fetch envelope of message %i", i); 69 qDebug("could not fetch envelope of message %i", i);
63 continue; 70 continue;
64 } 71 }
65 RecMail * mail = new RecMail(); 72 RecMail * mail = new RecMail();
66 mail->setWrapper(this); 73 mail->setWrapper(this);
67 mail_flags * flag_result = 0; 74 mail_flags * flag_result = 0;
68 r = mailmessage_get_flags(msg,&flag_result); 75 r = mailmessage_get_flags(msg,&flag_result);
69 if (r == MAIL_ERROR_NOT_IMPLEMENTED) { 76 if (r == MAIL_ERROR_NOT_IMPLEMENTED) {
70 mFlags.setBit(FLAG_SEEN); 77 mFlags.setBit(FLAG_SEEN);
71 } 78 }
72 mailimf_single_fields single_fields; 79 mailimf_single_fields single_fields;
73 mailimf_single_fields_init(&single_fields, msg->msg_fields); 80 mailimf_single_fields_init(&single_fields, msg->msg_fields);
74 mail->setMsgsize(msg->msg_size); 81 mail->setMsgsize(msg->msg_size);
75 mail->setFlags(mFlags); 82 mail->setFlags(mFlags);
76 mail->setMbox(mailbox); 83 mail->setMbox(mailbox);
@@ -82,48 +89,49 @@ void MBOXwrapper::listMessages(const QString & mailbox, QList<RecMail> &target )
82 if (single_fields.fld_to) 89 if (single_fields.fld_to)
83 mail->setTo( parseAddressList( single_fields.fld_to->to_addr_list ) ); 90 mail->setTo( parseAddressList( single_fields.fld_to->to_addr_list ) );
84 if (single_fields.fld_cc) 91 if (single_fields.fld_cc)
85 mail->setCC( parseAddressList( single_fields.fld_cc->cc_addr_list ) ); 92 mail->setCC( parseAddressList( single_fields.fld_cc->cc_addr_list ) );
86 if (single_fields.fld_bcc) 93 if (single_fields.fld_bcc)
87 mail->setBcc( parseAddressList( single_fields.fld_bcc->bcc_addr_list ) ); 94 mail->setBcc( parseAddressList( single_fields.fld_bcc->bcc_addr_list ) );
88 if (single_fields.fld_orig_date) 95 if (single_fields.fld_orig_date)
89 mail->setDate( parseDateTime( single_fields.fld_orig_date->dt_date_time ) ); 96 mail->setDate( parseDateTime( single_fields.fld_orig_date->dt_date_time ) );
90 if (single_fields.fld_message_id->mid_value) 97 if (single_fields.fld_message_id->mid_value)
91 mail->setMsgid(QString(single_fields.fld_message_id->mid_value)); 98 mail->setMsgid(QString(single_fields.fld_message_id->mid_value));
92 refs = single_fields.fld_references; 99 refs = single_fields.fld_references;
93 if (refs && refs->mid_list && clist_count(refs->mid_list)) { 100 if (refs && refs->mid_list && clist_count(refs->mid_list)) {
94 char * text = (char*)refs->mid_list->first->data; 101 char * text = (char*)refs->mid_list->first->data;
95 mail->setReplyto(QString(text)); 102 mail->setReplyto(QString(text));
96 } 103 }
97 104
98 target.append(mail); 105 target.append(mail);
99 } 106 }
100 if (env_list) { 107 if (env_list) {
101 mailmessage_list_free(env_list); 108 mailmessage_list_free(env_list);
102 } 109 }
103 mailfolder_disconnect(folder); 110 mailfolder_disconnect(folder);
104 mailfolder_free(folder); 111 mailfolder_free(folder);
105 mailstorage_free(storage); 112 mailstorage_free(storage);
113 free(fname);
106} 114}
107 115
108QList<Folder>* MBOXwrapper::listFolders() 116QList<Folder>* MBOXwrapper::listFolders()
109{ 117{
110 QList<Folder> * folders = new QList<Folder>(); 118 QList<Folder> * folders = new QList<Folder>();
111 folders->setAutoDelete( false ); 119 folders->setAutoDelete( false );
112 QDir dir(MBOXPath); 120 QDir dir(MBOXPath);
113 if (!dir.exists()) return folders; 121 if (!dir.exists()) return folders;
114 dir.setFilter(QDir::Files|QDir::Writable|QDir::Readable); 122 dir.setFilter(QDir::Files|QDir::Writable|QDir::Readable);
115 QStringList entries = dir.entryList(); 123 QStringList entries = dir.entryList();
116 QStringList::ConstIterator it = entries.begin(); 124 QStringList::ConstIterator it = entries.begin();
117 for (;it!=entries.end();++it) { 125 for (;it!=entries.end();++it) {
118 Folder*inb=new Folder(*it,"/"); 126 Folder*inb=new Folder(*it,"/");
119 folders->append(inb); 127 folders->append(inb);
120 } 128 }
121 return folders; 129 return folders;
122} 130}
123 131
124void MBOXwrapper::deleteMail(const RecMail&mail) 132void MBOXwrapper::deleteMail(const RecMail&mail)
125{ 133{
126 mailstorage*storage = mailstorage_new(NULL); 134 mailstorage*storage = mailstorage_new(NULL);
127 QString p = MBOXPath+"/"; 135 QString p = MBOXPath+"/";
128 p+=mail.getMbox(); 136 p+=mail.getMbox();
129 mailmessage * msg; 137 mailmessage * msg;
diff --git a/noncore/net/mail/smtpwrapper.cpp b/noncore/net/mail/smtpwrapper.cpp
index a7e4837..21992b4 100644
--- a/noncore/net/mail/smtpwrapper.cpp
+++ b/noncore/net/mail/smtpwrapper.cpp
@@ -420,49 +420,51 @@ clist *SMTPwrapper::createRcptList( mailimf_fields *fields )
420 addRcpts( rcptList, field->fld_data.fld_bcc->bcc_addr_list ); 420 addRcpts( rcptList, field->fld_data.fld_bcc->bcc_addr_list );
421 } 421 }
422 422
423 return rcptList; 423 return rcptList;
424} 424}
425 425
426char *SMTPwrapper::getFrom( mailimf_field *ffrom) 426char *SMTPwrapper::getFrom( mailimf_field *ffrom)
427{ 427{
428 char *from = NULL; 428 char *from = NULL;
429 if ( ffrom && (ffrom->fld_type == MAILIMF_FIELD_FROM) 429 if ( ffrom && (ffrom->fld_type == MAILIMF_FIELD_FROM)
430 && ffrom->fld_data.fld_from->frm_mb_list && ffrom->fld_data.fld_from->frm_mb_list->mb_list ) { 430 && ffrom->fld_data.fld_from->frm_mb_list && ffrom->fld_data.fld_from->frm_mb_list->mb_list ) {
431 clist *cl = ffrom->fld_data.fld_from->frm_mb_list->mb_list; 431 clist *cl = ffrom->fld_data.fld_from->frm_mb_list->mb_list;
432 clistiter *it; 432 clistiter *it;
433 for ( it = clist_begin( cl ); it; it = it->next ) { 433 for ( it = clist_begin( cl ); it; it = it->next ) {
434 mailimf_mailbox *mb = (mailimf_mailbox *) it->data; 434 mailimf_mailbox *mb = (mailimf_mailbox *) it->data;
435 from = strdup( mb->mb_addr_spec ); 435 from = strdup( mb->mb_addr_spec );
436 } 436 }
437 } 437 }
438 438
439 return from; 439 return from;
440} 440}
441 441
442char *SMTPwrapper::getFrom( mailmime *mail ) 442char *SMTPwrapper::getFrom( mailmime *mail )
443{ 443{
444 /* no need to delete - its just a pointer to structure content */
444 mailimf_field *ffrom = 0; 445 mailimf_field *ffrom = 0;
446 char*f = 0;
445 ffrom = getField( mail->mm_data.mm_message.mm_fields, MAILIMF_FIELD_FROM ); 447 ffrom = getField( mail->mm_data.mm_message.mm_fields, MAILIMF_FIELD_FROM );
446 return getFrom(ffrom); 448 return getFrom(ffrom);
447} 449}
448 450
449SMTPaccount *SMTPwrapper::getAccount(const QString&name ) 451SMTPaccount *SMTPwrapper::getAccount(const QString&name )
450{ 452{
451 SMTPaccount *smtp; 453 SMTPaccount *smtp;
452 454
453 QList<Account> list = settings->getAccounts(); 455 QList<Account> list = settings->getAccounts();
454 Account *it; 456 Account *it;
455 for ( it = list.first(); it; it = list.next() ) { 457 for ( it = list.first(); it; it = list.next() ) {
456 if ( it->getType().compare( "SMTP" ) == 0 ) { 458 if ( it->getType().compare( "SMTP" ) == 0 ) {
457 smtp = static_cast<SMTPaccount *>(it); 459 smtp = static_cast<SMTPaccount *>(it);
458 if ( smtp->getName()== name ) { 460 if ( smtp->getName()== name ) {
459 qDebug( "SMTPaccount found for" ); 461 qDebug( "SMTPaccount found for" );
460 qDebug( name ); 462 qDebug( name );
461 return smtp; 463 return smtp;
462 } 464 }
463 } 465 }
464 } 466 }
465 467
466 return NULL; 468 return NULL;
467} 469}
468 470
@@ -542,48 +544,51 @@ void SMTPwrapper::smtpSend( mailmime *mail,bool later, SMTPaccount *smtp )
542{ 544{
543 clist *rcpts = 0; 545 clist *rcpts = 0;
544 char *from, *data; 546 char *from, *data;
545 size_t size; 547 size_t size;
546 548
547 if ( smtp == NULL ) { 549 if ( smtp == NULL ) {
548 return; 550 return;
549 } 551 }
550 from = data = 0; 552 from = data = 0;
551 553
552 QString file = getTmpFile(); 554 QString file = getTmpFile();
553 writeToFile( file, mail ); 555 writeToFile( file, mail );
554 readFromFile( file, &data, &size ); 556 readFromFile( file, &data, &size );
555 QFile f( file ); 557 QFile f( file );
556 f.remove(); 558 f.remove();
557 559
558 if (later) { 560 if (later) {
559 storeMail(data,size,"Outgoing"); 561 storeMail(data,size,"Outgoing");
560 if (data) free( data ); 562 if (data) free( data );
561 return; 563 return;
562 } 564 }
563 from = getFrom( mail ); 565 from = getFrom( mail );
564 rcpts = createRcptList( mail->mm_data.mm_message.mm_fields ); 566 rcpts = createRcptList( mail->mm_data.mm_message.mm_fields );
565 smtpSend(from,rcpts,data,size,smtp); 567 smtpSend(from,rcpts,data,size,smtp);
568 if (data) {free(data);}
569 if (from) {free(from);}
570 if (rcpts) smtp_address_list_free( rcpts );
566} 571}
567 572
568int SMTPwrapper::smtpSend(char*from,clist*rcpts,char*data,size_t size, SMTPaccount *smtp ) 573int SMTPwrapper::smtpSend(char*from,clist*rcpts,char*data,size_t size, SMTPaccount *smtp )
569{ 574{
570 char *server, *user, *pass; 575 char *server, *user, *pass;
571 bool ssl; 576 bool ssl;
572 uint16_t port; 577 uint16_t port;
573 mailsmtp *session; 578 mailsmtp *session;
574 int err,result; 579 int err,result;
575 580
576 result = 1; 581 result = 1;
577 server = user = pass = 0; 582 server = user = pass = 0;
578 server = strdup( smtp->getServer().latin1() ); 583 server = strdup( smtp->getServer().latin1() );
579 ssl = smtp->getSSL(); 584 ssl = smtp->getSSL();
580 port = smtp->getPort().toUInt(); 585 port = smtp->getPort().toUInt();
581 586
582 session = mailsmtp_new( 20, &progress ); 587 session = mailsmtp_new( 20, &progress );
583 if ( session == NULL ) goto free_mem; 588 if ( session == NULL ) goto free_mem;
584 589
585 qDebug( "Servername %s at port %i", server, port ); 590 qDebug( "Servername %s at port %i", server, port );
586 if ( ssl ) { 591 if ( ssl ) {
587 qDebug( "SSL session" ); 592 qDebug( "SSL session" );
588 err = mailsmtp_ssl_connect( session, server, port ); 593 err = mailsmtp_ssl_connect( session, server, port );
589 } else { 594 } else {
@@ -609,136 +614,144 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,char*data,size_t size, SMTPaccou
609 } else { 614 } else {
610 result = 0; goto free_con_session; 615 result = 0; goto free_con_session;
611 } 616 }
612 } else { 617 } else {
613 user = strdup( smtp->getUser().latin1() ); 618 user = strdup( smtp->getUser().latin1() );
614 pass = strdup( smtp->getPassword().latin1() ); 619 pass = strdup( smtp->getPassword().latin1() );
615 } 620 }
616 qDebug( "session->auth: %i", session->auth); 621 qDebug( "session->auth: %i", session->auth);
617 err = mailsmtp_auth( session, user, pass ); 622 err = mailsmtp_auth( session, user, pass );
618 if ( err == MAILSMTP_NO_ERROR ) qDebug("auth ok"); 623 if ( err == MAILSMTP_NO_ERROR ) qDebug("auth ok");
619 qDebug( "Done auth!" ); 624 qDebug( "Done auth!" );
620 } 625 }
621 626
622 err = mailsmtp_send( session, from, rcpts, data, size ); 627 err = mailsmtp_send( session, from, rcpts, data, size );
623 if ( err != MAILSMTP_NO_ERROR ) {result = 0; goto free_con_session;} 628 if ( err != MAILSMTP_NO_ERROR ) {result = 0; goto free_con_session;}
624 629
625 qDebug( "Mail sent." ); 630 qDebug( "Mail sent." );
626 storeMail(data,size,"Sent"); 631 storeMail(data,size,"Sent");
627 632
628free_con_session: 633free_con_session:
629 mailsmtp_quit( session ); 634 mailsmtp_quit( session );
630free_mem_session: 635free_mem_session:
631 mailsmtp_free( session ); 636 mailsmtp_free( session );
632free_mem: 637free_mem:
633 if (rcpts) smtp_address_list_free( rcpts );
634 if (data) free( data );
635 if (server) free( server ); 638 if (server) free( server );
636 if (from) free( from );
637 if ( smtp->getLogin() ) { 639 if ( smtp->getLogin() ) {
638 free( user ); 640 free( user );
639 free( pass ); 641 free( pass );
640 } 642 }
641 return result; 643 return result;
642} 644}
643 645
644void SMTPwrapper::sendMail(const Mail&mail,bool later ) 646void SMTPwrapper::sendMail(const Mail&mail,bool later )
645{ 647{
646 mailmime * mimeMail; 648 mailmime * mimeMail;
647 649
648 SMTPaccount *smtp = getAccount(mail.getName()); 650 SMTPaccount *smtp = getAccount(mail.getName());
649 651
650 mimeMail = createMimeMail(mail ); 652 mimeMail = createMimeMail(mail );
651 if ( mimeMail == NULL ) { 653 if ( mimeMail == NULL ) {
652 qDebug( "sendMail: error creating mime mail" ); 654 qDebug( "sendMail: error creating mime mail" );
653 } else { 655 } else {
654 sendProgress = new progressMailSend(); 656 sendProgress = new progressMailSend();
655// sendProgress->showMaximized();
656 sendProgress->show(); 657 sendProgress->show();
657 sendProgress->setMaxMails(1); 658 sendProgress->setMaxMails(1);
658 smtpSend( mimeMail,later,smtp); 659 smtpSend( mimeMail,later,smtp);
659 mailmime_free( mimeMail ); 660 mailmime_free( mimeMail );
660 qDebug("Clean up done"); 661 qDebug("Clean up done");
661 sendProgress->hide(); 662 sendProgress->hide();
662 delete sendProgress; 663 delete sendProgress;
663 sendProgress = 0; 664 sendProgress = 0;
664 } 665 }
665} 666}
666 667
667int SMTPwrapper::sendQueuedMail(MBOXwrapper*wrap,SMTPaccount*smtp,RecMail*which) 668int SMTPwrapper::sendQueuedMail(MBOXwrapper*wrap,SMTPaccount*smtp,RecMail*which)
668{ 669{
669 char*data = 0; 670 char*data = 0;
670 size_t length = 0; 671 size_t length = 0;
671 size_t curTok = 0; 672 size_t curTok = 0;
672 mailimf_fields *fields = 0; 673 mailimf_fields *fields = 0;
673 mailimf_field*ffrom = 0; 674 mailimf_field*ffrom = 0;
674 clist *rcpts = 0; 675 clist *rcpts = 0;
675 char*from = 0; 676 char*from = 0;
677 int res = 0;
676 678
677 wrap->fetchRawBody(*which,&data,&length); 679 wrap->fetchRawBody(*which,&data,&length);
678 if (!data) return 0; 680 if (!data) return 0;
679 int err = mailimf_fields_parse( data, length, &curTok, &fields ); 681 int err = mailimf_fields_parse( data, length, &curTok, &fields );
680 if (err != MAILIMF_NO_ERROR) { 682 if (err != MAILIMF_NO_ERROR) {
681 free(data); 683 free(data);
682 delete wrap; 684 delete wrap;
683 return 0; 685 return 0;
684 } 686 }
685 687
686 rcpts = createRcptList( fields ); 688 rcpts = createRcptList( fields );
687 ffrom = getField(fields, MAILIMF_FIELD_FROM ); 689 ffrom = getField(fields, MAILIMF_FIELD_FROM );
688 from = getFrom(ffrom); 690 from = getFrom(ffrom);
689 691
690 qDebug("Size: %i vs. %i",length,strlen(data)); 692 qDebug("Size: %i vs. %i",length,strlen(data));
691 if (rcpts && from) { 693 if (rcpts && from) {
692 return smtpSend(from,rcpts,data,strlen(data),smtp ); 694 res = smtpSend(from,rcpts,data,length,smtp );
693 } 695 }
694 return 0; 696 if (fields) {
697 mailimf_fields_free(fields);
698 fields = 0;
699 }
700 if (data) {
701 free(data);
702 }
703 if (from) {
704 free(from);
705 }
706 if (rcpts) {
707 smtp_address_list_free( rcpts );
708 }
709 return res;
695} 710}
696 711
697/* this is a special fun */ 712/* this is a special fun */
698bool SMTPwrapper::flushOutbox(SMTPaccount*smtp) 713bool SMTPwrapper::flushOutbox(SMTPaccount*smtp)
699{ 714{
700 bool returnValue = true; 715 bool returnValue = true;
701 716
702 if (!smtp) return false; 717 if (!smtp) return false;
703 718
704 QString localfolders = (QString) getenv( "HOME" ) + QString("/Applications/opiemail/localmail/"); 719 QString localfolders = (QString) getenv( "HOME" ) + QString("/Applications/opiemail/localmail/");
705 MBOXwrapper*wrap = new MBOXwrapper(localfolders); 720 MBOXwrapper*wrap = new MBOXwrapper(localfolders);
706 if (!wrap) { 721 if (!wrap) {
707 qDebug("memory error"); 722 qDebug("memory error");
708 return false; 723 return false;
709 } 724 }
710 QList<RecMail> mailsToSend; 725 QList<RecMail> mailsToSend;
711 QList<RecMail> mailsToRemove; 726 QList<RecMail> mailsToRemove;
712 QString mbox("Outgoing"); 727 QString mbox("Outgoing");
713 wrap->listMessages(mbox,mailsToSend); 728 wrap->listMessages(mbox,mailsToSend);
714 if (mailsToSend.count()==0) { 729 if (mailsToSend.count()==0) {
715 delete wrap; 730 delete wrap;
716 return false; 731 return false;
717 } 732 }
718 mailsToSend.setAutoDelete(false); 733 mailsToSend.setAutoDelete(false);
719 sendProgress = new progressMailSend(); 734 sendProgress = new progressMailSend();
720// sendProgress->showMaximized(); 735 sendProgress->show();
721 sendProgress->show(); 736 sendProgress->setMaxMails(mailsToSend.count());
722 sendProgress->setMaxMails(mailsToSend.count());
723 737
724 while (mailsToSend.count()>0) { 738 while (mailsToSend.count()>0) {
725 if (sendQueuedMail(wrap,smtp,mailsToSend.at(0))==0) { 739 if (sendQueuedMail(wrap,smtp,mailsToSend.at(0))==0) {
726 QMessageBox::critical(0,tr("Error sending mail"), 740 QMessageBox::critical(0,tr("Error sending mail"),
727 tr("Error sending queued mail - breaking")); 741 tr("Error sending queued mail - breaking"));
728 742
729 returnValue = false; 743 returnValue = false;
730 break; 744 break;
731 } 745 }
732 mailsToRemove.append(mailsToSend.at(0)); 746 mailsToRemove.append(mailsToSend.at(0));
733 mailsToSend.removeFirst(); 747 mailsToSend.removeFirst();
734 sendProgress->setCurrentMails(mailsToRemove.count()); 748 sendProgress->setCurrentMails(mailsToRemove.count());
735 } 749 }
736 sendProgress->hide(); 750 sendProgress->hide();
737 delete sendProgress; 751 delete sendProgress;
738 sendProgress = 0; 752 sendProgress = 0;
739 wrap->deleteMails(mbox,mailsToRemove); 753 wrap->deleteMails(mbox,mailsToRemove);
740 mailsToSend.setAutoDelete(true); 754 mailsToSend.setAutoDelete(true);
741 delete wrap; 755 delete wrap;
742 return returnValue; 756 return returnValue;
743
744} 757}