如何从凭据或授权中获取我的电子邮件地址?

How to get my email address from credentials or authorization?

我正在尝试使用 Gmail API 代表当前经过身份验证的用户发送邮件。

身份验证:

 /// <summary>
    /// This method requests Authentcation from a user using Oauth2.  
    /// Credentials are stored in System.Environment.SpecialFolder.Personal
    /// Documentation https://developers.google.com/accounts/docs/OAuth2
    /// </summary>
    /// <param name="clientSecretJson">Path to the client secret json file from Google Developers console.</param>
    /// <param name="userName">Identifying string for the user who is being authentcated.</param>
    /// <returns>DriveService used to make requests against the Drive API</returns>
    public static GmailService AuthenticateOauthGmail(string clientSecretJson, string userName)
    {
        try
        {
            if (string.IsNullOrEmpty(userName))
                throw new ArgumentNullException("userName");
            if (string.IsNullOrEmpty(clientSecretJson))
                throw new ArgumentNullException("clientSecretJson");
            if (!File.Exists(clientSecretJson))
                throw new Exception("clientSecretJson file does not exist.");

            // These are the scopes of permissions you need. It is best to request only what you need and not all of them
            string[] scopes = new string[] { GmailService.Scope.GmailSettingsSharing,   //Manage your sensitive mail settings, including who can manage your mail
                                             GmailService.Scope.GmailSettingsBasic,     //Manage your basic mail settings                                 
                                             GmailService.Scope.GmailReadonly,          //View your emails messages and settings
                                             GmailService.Scope.GmailCompose,           //Manage drafts and send emails
                                             GmailService.Scope.GmailInsert,            //Insert mail into your mailbox
                                             GmailService.Scope.GmailLabels,            //Manage mailbox labels
                                             GmailService.Scope.GmailModify,            //View and modify but not delete your email
                                             GmailService.Scope.GmailSend,              //Send email on your behalf
                                             GmailService.Scope.MailGoogleCom};                             //View and manage your mail
            UserCredential credential;
            using (var stream = new FileStream(clientSecretJson, FileMode.Open, FileAccess.Read))
            {
                string credPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
                credPath = Path.Combine(credPath, ".credentials/", System.Reflection.Assembly.GetExecutingAssembly().GetName().Name);

                // Requesting Authentication or loading previously stored authentication for userName
                credential = GoogleWebAuthorizationBroker.AuthorizeAsync(GoogleClientSecrets.Load(stream).Secrets,
                                                                         scopes,
                                                                         userName,
                                                                         CancellationToken.None,
                                                                         new FileDataStore(credPath, true)).Result;
            }

            // Create Drive API service.
            return new GmailService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = "Gmail Oauth2 Authentication Sample"
            });
        }
        catch (Exception ex)
        {
            Console.WriteLine("Create Oauth2 account GmailService failed" + ex.Message);
            throw new Exception("CreateServiceAccountGmailFailed", ex);
        }
    }

发送邮件:

  var msg = new AE.Net.Mail.MailMessage
        {
            Subject = "Email Subject",
            From = new MailAddress("MyUsersEmailAddress","Linda Lawton"),
            Body = "The message"
        };

        msg.To.Add(new MailAddress("SendMailto@test.com", "Linda Lawton"));
        msg.ReplyTo.Add(msg.From);
        var msgStr = new StringWriter();
        msg.Save(msgStr);


        var gmailMessage = new Message
        {
            Raw = Base64UrlEncode(msgStr.ToString())
        };
        var response = serviceGmail.Users.Messages.Send(gmailMessage, "me").Execute();

这可以找到,但我不得不对用户的电子邮件地址进行硬编码。如何找到已登录用户的电子邮件地址?

Gmail api 有一个方法可以让您获取有关您登录的用户的信息。

Users: getProfile 获取当前用户的 Gmail 配置文件。

{
  "emailAddress": string,
  "messagesTotal": integer,
  "threadsTotal": integer,
  "historyId": unsigned long
}

通过添加以下请求,我可以获得有关我的用户的信息。

var me = serviceGmail.Users.GetProfile("me").Execute();