summaryrefslogtreecommitdiffabout
path: root/kmicromail
Unidiff
Diffstat (limited to 'kmicromail') (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
@@ -1,357 +1,363 @@
1 1
2#include "composemail.h" 2#include "composemail.h"
3 3
4#include <libmailwrapper/smtpwrapper.h> 4#include <libmailwrapper/smtpwrapper.h>
5#include <libmailwrapper/storemail.h> 5#include <libmailwrapper/storemail.h>
6#include <libmailwrapper/abstractmail.h> 6#include <libmailwrapper/abstractmail.h>
7#include <libmailwrapper/mailtypes.h> 7#include <libmailwrapper/mailtypes.h>
8 8
9/* OPIE */ 9/* OPIE */
10//#include <opie2/ofiledialog.h> 10//#include <opie2/ofiledialog.h>
11//#include <opie2/odebug.h> 11//#include <opie2/odebug.h>
12#include <kfiledialog.h> 12#include <kfiledialog.h>
13//#include <qpe/resource.h> 13//#include <qpe/resource.h>
14#include <qpe/config.h> 14#include <qpe/config.h>
15#include <qpe/global.h> 15#include <qpe/global.h>
16//#include <qpe/contact.h> 16//#include <qpe/contact.h>
17 17
18 18
19#include <qcombobox.h> 19#include <qcombobox.h>
20#include <qcheckbox.h> 20#include <qcheckbox.h>
21#include <qtimer.h> 21#include <qtimer.h>
22#include <qmessagebox.h> 22#include <qmessagebox.h>
23#include <qpushbutton.h> 23#include <qpushbutton.h>
24#include <qmultilineedit.h> 24#include <qmultilineedit.h>
25#include <qlabel.h> 25#include <qlabel.h>
26#include <qtabwidget.h> 26#include <qtabwidget.h>
27#include <qlistview.h> 27#include <qlistview.h>
28#include <kabc/addresseedialog.h> 28#include <kabc/addresseedialog.h>
29#include <kabc/stdaddressbook.h> 29#include <kabc/stdaddressbook.h>
30#include <kabc/addressee.h> 30#include <kabc/addressee.h>
31 31
32 32
33 33
34//using namespace Opie::Core; 34//using namespace Opie::Core;
35//using namespace Opie::Ui; 35//using namespace Opie::Ui;
36ComposeMail::ComposeMail( Settings *s, QWidget *parent, const char *name, bool modal, WFlags flags ) 36ComposeMail::ComposeMail( Settings *s, QWidget *parent, const char *name, bool modal, WFlags flags )
37 : ComposeMailUI( parent, name, modal, flags ) 37 : ComposeMailUI( parent, name, modal, flags )
38{ 38{
39 39
40 settings = s; 40 settings = s;
41 m_replyid = ""; 41 m_replyid = "";
42 KABC::Addressee con = KABC::StdAddressBook::self()->whoAmI( ); 42 KABC::Addressee con = KABC::StdAddressBook::self()->whoAmI( );
43 QStringList mails = con.emails(); 43 QStringList mails = con.emails();
44 QString defmail = con.preferredEmail(); 44 QString defmail = con.preferredEmail();
45 if ( mails.count() == 0) 45 if ( mails.count() == 0)
46 QMessageBox::information( parentWidget(), tr( "Hint" ), 46 QMessageBox::information( parentWidget(), tr( "Hint" ),
47 tr( "Please apply\n\"Set Who Am I\"\nin KA/Pi to get the from\nfield automatically filled out!" ), 47 tr( "Please apply\n\"Set Who Am I\"\nin KA/Pi to get the from\nfield automatically filled out!" ),
48 tr( "Ok" ) ); 48 tr( "Ok" ) );
49 if (defmail.length()!=0) { 49 if (defmail.length()!=0) {
50 fromBox->insertItem(defmail); 50 fromBox->insertItem(defmail);
51 } 51 }
52 QStringList::ConstIterator sit = mails.begin(); 52 QStringList::ConstIterator sit = mails.begin();
53 for (;sit!=mails.end();++sit) { 53 for (;sit!=mails.end();++sit) {
54 if ( (*sit)==defmail) 54 if ( (*sit)==defmail)
55 continue; 55 continue;
56 fromBox->insertItem((*sit)); 56 fromBox->insertItem((*sit));
57 } 57 }
58 senderNameEdit->setText(con.formattedName()); 58 senderNameEdit->setText(con.formattedName());
59 Config cfg( "mail" ); 59 Config cfg( "mail" );
60 cfg.setGroup( "Compose" ); 60 cfg.setGroup( "Compose" );
61 checkBoxLater->setChecked( cfg.readBoolEntry( "sendLater", false ) ); 61 checkBoxLater->setChecked( cfg.readBoolEntry( "sendLater", false ) );
62 62
63 attList->addColumn( tr( "Name" ) ); 63 attList->addColumn( tr( "Name" ) );
64 attList->addColumn( tr( "Size" ) ); 64 attList->addColumn( tr( "Size" ) );
65 65
66 QList<Account> accounts = settings->getAccounts(); 66 QList<Account> accounts = settings->getAccounts();
67 67
68 Account *it; 68 Account *it;
69 for ( it = accounts.first(); it; it = accounts.next() ) { 69 for ( it = accounts.first(); it; it = accounts.next() ) {
70 if ( it->getType()==MAILLIB::A_SMTP ) { 70 if ( it->getType()==MAILLIB::A_SMTP ) {
71 SMTPaccount *smtp = static_cast<SMTPaccount *>(it); 71 SMTPaccount *smtp = static_cast<SMTPaccount *>(it);
72 smtpAccountBox->insertItem( smtp->getAccountName() ); 72 smtpAccountBox->insertItem( smtp->getAccountName() );
73 smtpAccounts.append( smtp ); 73 smtpAccounts.append( smtp );
74 } 74 }
75 } 75 }
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{
188 pickAddress( toLine ); 188 pickAddress( toLine );
189} 189}
190 190
191void ComposeMail::pickAddressCC() 191void ComposeMail::pickAddressCC()
192{ 192{
193 pickAddress( ccLine ); 193 pickAddress( ccLine );
194} 194}
195 195
196void ComposeMail::pickAddressBCC() 196void ComposeMail::pickAddressBCC()
197{ 197{
198 pickAddress( bccLine ); 198 pickAddress( bccLine );
199} 199}
200 200
201void ComposeMail::pickAddressReply() 201void ComposeMail::pickAddressReply()
202{ 202{
203 pickAddress( replyLine ); 203 pickAddress( replyLine );
204} 204}
205 205
206void ComposeMail::fillValues( int ) 206void ComposeMail::fillValues( int )
207{ 207{
208#if 0 208#if 0
209 SMTPaccount *smtp = smtpAccounts.at( current ); 209 SMTPaccount *smtp = smtpAccounts.at( current );
210 ccLine->clear(); 210 ccLine->clear();
211 if ( smtp->getUseCC() ) { 211 if ( smtp->getUseCC() ) {
212 ccLine->setText( smtp->getCC() ); 212 ccLine->setText( smtp->getCC() );
213 } 213 }
214 bccLine->clear(); 214 bccLine->clear();
215 if ( smtp->getUseBCC() ) { 215 if ( smtp->getUseBCC() ) {
216 bccLine->setText( smtp->getBCC() ); 216 bccLine->setText( smtp->getBCC() );
217 } 217 }
218 replyLine->clear(); 218 replyLine->clear();
219 if ( smtp->getUseReply() ) { 219 if ( smtp->getUseReply() ) {
220 replyLine->setText( smtp->getReply() ); 220 replyLine->setText( smtp->getReply() );
221 } 221 }
222 sigMultiLine->setText( smtp->getSignature() ); 222 sigMultiLine->setText( smtp->getSignature() );
223#endif 223#endif
224} 224}
225 225
226void ComposeMail::slotAdjustColumns() 226void ComposeMail::slotAdjustColumns()
227{ 227{
228 int currPage = tabWidget->currentPageIndex(); 228 int currPage = tabWidget->currentPageIndex();
229 229
230 tabWidget->showPage( attachTab ); 230 tabWidget->showPage( attachTab );
231 attList->setColumnWidth( 0, attList->visibleWidth() - 80 ); 231 attList->setColumnWidth( 0, attList->visibleWidth() - 80 );
232 attList->setColumnWidth( 1, 80 ); 232 attList->setColumnWidth( 1, 80 );
233 233
234 tabWidget->setCurrentPage( currPage ); 234 tabWidget->setCurrentPage( currPage );
235} 235}
236 236
237void ComposeMail::addAttachment() 237void ComposeMail::addAttachment()
238{ 238{
239 QString lnk = KFileDialog::getOpenFileName( "", "Add Attachment", this ); 239 QString lnk = KFileDialog::getOpenFileName( "", "Add Attachment", this );
240 if ( !lnk.isEmpty() ) { 240 if ( !lnk.isEmpty() ) {
241 Attachment *att = new Attachment( lnk ); 241 Attachment *att = new Attachment( lnk );
242 (void) new AttachViewItem( attList, att ); 242 (void) new AttachViewItem( attList, att );
243 } 243 }
244} 244}
245 245
246void ComposeMail::removeAttachment() 246void ComposeMail::removeAttachment()
247{ 247{
248 if ( !attList->currentItem() ) { 248 if ( !attList->currentItem() ) {
249 QMessageBox::information( this, tr( "Error" ), 249 QMessageBox::information( this, tr( "Error" ),
250 tr( "<p>Please select a File.</p>" ), 250 tr( "<p>Please select a File.</p>" ),
251 tr( "Ok" ) ); 251 tr( "Ok" ) );
252 } else { 252 } else {
253 attList->takeItem( attList->currentItem() ); 253 attList->takeItem( attList->currentItem() );
254 } 254 }
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
@@ -1,458 +1,461 @@
1#include "smtpwrapper.h" 1#include "smtpwrapper.h"
2#include "mailwrapper.h" 2#include "mailwrapper.h"
3#include "abstractmail.h" 3#include "abstractmail.h"
4#include "logindialog.h" 4#include "logindialog.h"
5#include "mailtypes.h" 5#include "mailtypes.h"
6#include "sendmailprogress.h" 6#include "sendmailprogress.h"
7 7
8//#include <opie2/odebug.h> 8//#include <opie2/odebug.h>
9//#include <qt.h> 9//#include <qt.h>
10#include <qapplication.h> 10#include <qapplication.h>
11#include <qmessagebox.h> 11#include <qmessagebox.h>
12#include <stdlib.h> 12#include <stdlib.h>
13#include <qpe/config.h> 13#include <qpe/config.h>
14#include <qpe/qcopenvelope_qws.h> 14#include <qpe/qcopenvelope_qws.h>
15 15
16#include <libetpan/libetpan.h> 16#include <libetpan/libetpan.h>
17 17
18 18
19using namespace Opie::Core; 19using namespace Opie::Core;
20progressMailSend*SMTPwrapper::sendProgress = 0; 20progressMailSend*SMTPwrapper::sendProgress = 0;
21 21
22SMTPwrapper::SMTPwrapper(SMTPaccount * aSmtp ) 22SMTPwrapper::SMTPwrapper(SMTPaccount * aSmtp )
23 : Generatemail() 23 : Generatemail()
24{ 24{
25 m_SmtpAccount = aSmtp; 25 m_SmtpAccount = aSmtp;
26 Config cfg( "mail" ); 26 Config cfg( "mail" );
27 cfg.setGroup( "Status" ); 27 cfg.setGroup( "Status" );
28 m_queuedMail = cfg.readNumEntry( "outgoing", 0 ); 28 m_queuedMail = cfg.readNumEntry( "outgoing", 0 );
29 emit queuedMails( m_queuedMail ); 29 emit queuedMails( m_queuedMail );
30 connect( this, SIGNAL( queuedMails(int) ), this, SLOT( emitQCop(int) ) ); 30 connect( this, SIGNAL( queuedMails(int) ), this, SLOT( emitQCop(int) ) );
31 m_smtp = 0; 31 m_smtp = 0;
32} 32}
33 33
34SMTPwrapper::~SMTPwrapper() 34SMTPwrapper::~SMTPwrapper()
35{ 35{
36 disc_server(); 36 disc_server();
37} 37}
38 38
39void SMTPwrapper::emitQCop( int queued ) { 39void SMTPwrapper::emitQCop( int queued ) {
40 QCopEnvelope env( "QPE/Pim", "outgoingMails(int)" ); 40 QCopEnvelope env( "QPE/Pim", "outgoingMails(int)" );
41 env << queued; 41 env << queued;
42} 42}
43 43
44QString SMTPwrapper::mailsmtpError( int errnum ) { 44QString SMTPwrapper::mailsmtpError( int errnum ) {
45 switch ( errnum ) { 45 switch ( errnum ) {
46 case MAILSMTP_NO_ERROR: 46 case MAILSMTP_NO_ERROR:
47 return tr( "No error" ); 47 return tr( "No error" );
48 case MAILSMTP_ERROR_UNEXPECTED_CODE: 48 case MAILSMTP_ERROR_UNEXPECTED_CODE:
49 return tr( "Unexpected error code" ); 49 return tr( "Unexpected error code" );
50 case MAILSMTP_ERROR_SERVICE_NOT_AVAILABLE: 50 case MAILSMTP_ERROR_SERVICE_NOT_AVAILABLE:
51 return tr( "Service not available" ); 51 return tr( "Service not available" );
52 case MAILSMTP_ERROR_STREAM: 52 case MAILSMTP_ERROR_STREAM:
53 return tr( "Stream error" ); 53 return tr( "Stream error" );
54 case MAILSMTP_ERROR_HOSTNAME: 54 case MAILSMTP_ERROR_HOSTNAME:
55 return tr( "gethostname() failed" ); 55 return tr( "gethostname() failed" );
56 case MAILSMTP_ERROR_NOT_IMPLEMENTED: 56 case MAILSMTP_ERROR_NOT_IMPLEMENTED:
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) {
194 return; 195 return;
195 } 196 }
196 server = m_SmtpAccount->getServer().latin1(); 197 server = m_SmtpAccount->getServer().latin1();
197 if ( m_SmtpAccount->ConnectionType() == 2 ) { 198 if ( m_SmtpAccount->ConnectionType() == 2 ) {
198 ssl = true; 199 ssl = true;
199 try_tls = false; 200 try_tls = false;
200 } else if (m_SmtpAccount->ConnectionType() == 1) { 201 } else if (m_SmtpAccount->ConnectionType() == 1) {
201 force_tls = true; 202 force_tls = true;
202 } 203 }
203 int result = 1; 204 int result = 1;
204 port = m_SmtpAccount->getPort().toUInt(); 205 port = m_SmtpAccount->getPort().toUInt();
205 206
206 m_smtp = mailsmtp_new( 20, &progress ); 207 m_smtp = mailsmtp_new( 20, &progress );
207 if ( m_smtp == NULL ) { 208 if ( m_smtp == NULL ) {
208 /* no failure message cause this happens when problems with memory - than we 209 /* no failure message cause this happens when problems with memory - than we
209 we can not display any messagebox */ 210 we can not display any messagebox */
210 return; 211 return;
211 } 212 }
212 213
213 int err = MAILSMTP_NO_ERROR; 214 int err = MAILSMTP_NO_ERROR;
214 ; // odebug << "Servername " << server << " at port " << port << "" << oendl; 215 ; // odebug << "Servername " << server << " at port " << port << "" << oendl;
215 if ( ssl ) { 216 if ( ssl ) {
216 ; // odebug << "SSL session" << oendl; 217 ; // odebug << "SSL session" << oendl;
217 err = mailsmtp_ssl_connect( m_smtp, server, port ); 218 err = mailsmtp_ssl_connect( m_smtp, server, port );
218 } else { 219 } else {
219 ; // odebug << "No SSL session" << oendl; 220 ; // odebug << "No SSL session" << oendl;
220 err = mailsmtp_socket_connect( m_smtp, server, port ); 221 err = mailsmtp_socket_connect( m_smtp, server, port );
221 } 222 }
222 if ( err != MAILSMTP_NO_ERROR ) { 223 if ( err != MAILSMTP_NO_ERROR ) {
223 ; // odebug << "Error init connection" << oendl; 224 ; // odebug << "Error init connection" << oendl;
224 failuretext = tr("Error init SMTP connection: %1").arg(mailsmtpError(err)); 225 failuretext = tr("Error init SMTP connection: %1").arg(mailsmtpError(err));
225 result = 0; 226 result = 0;
226 } 227 }
227 228
228 /* switch to tls after init 'cause there it will send the ehlo */ 229 /* switch to tls after init 'cause there it will send the ehlo */
229 if (result) { 230 if (result) {
230 err = mailsmtp_init( m_smtp ); 231 err = mailsmtp_init( m_smtp );
231 if (err != MAILSMTP_NO_ERROR) { 232 if (err != MAILSMTP_NO_ERROR) {
232 result = 0; 233 result = 0;
233 failuretext = tr("Error init SMTP connection: %1").arg(mailsmtpError(err)); 234 failuretext = tr("Error init SMTP connection: %1").arg(mailsmtpError(err));
234 } 235 }
235 } 236 }
236 237
237 if (try_tls) { 238 if (try_tls) {
238 err = start_smtp_tls(); 239 err = start_smtp_tls();
239 if (err != MAILSMTP_NO_ERROR) { 240 if (err != MAILSMTP_NO_ERROR) {
240 try_tls = false; 241 try_tls = false;
241 } else { 242 } else {
242 err = mailesmtp_ehlo(m_smtp); 243 err = mailesmtp_ehlo(m_smtp);
243 } 244 }
244 } 245 }
245 246
246 if (!try_tls && force_tls) { 247 if (!try_tls && force_tls) {
247 result = 0; 248 result = 0;
248 failuretext = tr("Error init SMTP tls: %1").arg(mailsmtpError(err)); 249 failuretext = tr("Error init SMTP tls: %1").arg(mailsmtpError(err));
249 } 250 }
250 251
251 if (result==1 && m_SmtpAccount->getLogin() ) { 252 if (result==1 && m_SmtpAccount->getLogin() ) {
252 ; // odebug << "smtp with auth" << oendl; 253 ; // odebug << "smtp with auth" << oendl;
253 if ( m_SmtpAccount->getUser().isEmpty() || m_SmtpAccount->getPassword().isEmpty() ) { 254 if ( m_SmtpAccount->getUser().isEmpty() || m_SmtpAccount->getPassword().isEmpty() ) {
254 // get'em 255 // get'em
255 LoginDialog login( m_SmtpAccount->getUser(), 256 LoginDialog login( m_SmtpAccount->getUser(),
256 m_SmtpAccount->getPassword(), NULL, 0, true ); 257 m_SmtpAccount->getPassword(), NULL, 0, true );
257 login.show(); 258 login.show();
258 if ( QDialog::Accepted == login.exec() ) { 259 if ( QDialog::Accepted == login.exec() ) {
259 // ok 260 // ok
260 user = login.getUser().latin1(); 261 user = login.getUser().latin1();
261 pass = login.getPassword().latin1(); 262 pass = login.getPassword().latin1();
262 } else { 263 } else {
263 result = 0; 264 result = 0;
264 failuretext=tr("Login aborted - storing mail to localfolder"); 265 failuretext=tr("Login aborted - storing mail to localfolder");
265 } 266 }
266 } else { 267 } else {
267 user = m_SmtpAccount->getUser().latin1(); 268 user = m_SmtpAccount->getUser().latin1();
268 pass = m_SmtpAccount->getPassword().latin1(); 269 pass = m_SmtpAccount->getPassword().latin1();
269 } 270 }
270 ; // odebug << "session->auth: " << m_smtp->auth << "" << oendl; 271 ; // odebug << "session->auth: " << m_smtp->auth << "" << oendl;
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;
385 if (!m_SmtpAccount) { 388 if (!m_SmtpAccount) {
386 ; // odebug << "No smtp account given" << oendl; 389 ; // odebug << "No smtp account given" << oendl;
387 return false; 390 return false;
388 } 391 }
389 392
390 bool reset_user_value = false; 393 bool reset_user_value = false;
391 QString localfolders = AbstractMail::defaultLocalfolder(); 394 QString localfolders = AbstractMail::defaultLocalfolder();
392 AbstractMail*wrap = AbstractMail::getWrapper(localfolders); 395 AbstractMail*wrap = AbstractMail::getWrapper(localfolders);
393 if (!wrap) { 396 if (!wrap) {
394 ; // odebug << "memory error" << oendl; 397 ; // odebug << "memory error" << oendl;
395 return false; 398 return false;
396 } 399 }
397 QString oldPw, oldUser; 400 QString oldPw, oldUser;
398 QValueList<RecMailP> mailsToSend; 401 QValueList<RecMailP> mailsToSend;
399 QValueList<RecMailP> mailsToRemove; 402 QValueList<RecMailP> mailsToRemove;
400 QString mbox("Outgoing"); 403 QString mbox("Outgoing");
401 wrap->listMessages(mbox,mailsToSend); 404 wrap->listMessages(mbox,mailsToSend);
402 if (mailsToSend.count()==0) { 405 if (mailsToSend.count()==0) {
403 delete wrap; 406 delete wrap;
404 ; // odebug << "No mails to send" << oendl; 407 ; // odebug << "No mails to send" << oendl;
405 return false; 408 return false;
406 } 409 }
407 410
408 oldPw = m_SmtpAccount->getPassword(); 411 oldPw = m_SmtpAccount->getPassword();
409 oldUser = m_SmtpAccount->getUser(); 412 oldUser = m_SmtpAccount->getUser();
410 if (m_SmtpAccount->getLogin() && (m_SmtpAccount->getUser().isEmpty() || m_SmtpAccount->getPassword().isEmpty()) ) { 413 if (m_SmtpAccount->getLogin() && (m_SmtpAccount->getUser().isEmpty() || m_SmtpAccount->getPassword().isEmpty()) ) {
411 // get'em 414 // get'em
412 QString user,pass; 415 QString user,pass;
413 LoginDialog login( m_SmtpAccount->getUser(), m_SmtpAccount->getPassword(), NULL, 0, true ); 416 LoginDialog login( m_SmtpAccount->getUser(), m_SmtpAccount->getPassword(), NULL, 0, true );
414 login.show(); 417 login.show();
415 if ( QDialog::Accepted == login.exec() ) { 418 if ( QDialog::Accepted == login.exec() ) {
416 // ok 419 // ok
417 user = login.getUser().latin1(); 420 user = login.getUser().latin1();
418 pass = login.getPassword().latin1(); 421 pass = login.getPassword().latin1();
419 reset_user_value = true; 422 reset_user_value = true;
420 m_SmtpAccount->setUser(user); 423 m_SmtpAccount->setUser(user);
421 m_SmtpAccount->setPassword(pass); 424 m_SmtpAccount->setPassword(pass);
422 } else { 425 } else {
423 return true; 426 return true;
424 } 427 }
425 } 428 }
426 429
427 430
428 sendProgress = new progressMailSend(); 431 sendProgress = new progressMailSend();
429 sendProgress->show(); 432 sendProgress->show();
430 sendProgress->setMaxMails(mailsToSend.count()); 433 sendProgress->setMaxMails(mailsToSend.count());
431 434
432 while (mailsToSend.count()>0) { 435 while (mailsToSend.count()>0) {
433 if (sendQueuedMail(wrap, (*mailsToSend.begin()))==0) { 436 if (sendQueuedMail(wrap, (*mailsToSend.begin()))==0) {
434 QMessageBox::critical(0,tr("Error sending mail"), 437 QMessageBox::critical(0,tr("Error sending mail"),
435 tr("Error sending queued mail - breaking")); 438 tr("Error sending queued mail - breaking"));
436 returnValue = false; 439 returnValue = false;
437 break; 440 break;
438 } 441 }
439 mailsToRemove.append((*mailsToSend.begin())); 442 mailsToRemove.append((*mailsToSend.begin()));
440 mailsToSend.remove(mailsToSend.begin()); 443 mailsToSend.remove(mailsToSend.begin());
441 sendProgress->setCurrentMails(mailsToRemove.count()); 444 sendProgress->setCurrentMails(mailsToRemove.count());
442 } 445 }
443 if (reset_user_value) { 446 if (reset_user_value) {
444 m_SmtpAccount->setUser(oldUser); 447 m_SmtpAccount->setUser(oldUser);
445 m_SmtpAccount->setPassword(oldPw); 448 m_SmtpAccount->setPassword(oldPw);
446 } 449 }
447 Config cfg( "mail" ); 450 Config cfg( "mail" );
448 cfg.setGroup( "Status" ); 451 cfg.setGroup( "Status" );
449 m_queuedMail = 0; 452 m_queuedMail = 0;
450 cfg.writeEntry( "outgoing", m_queuedMail ); 453 cfg.writeEntry( "outgoing", m_queuedMail );
451 emit queuedMails( m_queuedMail ); 454 emit queuedMails( m_queuedMail );
452 sendProgress->hide(); 455 sendProgress->hide();
453 delete sendProgress; 456 delete sendProgress;
454 sendProgress = 0; 457 sendProgress = 0;
455 wrap->deleteMails(mbox,mailsToRemove); 458 wrap->deleteMails(mbox,mailsToRemove);
456 delete wrap; 459 delete wrap;
457 return returnValue; 460 return returnValue;
458} 461}
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