OAuth is an open protocol to allow secure API authorization for Mail.dll email client in a simple and standard method from desktop and web applications.
OAuth 1.0 is deprecated, switch to OAuth 2.0:
The following code makes several HTTP requests to authenticate your application. It also fires up the web browser, so the user can allow or deny the application to access his emails.
Remember to add reference to Mail.dll .NET email component and appropriate namespaces.
1.
// C#
using Limilabs.Client.Authentication;
using Limilabs.Client.IMAP;
const string consumerKey = "anonymous";
const string consumerSecret = "anonymous";
// Get request token
ParameterList parameters1 = OAuth.ForUrl(
"https://www.google.com/accounts/OAuthGetRequestToken")
.Consumer(consumerKey, consumerSecret)
.AddParameter("scope", "https://mail.google.com/")
.AddParameter(OAuthParameterName.OAuthCallback, "oob")
.Sign()
.ExecuteWebRequest();
// Authorize token
string url2 = OAuth.ForUrl(
"https://www.google.com/accounts/OAuthAuthorizeToken")
.Consumer(consumerKey, consumerSecret)
.Token(parameters1.GetValue(OAuthParameterName.OAuthToken))
.TokenSecret(parameters1.GetValue(OAuthParameterName.OAuthTokenSecret))
.Sign()
.GetUrl();
// Fire up the browser.
Process.Start(url2);
// You can use Response.Redirect(url) in ASP.NET
2.
The user needs now to log-in to Gmail account (note that user does not enter credentials in your application):
3.
Then he needs to allow your application to access Gmail:
4.
If you don’t specify callback parameter, user will have to manually copy&paste the token to your application:
In case of a web project, instead of oob value as OAuthCallback parameter, you can specify a web address on your website. oauth_verifier will be included as the redirection url parameter.
After the redirection, your website/application needs to read oauth_verifier query parameter:
5.
// C#
Console.WriteLine("Please enter the key: ");
string oauth_verifier = Console.ReadLine();
// You can use Request["oauth_verifier"].ToString() in ASP.NET
// Get access token
ParameterList parameters3 = OAuth.ForUrl(
"https://www.google.com/accounts/OAuthGetAccessToken")
.Consumer(consumerKey, consumerSecret)
.Token(parameters1.GetValue(OAuthParameterName.OAuthToken))
.TokenSecret(parameters1.GetValue(OAuthParameterName.OAuthTokenSecret))
.AddParameter("oauth_verifier", oauth_verifier)
.Sign()
.ExecuteWebRequest();
// Log-in to IMAP server using XOAuth
using (Imap client = new Imap())
{
client.ConnectSSL("imap.gmail.com");
string imapUrl = string.Format(
"https://mail.google.com/mail/b/{0}/imap/", userEmailAccount);
string oauthImapKey = OAuth.ForUrl(imapUrl)
.Consumer(consumerKey, consumerSecret)
.Token(parameters3.GetValue(OAuthParameterName.OAuthToken))
.TokenSecret(parameters3.GetValue(OAuthParameterName.OAuthTokenSecret))
.Sign()
.GetXOAuthKey();
client.LoginOAUTH(oauthImapKey);
// Now you can access user's emails.
//...
client.Close();
}
Here’s the VB.NET version of the code samples:
Remember to add reference to Mail.dll and appropriate namespaces.
1.
' VB.NET
import Limilabs.Client.Authentication
import Limilabs.Client.IMAP
Const consumerKey As String = "anonymous"
Const consumerSecret As String = "anonymous"
' Gget request token
Dim parameters1 As ParameterList = OAuth _
.ForUrl("https://www.google.com/accounts/OAuthGetRequestToken") _
.Consumer(consumerKey, consumerSecret) _
.AddParameter("scope", "https://mail.google.com/") _
.AddParameter(OAuthParameterName.OAuthCallback, "oob") _
.Sign() _
.ExecuteWebRequest()
' Authorize token
Dim url2 As String = OAuth _
.ForUrl("https://www.google.com/accounts/OAuthAuthorizeToken") _
.Consumer(consumerKey, consumerSecret) _
.Token(parameters1.GetValue(OAuthParameterName.OAuthToken)) _
.TokenSecret(parameters1.GetValue(OAuthParameterName.OAuthTokenSecret)) _
.Sign() _
.GetUrl()
' Fire up the browser
Process.Start(url2)
' You can use Response.Redirect(url) in ASP.NET
2.
First the user needs to log in to Gmail account (note that user does not enter credentials in your application):
3.
Then he needs to allow your application to access Gmail:
4.
If you don’t specify callback parameter, user will have to manually copy&paste the token to your application:
In case of a web project, instead of oob value as OAuthCallback parameter, you can specify a web address on your website. oauth_verifier will be included as the redirection url parameter.
After the redirection, your website/application needs to read oauth_verifier query parameter:
5.
' VB.NET
Console.WriteLine("Please enter the key: ")
Dim oauth_verifier As String = Console.ReadLine().Trim()
' You can use Request("oauth_verifier").ToString() in ASP.NET
' Third: get access token
Dim parameters3 As ParameterList = OAuth _
.ForUrl("https://www.google.com/accounts/OAuthGetAccessToken") _
.Consumer(consumerKey, consumerSecret) _
.Token(parameters1.GetValue(OAuthParameterName.OAuthToken)) _
.TokenSecret(parameters1.GetValue(OAuthParameterName.OAuthTokenSecret)) _
.AddParameter("oauth_verifier", oauth_verifier) _
.Sign() _
.ExecuteWebRequest()
' Log-in to IMAP server using XOAuth
Using client As New Imap()
client.ConnectSSL("imap.gmail.com")
Dim imapUrl As String = String.Format("https://mail.google.com/mail/b/{0}/imap/", userEmailAccount)
Dim oauthImapKey As String = OAuth.ForUrl(imapUrl) _
.Consumer(consumerKey, consumerSecret) _
.Token(parameters3.GetValue(OAuthParameterName.OAuthToken)) _
.TokenSecret(parameters3.GetValue(OAuthParameterName.OAuthTokenSecret)) _
.Sign() _
.GetXOAuthKeyForImap()
client.LoginOAUTH(oauthImapKey)
' Now you can access user's emails.
' ...
client.Close()
End Using