summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2004-07-03 19:26:15 (UTC)
committer zautrix <zautrix>2004-07-03 19:26:15 (UTC)
commitcc67ce39cdd7730caee878da3b191d76cad9479f (patch) (unidiff)
treea19e8297fdf060845e1a81b58afe5272a58c3b61
parent55413f404aa7a59bfbf38f9f91fabb595eca57ad (diff)
downloadkdepimpi-cc67ce39cdd7730caee878da3b191d76cad9479f.zip
kdepimpi-cc67ce39cdd7730caee878da3b191d76cad9479f.tar.gz
kdepimpi-cc67ce39cdd7730caee878da3b191d76cad9479f.tar.bz2
better error handling
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--kmicromail/composemail.cpp14
-rw-r--r--kmicromail/libmailwrapper/smtpwrapper.cpp23
-rw-r--r--kmicromail/libmailwrapper/smtpwrapper.h4
3 files changed, 25 insertions, 16 deletions
diff --git a/kmicromail/composemail.cpp b/kmicromail/composemail.cpp
index 2c2e279..ca4f247 100644
--- a/kmicromail/composemail.cpp
+++ b/kmicromail/composemail.cpp
@@ -76,112 +76,112 @@ ComposeMail::ComposeMail( Settings *s, QWidget *parent, const char *name, bool m
76 if ( smtpAccounts.count() > 0 ) { 76 if ( smtpAccounts.count() > 0 ) {
77 fillValues( smtpAccountBox->currentItem() ); 77 fillValues( smtpAccountBox->currentItem() );
78 } else { 78 } else {
79 QMessageBox::information( parentWidget(), tr( "Problem" ), 79 QMessageBox::information( parentWidget(), tr( "Problem" ),
80 tr( "Please create an SMTP account first.\nThe SMTP is needed for sending mail." ), 80 tr( "Please create an SMTP account first.\nThe SMTP is needed for sending mail." ),
81 tr( "Ok" ) ); 81 tr( "Ok" ) );
82 return; 82 return;
83 } 83 }
84 connect( smtpAccountBox, SIGNAL( activated(int) ), SLOT( fillValues(int) ) ); 84 connect( smtpAccountBox, SIGNAL( activated(int) ), SLOT( fillValues(int) ) );
85 connect( toButton, SIGNAL( clicked() ), SLOT( pickAddressTo() ) ); 85 connect( toButton, SIGNAL( clicked() ), SLOT( pickAddressTo() ) );
86 connect( ccButton, SIGNAL( clicked() ), SLOT( pickAddressCC() ) ); 86 connect( ccButton, SIGNAL( clicked() ), SLOT( pickAddressCC() ) );
87 connect( bccButton, SIGNAL( clicked() ), SLOT( pickAddressBCC() ) ); 87 connect( bccButton, SIGNAL( clicked() ), SLOT( pickAddressBCC() ) );
88 connect( replyButton, SIGNAL( clicked() ), SLOT( pickAddressReply() ) ); 88 connect( replyButton, SIGNAL( clicked() ), SLOT( pickAddressReply() ) );
89 connect( addButton, SIGNAL( clicked() ), SLOT( addAttachment() ) ); 89 connect( addButton, SIGNAL( clicked() ), SLOT( addAttachment() ) );
90 connect( deleteButton, SIGNAL( clicked() ), SLOT( removeAttachment() ) ); 90 connect( deleteButton, SIGNAL( clicked() ), SLOT( removeAttachment() ) );
91 connect( SaveButton, SIGNAL( clicked() ), SLOT( saveAsDraft()) ); 91 connect( SaveButton, SIGNAL( clicked() ), SLOT( saveAsDraft()) );
92 mMail = 0; 92 mMail = 0;
93 warnAttach = true; 93 warnAttach = true;
94} 94}
95void ComposeMail::saveAsDraft() 95void ComposeMail::saveAsDraft()
96{ 96{
97 97
98 Opie::Core::OSmartPointer<Mail> mail= new Mail(); 98 Opie::Core::OSmartPointer<Mail> mail= new Mail();
99 mail->setMail(fromBox->currentText()); 99 mail->setMail(fromBox->currentText());
100 mail->setTo( toLine->text() ); 100 mail->setTo( toLine->text() );
101 mail->setName(senderNameEdit->text()); 101 mail->setName(senderNameEdit->text());
102 mail->setCC( ccLine->text() ); 102 mail->setCC( ccLine->text() );
103 mail->setBCC( bccLine->text() ); 103 mail->setBCC( bccLine->text() );
104 mail->setReply( replyLine->text() ); 104 mail->setReply( replyLine->text() );
105 mail->setSubject( subjectLine->text() ); 105 mail->setSubject( subjectLine->text() );
106 if (!m_replyid.isEmpty()) { 106 if (!m_replyid.isEmpty()) {
107 QStringList ids; 107 QStringList ids;
108 ids.append(m_replyid); 108 ids.append(m_replyid);
109 mail->setInreply(ids); 109 mail->setInreply(ids);
110 } 110 }
111 QString txt = message->text(); 111 QString txt = message->text();
112 if ( !sigMultiLine->text().isEmpty() ) { 112 if ( !sigMultiLine->text().isEmpty() ) {
113 txt.append( "\n--\n" ); 113 txt.append( "\n--\n" );
114 txt.append( sigMultiLine->text() ); 114 txt.append( sigMultiLine->text() );
115 } 115 }
116 mail->setMessage( txt ); 116 mail->setMessage( txt );
117 117
118 /* only use the default drafts folder name! */ 118 /* only use the default drafts folder name! */
119 Storemail wrapper(AbstractMail::draftFolder()); 119 Storemail wrapper(AbstractMail::draftFolder());
120 wrapper.storeMail(mail); 120 wrapper.storeMail(mail);
121 121
122 AttachViewItem *it = (AttachViewItem *) attList->firstChild(); 122 AttachViewItem *it = (AttachViewItem *) attList->firstChild();
123 /* attachments we will ignore! */ 123 /* attachments we will ignore! */
124 if ( it != NULL ) { 124 if ( it != 0 ) {
125 if ( warnAttach ) 125 if ( warnAttach )
126 QMessageBox::warning(0,tr("Store message"), 126 QMessageBox::warning(0,tr("Store message"),
127 tr("<center>Attachments will not be stored in \"Draft\" folder</center>")); 127 tr("<center>Attachments will not be stored in \"Draft\" folder</center>"));
128 warnAttach = false; 128 warnAttach = false;
129 } 129 }
130 setStatus( tr("Mail saved as draft!") ); 130 setStatus( tr("Mail saved as draft!") );
131} 131}
132void ComposeMail::clearStatus() 132void ComposeMail::clearStatus()
133{ 133{
134 topLevelWidget()->setCaption( tr("Compose mail") ); 134 topLevelWidget()->setCaption( tr("Compose mail") );
135} 135}
136void ComposeMail::setStatus( QString status ) 136void ComposeMail::setStatus( QString status )
137{ 137{
138 topLevelWidget()->setCaption( status ); 138 topLevelWidget()->setCaption( status );
139 QTimer::singleShot ( 5000, this, SLOT( clearStatus() ) ) ; 139 QTimer::singleShot ( 10000, this, SLOT( clearStatus() ) ) ;
140} 140}
141void ComposeMail::pickAddress( QLineEdit *line ) 141void ComposeMail::pickAddress( QLineEdit *line )
142{ 142{
143 //qDebug(" ComposeMail::pickAddress "); 143 //qDebug(" ComposeMail::pickAddress ");
144 QString names ;//= AddressPicker::getNames(); 144 QString names ;//= AddressPicker::getNames();
145 145
146 KABC::Addressee::List list = KABC::AddresseeDialog::getAddressees(this); 146 KABC::Addressee::List list = KABC::AddresseeDialog::getAddressees(this);
147 uint i=0; 147 uint i=0;
148 for (i=0; i < list.count(); i++) { 148 for (i=0; i < list.count(); i++) {
149 if ( !list[i].preferredEmail().isEmpty()) { 149 if ( !list[i].preferredEmail().isEmpty()) {
150 names+= "\""+list[i].realName() +"\"<" +list[i].preferredEmail() +">"; 150 names+= "\""+list[i].realName() +"\"<" +list[i].preferredEmail() +">";
151 if ( i < list.count() -1 ) 151 if ( i < list.count() -1 )
152 names+= ","; 152 names+= ",";
153 } 153 }
154 } 154 }
155 155
156 156
157 if ( line->text().isEmpty() ) { 157 if ( line->text().isEmpty() ) {
158 line->setText( names ); 158 line->setText( names );
159 } else if ( !names.isEmpty() ) { 159 } else if ( !names.isEmpty() ) {
160 line->setText( line->text() + ", " + names ); 160 line->setText( line->text() + ", " + names );
161 } 161 }
162} 162}
163 163
164 164
165void ComposeMail::setTo( const QString & to ) 165void ComposeMail::setTo( const QString & to )
166{ 166{
167 toLine->setText( to ); 167 toLine->setText( to );
168} 168}
169 169
170void ComposeMail::setSubject( const QString & subject ) 170void ComposeMail::setSubject( const QString & subject )
171{ 171{
172 subjectLine->setText( subject ); 172 subjectLine->setText( subject );
173} 173}
174 174
175void ComposeMail::setInReplyTo( const QString & messageId ) 175void ComposeMail::setInReplyTo( const QString & messageId )
176{ 176{
177 m_replyid = messageId; 177 m_replyid = messageId;
178} 178}
179 179
180void ComposeMail::setMessage( const QString & text ) 180void ComposeMail::setMessage( const QString & text )
181{ 181{
182 message->setText( text ); 182 message->setText( text );
183} 183}
184 184
185 185
186void ComposeMail::pickAddressTo() 186void ComposeMail::pickAddressTo()
187{ 187{
@@ -255,103 +255,109 @@ void ComposeMail::removeAttachment()
255} 255}
256 256
257void ComposeMail::accept() 257void ComposeMail::accept()
258{ 258{
259 if (! checkBoxLater->isChecked() ) { 259 if (! checkBoxLater->isChecked() ) {
260 int yesno = QMessageBox::warning(0,tr("Stop editing message"), 260 int yesno = QMessageBox::warning(0,tr("Stop editing message"),
261 tr("Send this message?"), 261 tr("Send this message?"),
262 tr("Yes"), 262 tr("Yes"),
263 tr("Cancel")); 263 tr("Cancel"));
264 264
265 if (yesno == 1) { 265 if (yesno == 1) {
266 return; 266 return;
267 } 267 }
268 } 268 }
269#if 0 269#if 0
270 odebug << "Sending Mail with " 270 odebug << "Sending Mail with "
271 << smtpAccounts.at( smtpAccountBox->currentItem() )->getAccountName() << oendl; 271 << smtpAccounts.at( smtpAccountBox->currentItem() )->getAccountName() << oendl;
272#endif 272#endif
273 Opie::Core::OSmartPointer<Mail> mail=new Mail; 273 Opie::Core::OSmartPointer<Mail> mail=new Mail;
274 274
275 SMTPaccount *smtp = smtpAccounts.at( smtpAccountBox->currentItem() ); 275 SMTPaccount *smtp = smtpAccounts.at( smtpAccountBox->currentItem() );
276 mail->setMail(fromBox->currentText()); 276 mail->setMail(fromBox->currentText());
277 277
278 if ( !toLine->text().isEmpty() ) { 278 if ( !toLine->text().isEmpty() ) {
279 mail->setTo( toLine->text() ); 279 mail->setTo( toLine->text() );
280 } else { 280 } else {
281 QMessageBox::warning(0,tr("Sending mail"), 281 QMessageBox::warning(0,tr("Sending mail"),
282 tr("No Receiver spezified" ) ); 282 tr("No Receiver spezified" ) );
283 return; 283 return;
284 } 284 }
285 285
286 mail->setName(senderNameEdit->text()); 286 mail->setName(senderNameEdit->text());
287 mail->setCC( ccLine->text() ); 287 mail->setCC( ccLine->text() );
288 mail->setBCC( bccLine->text() ); 288 mail->setBCC( bccLine->text() );
289 mail->setReply( replyLine->text() ); 289 mail->setReply( replyLine->text() );
290 mail->setSubject( subjectLine->text() ); 290 mail->setSubject( subjectLine->text() );
291 if (!m_replyid.isEmpty()) { 291 if (!m_replyid.isEmpty()) {
292 QStringList ids; 292 QStringList ids;
293 ids.append(m_replyid); 293 ids.append(m_replyid);
294 mail->setInreply(ids); 294 mail->setInreply(ids);
295 } 295 }
296 QString txt = message->text(); 296 QString txt = message->text();
297 if ( !sigMultiLine->text().isEmpty() ) { 297 if ( !sigMultiLine->text().isEmpty() ) {
298 txt.append( "\n--\n" ); 298 txt.append( "\n--\n" );
299 txt.append( sigMultiLine->text() ); 299 txt.append( sigMultiLine->text() );
300 } 300 }
301 mail->setMessage( txt ); 301 mail->setMessage( txt );
302 AttachViewItem *it = (AttachViewItem *) attList->firstChild(); 302 AttachViewItem *it = (AttachViewItem *) attList->firstChild();
303 while ( it != NULL ) { 303 while ( it != 0 ) {
304 mail->addAttachment( it->getAttachment() ); 304 mail->addAttachment( it->getAttachment() );
305 it = (AttachViewItem *) it->nextSibling(); 305 it = (AttachViewItem *) it->nextSibling();
306 } 306 }
307 307
308 SMTPwrapper wrapper( smtp ); 308 SMTPwrapper wrapper( smtp );
309 wrapper.sendMail( mail,checkBoxLater->isChecked() ); 309 if ( wrapper.sendMail( mail,checkBoxLater->isChecked() ) )
310 setStatus( tr ("Mail sent"));
311 else {
312 setStatus( tr ("Error: Something went wrong. Nothing sent"));
313 return;
314 }
315
310 316
311 QDialog::accept(); 317 QDialog::accept();
312} 318}
313 319
314void ComposeMail::reject() 320void ComposeMail::reject()
315{ 321{
316 //qDebug("ComposeMail::reject() "); 322 //qDebug("ComposeMail::reject() ");
317 int yesno = QMessageBox::warning(0,tr("Stop editing message"), 323 int yesno = QMessageBox::warning(0,tr("Stop editing message"),
318 tr("Store message into drafts?"), 324 tr("Store message into drafts?"),
319 tr("Yes"), 325 tr("Yes"),
320 tr("No")); 326 tr("No"));
321 327
322 //qDebug("button %d ", yesno); 328 //qDebug("button %d ", yesno);
323 if (yesno == 0) { 329 if (yesno == 0) {
324 saveAsDraft(); 330 saveAsDraft();
325 } 331 }
326 if (yesno == 2) { 332 if (yesno == 2) {
327 qDebug("return "); 333 qDebug("return ");
328 return; 334 return;
329 } 335 }
330 QDialog::reject(); 336 QDialog::reject();
331} 337}
332 338
333ComposeMail::~ComposeMail() 339ComposeMail::~ComposeMail()
334{ 340{
335} 341}
336 342
337void ComposeMail::reEditMail(const RecMailP&current) 343void ComposeMail::reEditMail(const RecMailP&current)
338{ 344{
339 RecMailP data = current; 345 RecMailP data = current;
340 message->setText(data->Wrapper()->fetchBody(current)->Bodytext()); 346 message->setText(data->Wrapper()->fetchBody(current)->Bodytext());
341 subjectLine->setText( data->getSubject()); 347 subjectLine->setText( data->getSubject());
342 toLine->setText(data->To().join(",")); 348 toLine->setText(data->To().join(","));
343 ccLine->setText(data->CC().join(",")); 349 ccLine->setText(data->CC().join(","));
344 bccLine->setText(data->Bcc().join(",")); 350 bccLine->setText(data->Bcc().join(","));
345 replyLine->setText(data->Replyto()); 351 replyLine->setText(data->Replyto());
346} 352}
347 353
348AttachViewItem::AttachViewItem( QListView *parent, Attachment *att ) 354AttachViewItem::AttachViewItem( QListView *parent, Attachment *att )
349 : QListViewItem( parent ) 355 : QListViewItem( parent )
350{ 356{
351 attachment = att; 357 attachment = att;
352 if ( !attachment->getPixmap().isNull() ) 358 if ( !attachment->getPixmap().isNull() )
353 setPixmap( 0,attachment->getPixmap() ); 359 setPixmap( 0,attachment->getPixmap() );
354 setText( 0, att->getName().isEmpty() ? att->getFileName() : att->getName() ); 360 setText( 0, att->getName().isEmpty() ? att->getFileName() : att->getName() );
355 setText( 1, QString::number( att->getSize() ) ); 361 setText( 1, QString::number( att->getSize() ) );
356} 362}
357 363
diff --git a/kmicromail/libmailwrapper/smtpwrapper.cpp b/kmicromail/libmailwrapper/smtpwrapper.cpp
index 04a21ea..6a1b505 100644
--- a/kmicromail/libmailwrapper/smtpwrapper.cpp
+++ b/kmicromail/libmailwrapper/smtpwrapper.cpp
@@ -57,137 +57,138 @@ QString SMTPwrapper::mailsmtpError( int errnum ) {
57 return tr( "Not implemented" ); 57 return tr( "Not implemented" );
58 case MAILSMTP_ERROR_ACTION_NOT_TAKEN: 58 case MAILSMTP_ERROR_ACTION_NOT_TAKEN:
59 return tr( "Error, action not taken" ); 59 return tr( "Error, action not taken" );
60 case MAILSMTP_ERROR_EXCEED_STORAGE_ALLOCATION: 60 case MAILSMTP_ERROR_EXCEED_STORAGE_ALLOCATION:
61 return tr( "Data exceeds storage allocation" ); 61 return tr( "Data exceeds storage allocation" );
62 case MAILSMTP_ERROR_IN_PROCESSING: 62 case MAILSMTP_ERROR_IN_PROCESSING:
63 return tr( "Error in processing" ); 63 return tr( "Error in processing" );
64 case MAILSMTP_ERROR_STARTTLS_NOT_SUPPORTED: 64 case MAILSMTP_ERROR_STARTTLS_NOT_SUPPORTED:
65 return tr( "Starttls not supported" ); 65 return tr( "Starttls not supported" );
66 // case MAILSMTP_ERROR_INSUFFISANT_SYSTEM_STORAGE: 66 // case MAILSMTP_ERROR_INSUFFISANT_SYSTEM_STORAGE:
67 // return tr( "Insufficient system storage" ); 67 // return tr( "Insufficient system storage" );
68 case MAILSMTP_ERROR_MAILBOX_UNAVAILABLE: 68 case MAILSMTP_ERROR_MAILBOX_UNAVAILABLE:
69 return tr( "Mailbox unavailable" ); 69 return tr( "Mailbox unavailable" );
70 case MAILSMTP_ERROR_MAILBOX_NAME_NOT_ALLOWED: 70 case MAILSMTP_ERROR_MAILBOX_NAME_NOT_ALLOWED:
71 return tr( "Mailbox name not allowed" ); 71 return tr( "Mailbox name not allowed" );
72 case MAILSMTP_ERROR_BAD_SEQUENCE_OF_COMMAND: 72 case MAILSMTP_ERROR_BAD_SEQUENCE_OF_COMMAND:
73 return tr( "Bad command sequence" ); 73 return tr( "Bad command sequence" );
74 case MAILSMTP_ERROR_USER_NOT_LOCAL: 74 case MAILSMTP_ERROR_USER_NOT_LOCAL:
75 return tr( "User not local" ); 75 return tr( "User not local" );
76 case MAILSMTP_ERROR_TRANSACTION_FAILED: 76 case MAILSMTP_ERROR_TRANSACTION_FAILED:
77 return tr( "Transaction failed" ); 77 return tr( "Transaction failed" );
78 case MAILSMTP_ERROR_MEMORY: 78 case MAILSMTP_ERROR_MEMORY:
79 return tr( "Memory error" ); 79 return tr( "Memory error" );
80 case MAILSMTP_ERROR_CONNECTION_REFUSED: 80 case MAILSMTP_ERROR_CONNECTION_REFUSED:
81 return tr( "Connection refused" ); 81 return tr( "Connection refused" );
82 default: 82 default:
83 return tr( "Unknown error code" ); 83 return tr( "Unknown error code" );
84 } 84 }
85} 85}
86 86
87 87
88void SMTPwrapper::progress( size_t current, size_t maximum ) { 88void SMTPwrapper::progress( size_t current, size_t maximum ) {
89 if (SMTPwrapper::sendProgress) { 89 if (SMTPwrapper::sendProgress) {
90 SMTPwrapper::sendProgress->setSingleMail(current, maximum ); 90 SMTPwrapper::sendProgress->setSingleMail(current, maximum );
91 qApp->processEvents(); 91 qApp->processEvents();
92 } 92 }
93} 93}
94 94
95void SMTPwrapper::storeMail(const char*mail, size_t length, const QString&box) { 95void SMTPwrapper::storeMail(const char*mail, size_t length, const QString&box) {
96 if (!mail) 96 if (!mail)
97 return; 97 return;
98 QString localfolders = AbstractMail::defaultLocalfolder(); 98 QString localfolders = AbstractMail::defaultLocalfolder();
99 AbstractMail*wrap = AbstractMail::getWrapper(localfolders); 99 AbstractMail*wrap = AbstractMail::getWrapper(localfolders);
100 wrap->createMbox(box); 100 wrap->createMbox(box);
101 wrap->storeMessage(mail,length,box); 101 wrap->storeMessage(mail,length,box);
102 delete wrap; 102 delete wrap;
103} 103}
104 104
105void SMTPwrapper::smtpSend( mailmime *mail,bool later) { 105bool SMTPwrapper::smtpSend( mailmime *mail,bool later) {
106 clist *rcpts = 0; 106 clist *rcpts = 0;
107 char *from, *data; 107 char *from, *data;
108 size_t size; 108 size_t size;
109 109
110 from = data = 0; 110 from = data = 0;
111 111
112 mailmessage * msg = 0; 112 mailmessage * msg = 0;
113 msg = mime_message_init(mail); 113 msg = mime_message_init(mail);
114 mime_message_set_tmpdir(msg,getenv( "HOME" )); 114 mime_message_set_tmpdir(msg,getenv( "HOME" ));
115 int r = mailmessage_fetch(msg,&data,&size); 115 int r = mailmessage_fetch(msg,&data,&size);
116 mime_message_detach_mime(msg); 116 mime_message_detach_mime(msg);
117 mailmessage_free(msg); 117 mailmessage_free(msg);
118 if (r != MAIL_NO_ERROR || !data) { 118 if (r != MAIL_NO_ERROR || !data) {
119 if (data) 119 if (data)
120 free(data); 120 free(data);
121 ; // odebug << "Error fetching mime..." << oendl; 121 qDebug("Error fetching mime... ");
122 return; 122 return false;
123 } 123 }
124 msg = 0; 124 msg = 0;
125 if (later) { 125 if (later) {
126 storeMail(data,size,"Outgoing"); 126 storeMail(data,size,"Outgoing");
127 if (data) 127 if (data)
128 free( data ); 128 free( data );
129 Config cfg( "mail" ); 129 Config cfg( "mail" );
130 cfg.setGroup( "Status" ); 130 cfg.setGroup( "Status" );
131 cfg.writeEntry( "outgoing", ++m_queuedMail ); 131 cfg.writeEntry( "outgoing", ++m_queuedMail );
132 emit queuedMails( m_queuedMail ); 132 emit queuedMails( m_queuedMail );
133 return; 133 return true;
134 } 134 }
135 from = getFrom( mail ); 135 from = getFrom( mail );
136 rcpts = createRcptList( mail->mm_data.mm_message.mm_fields ); 136 rcpts = createRcptList( mail->mm_data.mm_message.mm_fields );
137 smtpSend(from,rcpts,data,size); 137 bool result = smtpSend(from,rcpts,data,size);
138 if (data) { 138 if (data) {
139 free(data); 139 free(data);
140 } 140 }
141 if (from) { 141 if (from) {
142 free(from); 142 free(from);
143 } 143 }
144 if (rcpts) 144 if (rcpts)
145 smtp_address_list_free( rcpts ); 145 smtp_address_list_free( rcpts );
146 return result;
146} 147}
147 148
148void SMTPwrapper::storeFailedMail(const char*data,unsigned int size, const char*failuremessage) 149void SMTPwrapper::storeFailedMail(const char*data,unsigned int size, const char*failuremessage)
149{ 150{
150 if (data) { 151 if (data) {
151 storeMail(data,size,"Sendfailed"); 152 storeMail(data,size,"Sendfailed");
152 } 153 }
153 if (failuremessage) { 154 if (failuremessage) {
154 QMessageBox::critical(0,tr("Error sending mail"), 155 QMessageBox::critical(0,tr("Error sending mail"),
155 tr("<center>%1</center>").arg(failuremessage)); 156 tr("<center>%1</center>").arg(failuremessage));
156 } 157 }
157} 158}
158 159
159int SMTPwrapper::start_smtp_tls() 160int SMTPwrapper::start_smtp_tls()
160{ 161{
161 if (!m_smtp) { 162 if (!m_smtp) {
162 return MAILSMTP_ERROR_IN_PROCESSING; 163 return MAILSMTP_ERROR_IN_PROCESSING;
163 } 164 }
164 int err = mailesmtp_starttls(m_smtp); 165 int err = mailesmtp_starttls(m_smtp);
165 if (err != MAILSMTP_NO_ERROR) return err; 166 if (err != MAILSMTP_NO_ERROR) return err;
166 mailstream_low * low; 167 mailstream_low * low;
167 mailstream_low * new_low; 168 mailstream_low * new_low;
168 low = mailstream_get_low(m_smtp->stream); 169 low = mailstream_get_low(m_smtp->stream);
169 if (!low) { 170 if (!low) {
170 return MAILSMTP_ERROR_IN_PROCESSING; 171 return MAILSMTP_ERROR_IN_PROCESSING;
171 } 172 }
172 int fd = mailstream_low_get_fd(low); 173 int fd = mailstream_low_get_fd(low);
173 if (fd > -1 && (new_low = mailstream_low_ssl_open(fd))!=0) { 174 if (fd > -1 && (new_low = mailstream_low_ssl_open(fd))!=0) {
174 mailstream_low_free(low); 175 mailstream_low_free(low);
175 mailstream_set_low(m_smtp->stream, new_low); 176 mailstream_set_low(m_smtp->stream, new_low);
176 } else { 177 } else {
177 return MAILSMTP_ERROR_IN_PROCESSING; 178 return MAILSMTP_ERROR_IN_PROCESSING;
178 } 179 }
179 return err; 180 return err;
180} 181}
181 182
182void SMTPwrapper::connect_server() 183void SMTPwrapper::connect_server()
183{ 184{
184 const char *server, *user, *pass; 185 const char *server, *user, *pass;
185 bool ssl; 186 bool ssl;
186 uint16_t port; 187 uint16_t port;
187 ssl = false; 188 ssl = false;
188 bool try_tls = true; 189 bool try_tls = true;
189 bool force_tls=false; 190 bool force_tls=false;
190 server = user = pass = 0; 191 server = user = pass = 0;
191 QString failuretext = ""; 192 QString failuretext = "";
192 193
193 if (m_smtp || !m_SmtpAccount) { 194 if (m_smtp || !m_SmtpAccount) {
@@ -271,114 +272,116 @@ void SMTPwrapper::connect_server()
271 if (result) { 272 if (result) {
272 err = mailsmtp_auth( m_smtp, (char*)user, (char*)pass ); 273 err = mailsmtp_auth( m_smtp, (char*)user, (char*)pass );
273 if ( err == MAILSMTP_NO_ERROR ) { 274 if ( err == MAILSMTP_NO_ERROR ) {
274 ; // odebug << "auth ok" << oendl; 275 ; // odebug << "auth ok" << oendl;
275 } else { 276 } else {
276 failuretext = tr("Authentification failed"); 277 failuretext = tr("Authentification failed");
277 result = 0; 278 result = 0;
278 } 279 }
279 } 280 }
280 } 281 }
281} 282}
282 283
283void SMTPwrapper::disc_server() 284void SMTPwrapper::disc_server()
284{ 285{
285 if (m_smtp) { 286 if (m_smtp) {
286 mailsmtp_quit( m_smtp ); 287 mailsmtp_quit( m_smtp );
287 mailsmtp_free( m_smtp ); 288 mailsmtp_free( m_smtp );
288 m_smtp = 0; 289 m_smtp = 0;
289 } 290 }
290} 291}
291 292
292int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size ) 293int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size )
293{ 294{
294 int err,result; 295 int err,result;
295 QString failuretext = ""; 296 QString failuretext = "";
296 297
297 connect_server(); 298 connect_server();
298 299
299 result = 1; 300 result = 1;
300 if (m_smtp) { 301 if (m_smtp) {
301 err = mailsmtp_send( m_smtp, from, rcpts, data, size ); 302 err = mailsmtp_send( m_smtp, from, rcpts, data, size );
302 if ( err != MAILSMTP_NO_ERROR ) { 303 if ( err != MAILSMTP_NO_ERROR ) {
303 failuretext=tr("Error sending mail: %1").arg(mailsmtpError(err)); 304 failuretext=tr("Error sending mail: %1").arg(mailsmtpError(err));
304 result = 0; 305 result = 0;
305 } 306 }
306 } else { 307 } else {
307 result = 0; 308 result = 0;
308 } 309 }
309 310
310 if (!result) { 311 if (!result) {
311 storeFailedMail(data,size,failuretext); 312 storeFailedMail(data,size,failuretext);
312 } else { 313 } else {
313 ; // odebug << "Mail sent." << oendl; 314 ; // odebug << "Mail sent." << oendl;
314 storeMail(data,size,"Sent"); 315 storeMail(data,size,"Sent");
315 } 316 }
316 return result; 317 return result;
317} 318}
318 319
319void SMTPwrapper::sendMail(const Opie::Core::OSmartPointer<Mail>&mail,bool later ) 320bool SMTPwrapper::sendMail(const Opie::Core::OSmartPointer<Mail>&mail,bool later )
320{ 321{
321 mailmime * mimeMail; 322 mailmime * mimeMail;
322 323 bool result = true;
323 mimeMail = createMimeMail(mail ); 324 mimeMail = createMimeMail(mail );
324 if ( mimeMail == NULL ) { 325 if ( mimeMail == 0 ) {
325 ; // odebug << "sendMail: error creating mime mail" << oendl; 326 qDebug("SMTP wrapper:Error creating mail! ");
327 return false;
326 } else { 328 } else {
327 sendProgress = new progressMailSend(); 329 sendProgress = new progressMailSend();
328 sendProgress->show(); 330 sendProgress->show();
329 sendProgress->setMaxMails(1); 331 sendProgress->setMaxMails(1);
330 smtpSend( mimeMail,later); 332 result = smtpSend( mimeMail,later);
331 ; // odebug << "Clean up done" << oendl; 333 ; // odebug << "Clean up done" << oendl;
332 sendProgress->hide(); 334 sendProgress->hide();
333 delete sendProgress; 335 delete sendProgress;
334 sendProgress = 0; 336 sendProgress = 0;
335 mailmime_free( mimeMail ); 337 mailmime_free( mimeMail );
336 } 338 }
339 return result;
337} 340}
338 341
339int SMTPwrapper::sendQueuedMail(AbstractMail*wrap,const RecMailP&which) { 342int SMTPwrapper::sendQueuedMail(AbstractMail*wrap,const RecMailP&which) {
340 size_t curTok = 0; 343 size_t curTok = 0;
341 mailimf_fields *fields = 0; 344 mailimf_fields *fields = 0;
342 mailimf_field*ffrom = 0; 345 mailimf_field*ffrom = 0;
343 clist *rcpts = 0; 346 clist *rcpts = 0;
344 char*from = 0; 347 char*from = 0;
345 int res = 0; 348 int res = 0;
346 349
347 encodedString * data = wrap->fetchRawBody(which); 350 encodedString * data = wrap->fetchRawBody(which);
348 if (!data) 351 if (!data)
349 return 0; 352 return 0;
350 int err = mailimf_fields_parse( data->Content(), data->Length(), &curTok, &fields ); 353 int err = mailimf_fields_parse( data->Content(), data->Length(), &curTok, &fields );
351 if (err != MAILIMF_NO_ERROR) { 354 if (err != MAILIMF_NO_ERROR) {
352 delete data; 355 delete data;
353 delete wrap; 356 delete wrap;
354 return 0; 357 return 0;
355 } 358 }
356 359
357 rcpts = createRcptList( fields ); 360 rcpts = createRcptList( fields );
358 ffrom = getField(fields, MAILIMF_FIELD_FROM ); 361 ffrom = getField(fields, MAILIMF_FIELD_FROM );
359 from = getFrom(ffrom); 362 from = getFrom(ffrom);
360 363
361 if (rcpts && from) { 364 if (rcpts && from) {
362 res = smtpSend(from,rcpts,data->Content(),data->Length()); 365 res = smtpSend(from,rcpts,data->Content(),data->Length());
363 } 366 }
364 if (fields) { 367 if (fields) {
365 mailimf_fields_free(fields); 368 mailimf_fields_free(fields);
366 fields = 0; 369 fields = 0;
367 } 370 }
368 if (data) { 371 if (data) {
369 delete data; 372 delete data;
370 } 373 }
371 if (from) { 374 if (from) {
372 free(from); 375 free(from);
373 } 376 }
374 if (rcpts) { 377 if (rcpts) {
375 smtp_address_list_free( rcpts ); 378 smtp_address_list_free( rcpts );
376 } 379 }
377 return res; 380 return res;
378} 381}
379 382
380/* this is a special fun */ 383/* this is a special fun */
381bool SMTPwrapper::flushOutbox() { 384bool SMTPwrapper::flushOutbox() {
382 bool returnValue = true; 385 bool returnValue = true;
383 386
384 ; // odebug << "Sending the queue" << oendl; 387 ; // odebug << "Sending the queue" << oendl;
diff --git a/kmicromail/libmailwrapper/smtpwrapper.h b/kmicromail/libmailwrapper/smtpwrapper.h
index 6c5bbe8..105cbf5 100644
--- a/kmicromail/libmailwrapper/smtpwrapper.h
+++ b/kmicromail/libmailwrapper/smtpwrapper.h
@@ -1,63 +1,63 @@
1// -*- Mode: C++; -*- 1// -*- Mode: C++; -*-
2#ifndef SMTPwrapper_H 2#ifndef SMTPwrapper_H
3#define SMTPwrapper_H 3#define SMTPwrapper_H
4 4
5#include <qpe/applnk.h> 5#include <qpe/applnk.h>
6 6
7#include <qbitarray.h> 7#include <qbitarray.h>
8#include <qdatetime.h> 8#include <qdatetime.h>
9#include <libetpan/clist.h> 9#include <libetpan/clist.h>
10 10
11#include "settings.h" 11#include "settings.h"
12#include "generatemail.h" 12#include "generatemail.h"
13 13
14#include <opie2/osmartpointer.h> 14#include <opie2/osmartpointer.h>
15 15
16class SMTPaccount; 16class SMTPaccount;
17class AbstractMail; 17class AbstractMail;
18 18
19class SMTPwrapper : public Generatemail 19class SMTPwrapper : public Generatemail
20{ 20{
21 Q_OBJECT 21 Q_OBJECT
22 22
23public: 23public:
24 SMTPwrapper(SMTPaccount * aSmtp); 24 SMTPwrapper(SMTPaccount * aSmtp);
25 virtual ~SMTPwrapper(); 25 virtual ~SMTPwrapper();
26 void sendMail(const Opie::Core::OSmartPointer<Mail>& mail,bool later=false ); 26 bool sendMail(const Opie::Core::OSmartPointer<Mail>& mail,bool later=false );
27 bool flushOutbox(); 27 bool flushOutbox();
28 28
29 static progressMailSend*sendProgress; 29 static progressMailSend*sendProgress;
30 30
31signals: 31signals:
32 void queuedMails( int ); 32 void queuedMails( int );
33 33
34protected: 34protected:
35 mailsmtp *m_smtp; 35 mailsmtp *m_smtp;
36 SMTPaccount * m_SmtpAccount; 36 SMTPaccount * m_SmtpAccount;
37 37
38 void connect_server(); 38 void connect_server();
39 void disc_server(); 39 void disc_server();
40 int start_smtp_tls(); 40 int start_smtp_tls();
41 41
42 42
43 void smtpSend( mailmime *mail,bool later); 43 bool smtpSend( mailmime *mail,bool later);
44 44
45 static void storeMail(const char*mail, size_t length, const QString&box); 45 static void storeMail(const char*mail, size_t length, const QString&box);
46 static QString mailsmtpError( int err ); 46 static QString mailsmtpError( int err );
47 static void progress( size_t current, size_t maximum ); 47 static void progress( size_t current, size_t maximum );
48 48
49 int smtpSend(char*from,clist*rcpts,const char*data,size_t size); 49 int smtpSend(char*from,clist*rcpts,const char*data,size_t size);
50 50
51 void storeMail(mailmime*mail, const QString&box); 51 void storeMail(mailmime*mail, const QString&box);
52 52
53 int sendQueuedMail(AbstractMail*wrap,const Opie::Core::OSmartPointer<RecMail>&which); 53 int sendQueuedMail(AbstractMail*wrap,const Opie::Core::OSmartPointer<RecMail>&which);
54 void storeFailedMail(const char*data,unsigned int size, const char*failuremessage); 54 void storeFailedMail(const char*data,unsigned int size, const char*failuremessage);
55 55
56 int m_queuedMail; 56 int m_queuedMail;
57 57
58protected slots: 58protected slots:
59 void emitQCop( int queued ); 59 void emitQCop( int queued );
60 60
61}; 61};
62 62
63#endif 63#endif