Пример #1
0
        public void Authenticate(ImapClient client, NetworkCredential credential, Account account)
        {
            if (!client.ServerCapability.Items.Contains("AUTH=XOAUTH")) {
                return;
            }

            if (string.IsNullOrEmpty(account.XOAuthKey)) {
                // in this case the username is the email address;
                var email = credential.UserName;

                var token = new OAuthRequest().WithAnonymousConsumer().WithEndpoint("https://www.google.com/accounts/OAuthGetRequestToken").WithParameter("scope", "https://mail.google.com/") // gmail specific
                    .WithParameter(OAuthParameters.OAuthCallback, "oob").WithParameter("xoauth_displayname", "Crystalbyte Equinox") // xoauth protocol specific
                    .WithSignatureMethod(OAuthSignatureMethods.HmacSha1).Sign().RequestToken();

                var authUrl = new OAuthRequest().WithEndpoint("https://www.google.com/accounts/OAuthAuthorizeToken").WithToken(token).GetAuthorizationUri();

                Process.Start(authUrl.AbsoluteUri);

                string verificationCode;
                using (var form = new OAuthVerificationForm()) {
                    var result = form.ShowDialog();
                    if (result == DialogResult.Cancel) {
                        return;
                    }
                    verificationCode = form.VerificationCode;
                }

                var accessToken = new OAuthRequest().WithAnonymousConsumer().WithEndpoint("https://www.google.com/accounts/OAuthGetAccessToken").WithParameter(OAuthParameters.OAuthVerifier, verificationCode).WithSignatureMethod(OAuthSignatureMethods.HmacSha1).WithToken(token).Sign().RequestToken();

                var xOUrl = string.Format("https://mail.google.com/mail/b/{0}/imap/", email);
                account.XOAuthKey = new OAuthRequest().WithAnonymousConsumer().WithEndpoint(xOUrl).WithSignatureMethod(OAuthSignatureMethods.HmacSha1).WithToken(accessToken).Sign().CreateXOAuthKey();
            }

            client.AuthenticateXOAuth(account.XOAuthKey);
        }
Пример #2
0
        private void OkButtonClick(object sender, EventArgs e)
        {
            var name = NameTextBox.Text;
            var host = HostTextBox.Text;
            var security = GetSecurity();
            Account = new Account {Host = host, Name = name, Security = security, Credential = new NetworkCredential(UsernameTextBox.Text, PasswordTextBox.Text)};

            DialogResult = DialogResult.OK;
            Close();
        }
Пример #3
0
 private static void AuthenticateManually(ManualSaslAuthenticationRequiredEventArgs e, Account account)
 {
     //new GmailAuthenticator().Authenticate(e.Client, e.UserCredentials, account);
 }
Пример #4
0
 private ImapClient CreateClientByAccount(Account account)
 {
     try {
         var client = new ImapClient {Security = account.Security};
         //client.ManualSaslAuthenticationRequired += (sender, e) => AuthenticateManually(e, account);
         var port = client.Security == SecurityPolicies.Explicit ? ImapPorts.Ssl : ImapPorts.Default;
         client.Connect(account.Host, port);
         client.Authenticate(account.Credential, SaslMechanics.Login);
         return client;
     }
     catch (Exception ex) {
         LogSafely(ex.Message);
         throw;
     }
 }
Пример #5
0
        private void AddNodeToTreeView(Account account)
        {
            var node = new TreeNode(account.Name) {Tag = new AccountStateObject {Account = account}};

            MailboxTreeView.Nodes.Add(node);
        }