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); }
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(); }
private static void AuthenticateManually(ManualSaslAuthenticationRequiredEventArgs e, Account account) { //new GmailAuthenticator().Authenticate(e.Client, e.UserCredentials, account); }
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; } }
private void AddNodeToTreeView(Account account) { var node = new TreeNode(account.Name) {Tag = new AccountStateObject {Account = account}}; MailboxTreeView.Nodes.Add(node); }