如何在ASP.NET MVC 5中从Gmail向Google日历发送邀请?

问题描述

我已经用C#编写了一个代码,可以通过gmail向用户发送邮件,还可以发送附件(如果包含)。现在,我需要发送邀请,以使其在客户的Google日历上标记。我发送Gmail和附件的代码是:

public static void SendEmail(MessageModel message)
        {
            string from = "noreply@test.com";

            if (string.IsNullOrEmpty(from)) {
                throw new System.Exception("Invalid email configuration ! Missing SupportEmailAddress in Web.config.");
            }
            SmtpClient client = new SmtpClient();

            MailMessage mailMessage = new MailMessage(from,message.Destination,message.Subject,message.Body)
            {
                IsBodyHtml = true
            };


            if (message.Attachment != null)
            { 
                Attachment attachment = new Attachment(message.Attachment,MediaTypeNames.Application.Octet);
                mailMessage.Attachments.Add(attachment);
            }

            client.Send(mailMessage);
        }

上面的代码可以很好地向用户发送消息和附件。现在,我需要向他们发送邀请,以便在他们的Google日历上进行标记。我该怎么办?

解决方法

问题是我认为您可能会以错误的方式进行此操作。您应该考虑研究Google Calendar API。通过创建新事件将Event.insert直接插入日历中。然后,您可以进行event.update并更新活动,并根据自己的选择向活动中添加更多参与者,然后Google将自动(如果您愿意)向他们通知邀请。

这里的问题是控制事件本身。我建议您考虑使用服务帐户。您可以授予服务帐户访问日历的权限,它将能够插入和更新这些事件。此解决方案的唯一缺点是发送给用户的电子邮件会通知他们事件邀请。

  1. 邀请来自丑陋的服务帐户电子邮件地址。
  2. 服务帐户邀请发送通知电子邮件的接缝最近有问题。

第二种选择是执行类似已安装的应用程序的操作,在该应用程序中,您可以使用Oauth2对应用程序进行一次身份验证并存储刷新令牌,然后该应用程序将假装为您并在需要时写入事件。

  1. 刷新令牌很少会过期,但是您仍然应该检查该错误。
  2. 邀请是从您发送的,因此您将向所有人提供您的电子邮件地址。

为您提供一些示例代码。 Google .net samples