30 #include <tdefiledialog.h> 31 #include <klineedit.h> 32 #include <tdelistbox.h> 33 #include <tdelocale.h> 35 #include <tqcheckbox.h> 40 #include <tqpushbutton.h> 43 #include "kmacctlocal.h" 45 #include "popaccount.h" 46 #include "kmacctimap.h" 47 #include "kmacctcachedimap.h" 48 #include "kmacctmaildir.h" 49 #include "accountmanager.h" 52 #include "globalsettings.h" 53 #include "kmservertest.h" 54 #include "kmtransport.h" 55 #include "libkpimidentities/identity.h" 56 #include "libkpimidentities/identitymanager.h" 57 #include "protocols.h" 59 #include "accountwizard.h" 79 class AccountTypeBox :
public TDEListBox
82 enum Type { Local, POP3, IMAP, dIMAP, Maildir };
84 AccountTypeBox( TQWidget *parent )
85 : TDEListBox( parent,
"AccountTypeBox" )
87 mTypeList << i18n(
"Local mailbox" );
88 mTypeList << i18n(
"POP3" );
89 mTypeList << i18n(
"IMAP" );
90 mTypeList << i18n(
"Disconnected IMAP" );
91 mTypeList << i18n(
"Maildir mailbox" );
93 insertStringList( mTypeList );
96 void setType( Type type )
98 setCurrentItem( (
int)type );
103 return (Type)currentItem();
107 TQStringList mTypeList;
110 AccountWizard::AccountWizard(
KMKernel *kernel, TQWidget *parent )
111 : KWizard( parent,
"KWizard" ), mKernel( kernel ),
112 mAccount( 0 ), mTransportInfo( 0 ), mServerTest( 0 )
115 setupAccountTypePage();
116 setupAccountInformationPage();
117 setupLoginInformationPage();
118 setupServerInformationPage();
121 void AccountWizard::start(
KMKernel *kernel, TQWidget *parent )
123 TDEConfigGroup wizardConfig( KMKernel::config(),
"AccountWizard" );
125 if ( wizardConfig.readBoolEntry(
"ShowOnStartup",
true ) ) {
126 AccountWizard wizard( kernel, parent );
127 int result = wizard.exec();
128 if ( result == TQDialog::Accepted ) {
129 wizardConfig.writeEntry(
"ShowOnStartup",
false );
130 kernel->slotConfigChanged();
135 void AccountWizard::showPage( TQWidget *page )
137 if ( page == mWelcomePage ) {
139 }
else if ( page == mAccountTypePage ) {
140 if ( mTypeBox->currentItem() == -1 )
141 mTypeBox->setType( AccountTypeBox::POP3 );
142 }
else if ( page == mAccountInformationPage ) {
143 if ( mRealName->text().isEmpty() && mEMailAddress->text().isEmpty() &&
144 mOrganization->text().isEmpty() ) {
145 KPIM::IdentityManager *manager = mKernel->identityManager();
146 const KPIM::Identity &identity = manager->defaultIdentity();
148 mRealName->setText( identity.fullName() );
149 mEMailAddress->setText( identity.primaryEmailAddress() );
150 mOrganization->setText( identity.organization() );
152 }
else if ( page == mLoginInformationPage ) {
153 if ( mLoginName->text().isEmpty() ) {
155 TQString email = mEMailAddress->text();
156 int pos = email.find(
'@' );
158 mLoginName->setText( email.left( pos ) );
162 }
else if ( page == mServerInformationPage ) {
163 if ( mTypeBox->type() == AccountTypeBox::Local ||
164 mTypeBox->type() == AccountTypeBox::Maildir ) {
165 mIncomingServerWdg->hide();
166 mIncomingLocationWdg->show();
167 mIncomingLabel->setText( i18n(
"Location:" ) );
169 if ( mTypeBox->type() == AccountTypeBox::Local )
170 mIncomingLocation->setText( TQDir::homeDirPath() +
"/inbox" );
172 mIncomingLocation->setText( TQDir::homeDirPath() +
"/Mail/" );
174 mIncomingLocationWdg->hide();
175 mIncomingServerWdg->show();
176 mIncomingLabel->setText( i18n(
"Incoming server:" ) );
179 setFinishEnabled( mServerInformationPage,
true );
182 TQWizard::showPage( page );
185 void AccountWizard::setupWelcomePage()
187 mWelcomePage =
new TQVBox(
this );
188 ((TQVBox*)mWelcomePage)->setSpacing( KDialog::spacingHint() );
190 TQLabel *label =
new TQLabel( i18n(
"Welcome to KMail" ), mWelcomePage );
191 TQFont font = label->font();
192 font.setBold(
true );
193 label->setFont( font );
195 new TQLabel( i18n(
"<qt>It seems you have started KMail for the first time. " 196 "You can use this wizard to setup your mail accounts. Just " 197 "enter the connection data that you received from your email provider " 198 "into the following pages.</qt>" ), mWelcomePage );
200 addPage( mWelcomePage, i18n(
"Welcome" ) );
203 void AccountWizard::setupAccountTypePage()
205 mAccountTypePage =
new TQVBox(
this );
206 ((TQVBox*)mAccountTypePage)->setSpacing( KDialog::spacingHint() );
208 new TQLabel( i18n(
"Select what kind of account you would like to create" ), mAccountTypePage );
210 mTypeBox =
new AccountTypeBox( mAccountTypePage );
212 addPage( mAccountTypePage, i18n(
"Account Type" ) );
215 void AccountWizard::setupAccountInformationPage()
217 mAccountInformationPage =
new TQWidget(
this );
218 TQGridLayout *layout =
new TQGridLayout( mAccountInformationPage, 3, 2,
219 KDialog::marginHint(), KDialog::spacingHint() );
221 TQLabel *label =
new TQLabel( i18n(
"Real name:" ), mAccountInformationPage );
222 mRealName =
new KLineEdit( mAccountInformationPage );
223 label->setBuddy( mRealName );
225 layout->addWidget( label, 0, 0 );
226 layout->addWidget( mRealName, 0, 1 );
228 label =
new TQLabel( i18n(
"E-mail address:" ), mAccountInformationPage );
229 mEMailAddress =
new KLineEdit( mAccountInformationPage );
230 label->setBuddy( mEMailAddress );
232 layout->addWidget( label, 1, 0 );
233 layout->addWidget( mEMailAddress, 1, 1 );
235 label =
new TQLabel( i18n(
"Organization:" ), mAccountInformationPage );
236 mOrganization =
new KLineEdit( mAccountInformationPage );
237 label->setBuddy( mOrganization );
239 layout->addWidget( label, 2, 0 );
240 layout->addWidget( mOrganization, 2, 1 );
242 addPage( mAccountInformationPage, i18n(
"Account Information" ) );
245 void AccountWizard::setupLoginInformationPage()
247 mLoginInformationPage =
new TQWidget(
this );
248 TQGridLayout *layout =
new TQGridLayout( mLoginInformationPage, 2, 2,
249 KDialog::marginHint(), KDialog::spacingHint() );
251 TQLabel *label =
new TQLabel( i18n(
"Login name:" ), mLoginInformationPage );
252 mLoginName =
new KLineEdit( mLoginInformationPage );
253 label->setBuddy( mLoginName );
255 layout->addWidget( label, 0, 0 );
256 layout->addWidget( mLoginName, 0, 1 );
258 label =
new TQLabel( i18n(
"Password:" ), mLoginInformationPage );
259 mPassword =
new KLineEdit( mLoginInformationPage );
260 mPassword->setEchoMode( TQLineEdit::Password );
261 label->setBuddy( mPassword );
263 layout->addWidget( label, 1, 0 );
264 layout->addWidget( mPassword, 1, 1 );
266 addPage( mLoginInformationPage, i18n(
"Login Information" ) );
269 void AccountWizard::setupServerInformationPage()
271 mServerInformationPage =
new TQWidget(
this );
272 TQGridLayout *layout =
new TQGridLayout( mServerInformationPage, 3, 2,
273 KDialog::marginHint(), KDialog::spacingHint() );
275 mIncomingLabel =
new TQLabel( mServerInformationPage );
277 mIncomingServerWdg =
new TQVBox( mServerInformationPage );
278 mIncomingServer =
new KLineEdit( mIncomingServerWdg );
279 mIncomingUseSSL =
new TQCheckBox( i18n(
"Use secure connection (SSL/TLS)" ), mIncomingServerWdg );
281 mIncomingLocationWdg =
new TQHBox( mServerInformationPage );
282 mIncomingLocation =
new KLineEdit( mIncomingLocationWdg );
283 mChooseLocation =
new TQPushButton( i18n(
"Choose..." ), mIncomingLocationWdg );
285 connect( mChooseLocation, TQ_SIGNAL( clicked() ),
286 this, TQ_SLOT( chooseLocation() ) );
288 layout->addWidget( mIncomingLabel, 0, 0, AlignTop );
289 layout->addWidget( mIncomingLocationWdg, 0, 1 );
290 layout->addWidget( mIncomingServerWdg, 0, 1 );
292 TQLabel *label =
new TQLabel( i18n(
"Outgoing server:" ), mServerInformationPage );
293 mOutgoingServer =
new KLineEdit( mServerInformationPage );
294 label->setBuddy( mOutgoingServer );
296 layout->addWidget( label, 1, 0 );
297 layout->addWidget( mOutgoingServer, 1, 1 );
299 mOutgoingUseSSL =
new TQCheckBox( i18n(
"Use secure connection (SSL/TLS)" ), mServerInformationPage );
300 layout->addWidget( mOutgoingUseSSL, 2, 1 );
302 mLocalDelivery =
new TQCheckBox( i18n(
"Use local delivery" ),
303 mServerInformationPage );
304 layout->addWidget( mLocalDelivery, 3, 0 );
306 connect( mLocalDelivery, TQ_SIGNAL( toggled(
bool ) ),
307 mOutgoingServer, TQ_SLOT( setDisabled(
bool ) ) );
309 addPage( mServerInformationPage, i18n(
"Server Information" ) );
312 void AccountWizard::chooseLocation()
316 if ( mTypeBox->type() == AccountTypeBox::Local ) {
317 location = KFileDialog::getSaveFileName( TQString(), TQString(),
this );
318 }
else if ( mTypeBox->type() == AccountTypeBox::Maildir ) {
319 location = KFileDialog::getExistingDirectory( TQString(),
this );
322 if ( !location.isEmpty() )
323 mIncomingLocation->setText( location );
326 TQString AccountWizard::accountName()
const 329 TQString name( i18n(
"None" ) );
331 TQString email = mEMailAddress->text();
332 int pos = email.find(
'@' );
334 name = email.mid( pos + 1 );
335 name[ 0 ] = name[ 0 ].upper();
341 TQLabel *AccountWizard::createInfoLabel(
const TQString &msg )
343 TQLabel *label =
new TQLabel( msg,
this );
344 label->setFrameStyle( TQFrame::Panel | TQFrame::Raised );
345 label->resize( fontMetrics().width( msg ) + 20, label->height() * 2 );
346 label->move( width() / 2 - label->width() / 2, height() / 2 - label->height() / 2 );
352 void AccountWizard::accept()
355 KPIM::IdentityManager *manager = mKernel->identityManager();
356 KPIM::Identity &identity = manager->modifyIdentityForUoid( manager->defaultIdentity().uoid() );
358 identity.setFullName( mRealName->text() );
359 identity.setPrimaryEmailAddress( mEMailAddress->text() );
360 identity.setOrganization( mOrganization->text() );
364 TQTimer::singleShot( 0,
this, TQ_SLOT( createTransport() ) );
367 void AccountWizard::createTransport()
370 TDEConfigGroup general( KMKernel::config(),
"General" );
372 uint numTransports = general.readNumEntry(
"transports", 0 );
374 for ( uint i = 1 ; i <= numTransports ; i++ ) {
375 KMTransportInfo *info =
new KMTransportInfo();
376 info->readConfig( i );
377 mTransportInfoList.append( info );
380 mTransportInfo =
new KMTransportInfo();
382 if ( mLocalDelivery->isChecked() ) {
383 mTransportInfo->type =
"sendmail";
384 mTransportInfo->name = i18n(
"Sendmail" );
385 mTransportInfo->host =
"/usr/sbin/sendmail";
386 mTransportInfo->auth =
false;
387 mTransportInfo->setStorePasswd(
false );
389 TQTimer::singleShot( 0,
this, TQ_SLOT( transportCreated() ) );
391 mTransportInfo->type =
"smtp";
392 mTransportInfo->name = accountName();
393 mTransportInfo->host = mOutgoingServer->text();
394 mTransportInfo->user = mLoginName->text();
395 mTransportInfo->setPasswd( mPassword->text() );
397 int port = (mOutgoingUseSSL->isChecked() ? 465 : 25);
398 checkSmtpCapabilities( mTransportInfo->host, port );
402 void AccountWizard::transportCreated()
404 mTransportInfoList.append( mTransportInfo );
406 TDEConfigGroup general( KMKernel::config(),
"General" );
407 general.writeEntry(
"transports", mTransportInfoList.count() );
409 for ( uint i = 0 ; i < mTransportInfoList.count() ; i++ )
410 mTransportInfo->writeConfig( i + 1 );
413 if ( GlobalSettings::self()->defaultTransport().isEmpty() ) {
414 TDEConfigGroup general( KMKernel::config(),
"General" );
416 if ( mTransportInfoList.count() > 0 ) {
417 KMTransportInfo info;
418 info.readConfig( 1 );
419 TDEConfigGroup composer( KMKernel::config(),
"Composer" );
420 GlobalSettings::self()->setDefaultTransport( info.name );
421 GlobalSettings::self()->setCurrentTransport( info.name );
425 mTransportInfoList.setAutoDelete(
true );
426 mTransportInfoList.clear();
428 TQTimer::singleShot( 0,
this, TQ_SLOT( createAccount() ) );
431 void AccountWizard::createAccount()
438 switch ( mTypeBox->type() ) {
439 case AccountTypeBox::Local:
441 mAccount = acctManager->
create(
"local", i18n(
"Local Account" ) );
442 static_cast<KMAcctLocal*
>( mAccount )->setLocation( mIncomingLocation->text() );
445 case AccountTypeBox::POP3:
447 mAccount = acctManager->
create(
"pop", accountName() );
449 acct->setLogin( mLoginName->text() );
450 acct->setPasswd( mPassword->text() );
451 acct->setHost( mIncomingServer->text() );
452 port = mIncomingUseSSL->isChecked() ? 995 : 110;
455 case AccountTypeBox::IMAP:
457 mAccount = acctManager->
create(
"imap", accountName() );
458 KMAcctImap *acct =
static_cast<KMAcctImap*
>( mAccount );
459 acct->setLogin( mLoginName->text() );
460 acct->setPasswd( mPassword->text() );
461 acct->setHost( mIncomingServer->text() );
462 port = mIncomingUseSSL->isChecked() ? 993 : 143;
465 case AccountTypeBox::dIMAP:
467 mAccount = acctManager->
create(
"cachedimap", accountName() );
468 KMAcctCachedImap *acct =
static_cast<KMAcctCachedImap*
>( mAccount );
469 acct->setLogin( mLoginName->text() );
470 acct->setPasswd( mPassword->text() );
471 acct->setHost( mIncomingServer->text() );
472 port = mIncomingUseSSL->isChecked() ? 993 : 143;
475 case AccountTypeBox::Maildir:
477 mAccount = acctManager->
create(
"maildir", i18n(
"Local Account" ) );
478 static_cast<KMAcctMaildir*
>( mAccount )->setLocation( mIncomingLocation->text() );
483 if ( mTypeBox->type() == AccountTypeBox::POP3 )
484 checkPopCapabilities( mIncomingServer->text(), port );
485 else if ( mTypeBox->type() == AccountTypeBox::IMAP || mTypeBox->type() == AccountTypeBox::dIMAP )
486 checkImapCapabilities( mIncomingServer->text(), port );
488 TQTimer::singleShot( 0,
this, TQ_SLOT( accountCreated() ) );
491 void AccountWizard::accountCreated()
495 mKernel->acctMgr()->add( mAccount );
496 mKernel->cleanupImapFolders();
502 void AccountWizard::finished()
504 GlobalSettings::self()->writeConfig();
511 void AccountWizard::checkPopCapabilities(
const TQString &server,
int port )
514 mServerTest =
new KMServerTest( POP_PROTOCOL, server, port );
516 connect( mServerTest, TQ_SIGNAL( capabilities(
const TQStringList&,
const TQStringList& ) ),
517 this, TQ_SLOT( popCapabilities(
const TQStringList&,
const TQStringList& ) ) );
519 mAuthInfoLabel = createInfoLabel( i18n(
"Checking for supported security capabilities of %1..." ).arg( server ) );
522 void AccountWizard::checkImapCapabilities(
const TQString &server,
int port )
525 mServerTest =
new KMServerTest( IMAP_PROTOCOL, server, port );
527 connect( mServerTest, TQ_SIGNAL( capabilities(
const TQStringList&,
const TQStringList& ) ),
528 this, TQ_SLOT( imapCapabilities(
const TQStringList&,
const TQStringList& ) ) );
530 mAuthInfoLabel = createInfoLabel( i18n(
"Checking for supported security capabilities of %1..." ).arg( server ) );
533 void AccountWizard::checkSmtpCapabilities(
const TQString &server,
int port )
536 mServerTest =
new KMServerTest( SMTP_PROTOCOL, server, port );
538 connect( mServerTest, TQ_SIGNAL( capabilities(
const TQStringList&,
const TQStringList&,
539 const TQString&,
const TQString&,
const TQString& ) ),
540 this, TQ_SLOT( smtpCapabilities(
const TQStringList&,
const TQStringList&,
541 const TQString&,
const TQString&,
const TQString& ) ) );
543 mAuthInfoLabel = createInfoLabel( i18n(
"Checking for supported security capabilities of %1..." ).arg( server ) );
546 void AccountWizard::popCapabilities(
const TQStringList &capaNormalList,
547 const TQStringList &capaSSLList )
549 uint capaNormal = popCapabilitiesFromStringList( capaNormalList );
552 if ( capaNormal & STLS )
553 capaTLS = capaNormal;
555 uint capaSSL = popCapabilitiesFromStringList( capaSSLList );
557 KMail::NetworkAccount *account =
static_cast<KMail::NetworkAccount*
>( mAccount );
559 bool useSSL = !capaSSLList.isEmpty();
560 bool useTLS = capaTLS != 0;
562 account->setUseSSL( useSSL );
563 account->setUseTLS( useTLS );
565 uint capa = (useSSL ? capaSSL : (useTLS ? capaTLS : capaNormal));
568 account->setAuth(
"PLAIN" );
569 else if ( capa & Login )
570 account->setAuth(
"LOGIN" );
571 else if ( capa & CRAM_MD5 )
572 account->setAuth(
"CRAM-MD5" );
573 else if ( capa & Digest_MD5 )
574 account->setAuth(
"DIGEST-MD5" );
575 else if ( capa & NTLM )
576 account->setAuth(
"NTLM" );
577 else if ( capa & GSSAPI )
578 account->setAuth(
"GSSAPI" );
579 else if ( capa & APOP )
580 account->setAuth(
"APOP" );
582 account->setAuth(
"USER" );
584 account->setPort( useSSL ? 995 : 110 );
586 mServerTest->deleteLater();
589 delete mAuthInfoLabel;
596 void AccountWizard::imapCapabilities(
const TQStringList &capaNormalList,
597 const TQStringList &capaSSLList )
599 uint capaNormal = imapCapabilitiesFromStringList( capaNormalList );
601 if ( capaNormal & STARTTLS )
602 capaTLS = capaNormal;
604 uint capaSSL = imapCapabilitiesFromStringList( capaSSLList );
606 KMail::NetworkAccount *account =
static_cast<KMail::NetworkAccount*
>( mAccount );
608 bool useSSL = !capaSSLList.isEmpty();
609 bool useTLS = (capaTLS != 0);
611 account->setUseSSL( useSSL );
612 account->setUseTLS( useTLS );
614 uint capa = (useSSL ? capaSSL : (useTLS ? capaTLS : capaNormal));
616 if ( capa & CRAM_MD5 )
617 account->setAuth(
"CRAM-MD5" );
618 else if ( capa & Digest_MD5 )
619 account->setAuth(
"DIGEST-MD5" );
620 else if ( capa & NTLM )
621 account->setAuth(
"NTLM" );
622 else if ( capa & GSSAPI )
623 account->setAuth(
"GSSAPI" );
624 else if ( capa & Anonymous )
625 account->setAuth(
"ANONYMOUS" );
626 else if ( capa & Login )
627 account->setAuth(
"LOGIN" );
628 else if ( capa & Plain )
629 account->setAuth(
"PLAIN" );
631 account->setAuth(
"*" );
633 account->setPort( useSSL ? 993 : 143 );
635 mServerTest->deleteLater();
638 delete mAuthInfoLabel;
644 void AccountWizard::smtpCapabilities(
const TQStringList &capaNormal,
645 const TQStringList &capaSSL,
646 const TQString &authNone,
647 const TQString &authSSL,
648 const TQString &authTLS )
650 uint authBitsNone, authBitsSSL, authBitsTLS;
652 if ( authNone.isEmpty() && authSSL.isEmpty() && authTLS.isEmpty() ) {
654 authBitsNone = authMethodsFromStringList( capaNormal );
655 if ( capaNormal.findIndex(
"STARTTLS" ) != -1 )
656 authBitsTLS = authBitsNone;
659 authBitsSSL = authMethodsFromStringList( capaSSL );
661 authBitsNone = authMethodsFromString( authNone );
662 authBitsSSL = authMethodsFromString( authSSL );
663 authBitsTLS = authMethodsFromString( authTLS );
667 if ( capaNormal.findIndex(
"STARTTLS" ) != -1 ) {
668 mTransportInfo->encryption =
"TLS";
669 authBits = authBitsTLS;
670 }
else if ( !capaSSL.isEmpty() ) {
671 mTransportInfo->encryption =
"SSL";
672 authBits = authBitsSSL;
674 mTransportInfo->encryption =
"NONE";
675 authBits = authBitsNone;
678 if ( authBits & Login )
679 mTransportInfo->authType =
"LOGIN";
680 else if ( authBits & CRAM_MD5 )
681 mTransportInfo->authType =
"CRAM-MD5";
682 else if ( authBits & Digest_MD5 )
683 mTransportInfo->authType =
"DIGEST-MD5";
684 else if ( authBits & NTLM )
685 mTransportInfo->authType =
"NTLM";
686 else if ( authBits & GSSAPI )
687 mTransportInfo->authType =
"GSSAPI";
689 mTransportInfo->authType =
"PLAIN";
691 mTransportInfo->port = ( !capaSSL.isEmpty() ?
"465" :
"25" );
693 mServerTest->deleteLater();
696 delete mAuthInfoLabel;
702 uint AccountWizard::popCapabilitiesFromStringList(
const TQStringList & l )
704 unsigned int capa = 0;
706 for ( TQStringList::const_iterator it = l.begin() ; it != l.end() ; ++it ) {
707 TQString cur = (*it).upper();
708 if ( cur ==
"PLAIN" )
710 else if ( cur ==
"LOGIN" )
712 else if ( cur ==
"CRAM-MD5" )
714 else if ( cur ==
"DIGEST-MD5" )
716 else if ( cur ==
"NTLM" )
718 else if ( cur ==
"GSSAPI" )
720 else if ( cur ==
"APOP" )
722 else if ( cur ==
"STLS" )
729 uint AccountWizard::imapCapabilitiesFromStringList(
const TQStringList & l )
731 unsigned int capa = 0;
733 for ( TQStringList::const_iterator it = l.begin() ; it != l.end() ; ++it ) {
734 TQString cur = (*it).upper();
735 if ( cur ==
"AUTH=PLAIN" )
737 else if ( cur ==
"AUTH=LOGIN" )
739 else if ( cur ==
"AUTH=CRAM-MD5" )
741 else if ( cur ==
"AUTH=DIGEST-MD5" )
743 else if ( cur ==
"AUTH=NTLM" )
745 else if ( cur ==
"AUTH=GSSAPI" )
747 else if ( cur ==
"AUTH=ANONYMOUS" )
749 else if ( cur ==
"STARTTLS" )
756 uint AccountWizard::authMethodsFromString(
const TQString & s )
758 unsigned int result = 0;
760 TQStringList sl = TQStringList::split(
'\n', s.upper() );
761 for ( TQStringList::const_iterator it = sl.begin() ; it != sl.end() ; ++it )
762 if ( *it ==
"SASL/LOGIN" )
764 else if ( *it ==
"SASL/PLAIN" )
766 else if ( *it ==
"SASL/CRAM-MD5" )
768 else if ( *it ==
"SASL/DIGEST-MD5" )
769 result |= Digest_MD5;
770 else if ( *it ==
"SASL/NTLM" )
772 else if ( *it ==
"SASL/GSSAPI" )
778 uint AccountWizard::authMethodsFromStringList(
const TQStringList & sl )
780 unsigned int result = 0;
782 for ( TQStringList::const_iterator it = sl.begin() ; it != sl.end() ; ++it )
783 if ( *it ==
"LOGIN" )
785 else if ( *it ==
"PLAIN" )
787 else if ( *it ==
"CRAM-MD5" )
789 else if ( *it ==
"DIGEST-MD5" )
790 result |= Digest_MD5;
791 else if ( *it ==
"NTLM" )
793 else if ( *it ==
"GSSAPI" )
799 #include "accountwizard.moc" KMAccount * create(const TQString &type, const TQString &name=TQString(), uint id=0)
Create a new account of given type with given name.
Central point of coordination in KMail.
The account manager is responsible for creating accounts of various types via the factory method crea...
KMail account for pop mail account.