diff --git a/libksieve/ksieveui/util/util.cpp b/libksieve/ksieveui/util/util.cpp --- a/libksieve/ksieveui/util/util.cpp +++ b/libksieve/ksieveui/util/util.cpp @@ -114,9 +114,43 @@ } else { KUrl u( interface->sieveAlternateUrl() ); const QString resultSafety = interface->safety(); + + if (u.protocol().isEmpty() || u.port() < 1) { + kWarning() << "Invalid sieve url " << u; + return KUrl(); + } + if ( u.protocol().toLower() == QLatin1String("sieve") && ( resultSafety == QLatin1String("None") ) && u.queryItem(QLatin1String("x-allow-unencrypted")).isEmpty() ) u.addQueryItem( QLatin1String("x-allow-unencrypted"), QLatin1String("true") ); + if (u.queryItem(QLatin1String("x-mech")).isEmpty()) { + QString authStr; + switch( interface->authentication() ) { + case MailTransport::Transport::EnumAuthenticationType::CLEAR: + case MailTransport::Transport::EnumAuthenticationType::PLAIN: + authStr = QLatin1String("PLAIN"); + break; + case MailTransport::Transport::EnumAuthenticationType::LOGIN: + authStr = QLatin1String("LOGIN"); + break; + case MailTransport::Transport::EnumAuthenticationType::CRAM_MD5: + authStr = QLatin1String("CRAM-MD5"); + break; + case MailTransport::Transport::EnumAuthenticationType::DIGEST_MD5: + authStr = QLatin1String("DIGEST-MD5"); + break; + case MailTransport::Transport::EnumAuthenticationType::GSSAPI: + authStr = QLatin1String("GSSAPI"); + break; + case MailTransport::Transport::EnumAuthenticationType::ANONYMOUS: + authStr = QLatin1String("ANONYMOUS"); + break; + default: + authStr = QLatin1String("PLAIN"); + break; + } + u.addQueryItem( QLatin1String("x-mech"), authStr ); + } const QString resultCustomAuthentication = interface->sieveCustomAuthentification(); if (resultCustomAuthentication == QLatin1String("ImapUserPassword")) { u.setUserName( interface->userName() ); @@ -207,4 +241,4 @@ return true; } return false; -} \ No newline at end of file +}