Diffstat (limited to 'kmicromail/libmailwrapper/generatemail.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | kmicromail/libmailwrapper/generatemail.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/kmicromail/libmailwrapper/generatemail.cpp b/kmicromail/libmailwrapper/generatemail.cpp index 32311d7..2d213fe 100644 --- a/kmicromail/libmailwrapper/generatemail.cpp +++ b/kmicromail/libmailwrapper/generatemail.cpp | |||
@@ -1,39 +1,40 @@ | |||
1 | #include "generatemail.h" | 1 | #include "generatemail.h" |
2 | #include "mailwrapper.h" | 2 | #include "mailwrapper.h" |
3 | 3 | ||
4 | #include <libetpan/libetpan.h> | 4 | #include <libetpan/libetpan.h> |
5 | 5 | ||
6 | //#include <qt.h> | 6 | //#include <qt.h> |
7 | 7 | ||
8 | #include <stdlib.h> | 8 | #include <stdlib.h> |
9 | #include <qfileinfo.h> | 9 | #include <qfileinfo.h> |
10 | 10 | ||
11 | using namespace Opie::Core; | 11 | using namespace Opie::Core; |
12 | const char* Generatemail::USER_AGENT="KOpieMail 33 1/3"; | 12 | const char* Generatemail::USER_AGENT="KOpieMail 33 1/3"; |
13 | 13 | ||
14 | Generatemail::Generatemail() | 14 | Generatemail::Generatemail() |
15 | { | 15 | { |
16 | mCharset = "iso-8859-1"; | ||
16 | } | 17 | } |
17 | 18 | ||
18 | Generatemail::~Generatemail() | 19 | Generatemail::~Generatemail() |
19 | { | 20 | { |
20 | } | 21 | } |
21 | 22 | ||
22 | void Generatemail::addRcpts( clist *list, mailimf_address_list *addr_list ) { | 23 | void Generatemail::addRcpts( clist *list, mailimf_address_list *addr_list ) { |
23 | clistiter *it, *it2; | 24 | clistiter *it, *it2; |
24 | 25 | ||
25 | for ( it = clist_begin( addr_list->ad_list ); it; it = it->next ) { | 26 | for ( it = clist_begin( addr_list->ad_list ); it; it = it->next ) { |
26 | mailimf_address *addr; | 27 | mailimf_address *addr; |
27 | addr = (mailimf_address *) it->data; | 28 | addr = (mailimf_address *) it->data; |
28 | 29 | ||
29 | if ( addr->ad_type == MAILIMF_ADDRESS_MAILBOX ) { | 30 | if ( addr->ad_type == MAILIMF_ADDRESS_MAILBOX ) { |
30 | esmtp_address_list_add( list, addr->ad_data.ad_mailbox->mb_addr_spec, 0, NULL ); | 31 | esmtp_address_list_add( list, addr->ad_data.ad_mailbox->mb_addr_spec, 0, NULL ); |
31 | } else if ( addr->ad_type == MAILIMF_ADDRESS_GROUP ) { | 32 | } else if ( addr->ad_type == MAILIMF_ADDRESS_GROUP ) { |
32 | clist *l = addr->ad_data.ad_group->grp_mb_list->mb_list; | 33 | clist *l = addr->ad_data.ad_group->grp_mb_list->mb_list; |
33 | for ( it2 = clist_begin( l ); it2; it2 = it2->next ) { | 34 | for ( it2 = clist_begin( l ); it2; it2 = it2->next ) { |
34 | mailimf_mailbox *mbox; | 35 | mailimf_mailbox *mbox; |
35 | mbox = (mailimf_mailbox *) it2->data; | 36 | mbox = (mailimf_mailbox *) it2->data; |
36 | esmtp_address_list_add( list, mbox->mb_addr_spec, 0, NULL ); | 37 | esmtp_address_list_add( list, mbox->mb_addr_spec, 0, NULL ); |
37 | } | 38 | } |
38 | } | 39 | } |
39 | } | 40 | } |
@@ -124,74 +125,75 @@ mailimf_address_list *Generatemail::parseAddresses(const QString&addr ) { | |||
124 | return addresses; | 125 | return addresses; |
125 | } | 126 | } |
126 | 127 | ||
127 | mailmime *Generatemail::buildFilePart(const QString&filename,const QString&mimetype,const QString&TextContent ) { | 128 | mailmime *Generatemail::buildFilePart(const QString&filename,const QString&mimetype,const QString&TextContent ) { |
128 | mailmime * filePart = 0; | 129 | mailmime * filePart = 0; |
129 | mailmime_fields * fields = 0; | 130 | mailmime_fields * fields = 0; |
130 | mailmime_content * content = 0; | 131 | mailmime_content * content = 0; |
131 | mailmime_parameter * param = 0; | 132 | mailmime_parameter * param = 0; |
132 | char*name = 0; | 133 | char*name = 0; |
133 | char*file = 0; | 134 | char*file = 0; |
134 | int err; | 135 | int err; |
135 | int pos = filename.findRev( '/' ); | 136 | int pos = filename.findRev( '/' ); |
136 | 137 | ||
137 | if (filename.length()>0) { | 138 | if (filename.length()>0) { |
138 | QString tmp = filename.right( filename.length() - ( pos + 1 ) ); | 139 | QString tmp = filename.right( filename.length() - ( pos + 1 ) ); |
139 | name = strdup( tmp.latin1() ); // just filename | 140 | name = strdup( tmp.latin1() ); // just filename |
140 | file = strdup( filename.latin1() ); // full name with path | 141 | file = strdup( filename.latin1() ); // full name with path |
141 | } | 142 | } |
142 | 143 | ||
143 | int disptype = MAILMIME_DISPOSITION_TYPE_ATTACHMENT; | 144 | int disptype = MAILMIME_DISPOSITION_TYPE_ATTACHMENT; |
144 | int mechanism = MAILMIME_MECHANISM_BASE64; | 145 | int mechanism = MAILMIME_MECHANISM_BASE64; |
145 | 146 | ||
146 | if ( mimetype.startsWith( "text/" ) ) { | 147 | if ( mimetype.startsWith( "text/" ) ) { |
147 | param = mailmime_parameter_new( strdup( "charset" ), | 148 | param = mailmime_parameter_new( strdup( "charset" ), |
148 | strdup( "iso-8859-1" ) ); | 149 | strdup( mCharset.latin1() ) ); |
149 | mechanism = MAILMIME_MECHANISM_QUOTED_PRINTABLE; | 150 | mechanism = MAILMIME_MECHANISM_QUOTED_PRINTABLE; |
150 | } | 151 | } |
151 | 152 | ||
152 | fields = mailmime_fields_new_filename( | 153 | fields = mailmime_fields_new_filename( |
153 | disptype, name, | 154 | disptype, name, |
154 | mechanism ); | 155 | mechanism ); |
155 | content = mailmime_content_new_with_str( (char*)mimetype.latin1() ); | 156 | content = mailmime_content_new_with_str( (char*)mimetype.latin1() ); |
156 | if (content!=0 && fields != 0) { | 157 | if (content!=0 && fields != 0) { |
157 | if (param) { | 158 | if (param) { |
158 | clist_append(content->ct_parameters,param); | 159 | clist_append(content->ct_parameters,param); |
159 | param = 0; | 160 | param = 0; |
160 | } | 161 | } |
161 | if (filename.length()>0) { | 162 | if (filename.length()>0) { |
162 | QFileInfo f(filename); | 163 | QFileInfo f(filename); |
163 | param = mailmime_parameter_new(strdup("name"),strdup(f.fileName().latin1())); | 164 | param = mailmime_parameter_new(strdup("name"),strdup(f.fileName().latin1())); |
164 | clist_append(content->ct_parameters,param); | 165 | clist_append(content->ct_parameters,param); |
165 | param = 0; | 166 | param = 0; |
166 | } | 167 | } |
167 | filePart = mailmime_new_empty( content, fields ); | 168 | filePart = mailmime_new_empty( content, fields ); |
168 | } | 169 | } |
169 | if (filePart) { | 170 | if (filePart) { |
170 | if (filename.length()>0) { | 171 | if (filename.length()>0) { |
171 | err = mailmime_set_body_file( filePart, file ); | 172 | err = mailmime_set_body_file( filePart, file ); |
172 | } else { | 173 | } else { |
173 | err = mailmime_set_body_text(filePart,strdup( TextContent.utf8()),TextContent.utf8().length()); | 174 | err = mailmime_set_body_text(filePart,strdup( TextContent.utf8().data()),TextContent.utf8().length()); |
175 | //err = mailmime_set_body_text(filePart,strdup( TextContent.latin1()),TextContent.length()); | ||
174 | } | 176 | } |
175 | if (err != MAILIMF_NO_ERROR) { | 177 | if (err != MAILIMF_NO_ERROR) { |
176 | qDebug("Error setting body with file "); | 178 | qDebug("Error setting body with file "); |
177 | mailmime_free( filePart ); | 179 | mailmime_free( filePart ); |
178 | filePart = 0; | 180 | filePart = 0; |
179 | } | 181 | } |
180 | } | 182 | } |
181 | 183 | ||
182 | if (!filePart) { | 184 | if (!filePart) { |
183 | if ( param != NULL ) { | 185 | if ( param != NULL ) { |
184 | mailmime_parameter_free( param ); | 186 | mailmime_parameter_free( param ); |
185 | } | 187 | } |
186 | if (content) { | 188 | if (content) { |
187 | mailmime_content_free( content ); | 189 | mailmime_content_free( content ); |
188 | } | 190 | } |
189 | if (fields) { | 191 | if (fields) { |
190 | mailmime_fields_free( fields ); | 192 | mailmime_fields_free( fields ); |
191 | } else { | 193 | } else { |
192 | if (name) { | 194 | if (name) { |
193 | free( name ); | 195 | free( name ); |
194 | } | 196 | } |
195 | if (file) { | 197 | if (file) { |
196 | free( file ); | 198 | free( file ); |
197 | } | 199 | } |
@@ -206,71 +208,73 @@ void Generatemail::addFileParts( mailmime *message,const QList<Attachment>&files | |||
206 | unsigned int count = files.count(); | 208 | unsigned int count = files.count(); |
207 | for ( unsigned int i = 0; i < count; ++i ) { | 209 | for ( unsigned int i = 0; i < count; ++i ) { |
208 | mailmime *filePart; | 210 | mailmime *filePart; |
209 | int err; | 211 | int err; |
210 | it = ((QList<Attachment>)files).at(i); | 212 | it = ((QList<Attachment>)files).at(i); |
211 | 213 | ||
212 | filePart = buildFilePart( it->getFileName(), it->getMimeType(),"" ); | 214 | filePart = buildFilePart( it->getFileName(), it->getMimeType(),"" ); |
213 | if ( filePart == NULL ) { | 215 | if ( filePart == NULL ) { |
214 | continue; | 216 | continue; |
215 | } | 217 | } |
216 | err = mailmime_smart_add_part( message, filePart ); | 218 | err = mailmime_smart_add_part( message, filePart ); |
217 | if ( err != MAILIMF_NO_ERROR ) { | 219 | if ( err != MAILIMF_NO_ERROR ) { |
218 | mailmime_free( filePart ); | 220 | mailmime_free( filePart ); |
219 | } | 221 | } |
220 | } | 222 | } |
221 | } | 223 | } |
222 | 224 | ||
223 | mailmime *Generatemail::buildTxtPart(const QString&str ) { | 225 | mailmime *Generatemail::buildTxtPart(const QString&str ) { |
224 | mailmime *txtPart; | 226 | mailmime *txtPart; |
225 | mailmime_fields *fields; | 227 | mailmime_fields *fields; |
226 | mailmime_content *content; | 228 | mailmime_content *content; |
227 | mailmime_parameter *param; | 229 | mailmime_parameter *param; |
228 | int err; | 230 | int err; |
229 | QCString __str; | 231 | QCString __str; |
232 | //qDebug(" Generatemail::buildTxtPart %s", str.latin1()); | ||
230 | param = mailmime_parameter_new( strdup( "charset" ), | 233 | param = mailmime_parameter_new( strdup( "charset" ), |
231 | strdup( "iso-8859-1" ) ); | 234 | strdup( mCharset.latin1() ) ); |
232 | if ( param == NULL ) | 235 | if ( param == NULL ) |
233 | goto err_free; | 236 | goto err_free; |
234 | 237 | ||
235 | content = mailmime_content_new_with_str( "text/plain" ); | 238 | content = mailmime_content_new_with_str( "text/plain" ); |
236 | if ( content == NULL ) | 239 | if ( content == NULL ) |
237 | goto err_free_param; | 240 | goto err_free_param; |
238 | 241 | ||
239 | err = clist_append( content->ct_parameters, param ); | 242 | err = clist_append( content->ct_parameters, param ); |
240 | if ( err != MAILIMF_NO_ERROR ) | 243 | if ( err != MAILIMF_NO_ERROR ) |
241 | goto err_free_content; | 244 | goto err_free_content; |
242 | 245 | ||
243 | fields = mailmime_fields_new_encoding(MAILMIME_MECHANISM_8BIT); | 246 | fields = mailmime_fields_new_encoding(MAILMIME_MECHANISM_8BIT); |
244 | if ( fields == NULL ) | 247 | if ( fields == NULL ) |
245 | goto err_free_content; | 248 | goto err_free_content; |
246 | 249 | ||
247 | txtPart = mailmime_new_empty( content, fields ); | 250 | txtPart = mailmime_new_empty( content, fields ); |
248 | if ( txtPart == NULL ) | 251 | if ( txtPart == NULL ) |
249 | goto err_free_fields; | 252 | goto err_free_fields; |
250 | { | 253 | { |
251 | __str = str.utf8(); | 254 | //__str = str.utf8(); |
252 | err = mailmime_set_body_text( txtPart, __str.data(), __str.length() ); | 255 | __str = QCString (str.latin1()); |
256 | err = mailmime_set_body_text( txtPart, strdup(__str.data()), __str.length() ); | ||
253 | } | 257 | } |
254 | if ( err != MAILIMF_NO_ERROR ) | 258 | if ( err != MAILIMF_NO_ERROR ) |
255 | goto err_free_txtPart; | 259 | goto err_free_txtPart; |
256 | 260 | ||
257 | return txtPart; // Success :) | 261 | return txtPart; // Success :) |
258 | 262 | ||
259 | err_free_txtPart: | 263 | err_free_txtPart: |
260 | mailmime_free( txtPart ); | 264 | mailmime_free( txtPart ); |
261 | err_free_fields: | 265 | err_free_fields: |
262 | mailmime_fields_free( fields ); | 266 | mailmime_fields_free( fields ); |
263 | err_free_content: | 267 | err_free_content: |
264 | mailmime_content_free( content ); | 268 | mailmime_content_free( content ); |
265 | err_free_param: | 269 | err_free_param: |
266 | mailmime_parameter_free( param ); | 270 | mailmime_parameter_free( param ); |
267 | err_free: | 271 | err_free: |
268 | ; | 272 | ; |
269 | 273 | ||
270 | return NULL; // Error :( | 274 | return NULL; // Error :( |
271 | } | 275 | } |
272 | 276 | ||
273 | mailimf_mailbox *Generatemail::newMailbox(const QString&name, const QString&mail ) { | 277 | mailimf_mailbox *Generatemail::newMailbox(const QString&name, const QString&mail ) { |
274 | return mailimf_mailbox_new( strdup( name.latin1() ), | 278 | return mailimf_mailbox_new( strdup( name.latin1() ), |
275 | strdup( mail.latin1() ) ); | 279 | strdup( mail.latin1() ) ); |
276 | } | 280 | } |
@@ -377,48 +381,50 @@ mailimf_fields *Generatemail::createImfFields(const Opie::Core::OSmartPointer<Ma | |||
377 | mailimf_address_list_free( cc ); | 381 | mailimf_address_list_free( cc ); |
378 | if (to) | 382 | if (to) |
379 | mailimf_address_list_free( to ); | 383 | mailimf_address_list_free( to ); |
380 | if (fromBox) { | 384 | if (fromBox) { |
381 | mailimf_mailbox_free( fromBox ); | 385 | mailimf_mailbox_free( fromBox ); |
382 | } else if (from) { | 386 | } else if (from) { |
383 | mailimf_mailbox_list_free( from ); | 387 | mailimf_mailbox_list_free( from ); |
384 | } | 388 | } |
385 | if (sender) { | 389 | if (sender) { |
386 | mailimf_mailbox_free( sender ); | 390 | mailimf_mailbox_free( sender ); |
387 | } | 391 | } |
388 | if (subject) { | 392 | if (subject) { |
389 | free( subject ); | 393 | free( subject ); |
390 | } | 394 | } |
391 | } | 395 | } |
392 | } | 396 | } |
393 | return fields; | 397 | return fields; |
394 | } | 398 | } |
395 | 399 | ||
396 | mailmime *Generatemail::createMimeMail(const Opie::Core::OSmartPointer<Mail> &mail ) { | 400 | mailmime *Generatemail::createMimeMail(const Opie::Core::OSmartPointer<Mail> &mail ) { |
397 | mailmime *message, *txtPart; | 401 | mailmime *message, *txtPart; |
398 | mailimf_fields *fields; | 402 | mailimf_fields *fields; |
399 | int err; | 403 | int err; |
400 | 404 | ||
405 | //LR disabled for now | ||
406 | //mCharset = mail->getCharset().lower(); | ||
401 | fields = createImfFields( mail ); | 407 | fields = createImfFields( mail ); |
402 | if ( fields == NULL ) | 408 | if ( fields == NULL ) |
403 | goto err_free; | 409 | goto err_free; |
404 | 410 | ||
405 | message = mailmime_new_message_data( NULL ); | 411 | message = mailmime_new_message_data( NULL ); |
406 | if ( message == NULL ) | 412 | if ( message == NULL ) |
407 | goto err_free_fields; | 413 | goto err_free_fields; |
408 | 414 | ||
409 | mailmime_set_imf_fields( message, fields ); | 415 | mailmime_set_imf_fields( message, fields ); |
410 | 416 | ||
411 | txtPart = buildTxtPart( mail->getMessage() ); | 417 | txtPart = buildTxtPart( mail->getMessage() ); |
412 | 418 | ||
413 | if ( txtPart == NULL ) | 419 | if ( txtPart == NULL ) |
414 | goto err_free_message; | 420 | goto err_free_message; |
415 | 421 | ||
416 | err = mailmime_smart_add_part( message, txtPart ); | 422 | err = mailmime_smart_add_part( message, txtPart ); |
417 | if ( err != MAILIMF_NO_ERROR ) | 423 | if ( err != MAILIMF_NO_ERROR ) |
418 | goto err_free_txtPart; | 424 | goto err_free_txtPart; |
419 | 425 | ||
420 | addFileParts( message, mail->getAttachments() ); | 426 | addFileParts( message, mail->getAttachments() ); |
421 | 427 | ||
422 | return message; // Success :) | 428 | return message; // Success :) |
423 | 429 | ||
424 | err_free_txtPart: | 430 | err_free_txtPart: |