C# 发送 gmail 并在 Google 驱动器附件上上传大文件

C# Sending gmail with uploading large file on Google drive attachment

我需要用 c# 创建一个程序,它可以上传到 google 驱动器并将其附加到电子邮件 (gmail) 并将其发送给收件人。该文件超过 50mb,这就是为什么我们需要 google 驱动器才能发送。是否有 google api 可用于一次完成这些任务?那可能吗?我一直在阅读此处的解决方案,但大多数将文件上传到 google 驱动器和发送电子邮件是单独的解决方案,我很难将这两项任务结合起来。如果有合适的代码或 api 来完成这些任务,有人可以指导我吗?

程序将提供以下信息

发件人邮箱:用户名

发件人邮箱:密码

上传目录和文件

收件人或电子邮件收件人

@Mandz 是的,我不确定是否有自动将文件附加到 Gmail 电子邮件的方式,但是,Gmail 处理 links 的方式非常有趣:

如您所见,它将 link 附加到附件,以某种方式使其自动生成。 这是 GitHub 存储库的 link: link

我决定使用 WPF 和 MVVM 模式(使用 Caliburn.Micro)使其成为 GUI。希望 运行 您端的示例应用程序不会太难。 以下是 运行 应用程序需要执行的步骤:

  1. 有一个 Google 帐户。
  2. 登录 https://console.developers.google.com/(这是一个您可以处理所有代币等的平台)
  3. 创建一个新项目 - 在左上角,单击 Select 一个项目,应该会出现新的 window,单击“新建项目”,随意命名,完成后,单击“导航”菜单(左上角),APIs & Services -> Library,搜索 Google Drive 和 Gmail API,同时启用它们。然后转到 Credentials (In APIs & Services),单击 Create credentials,选择 OAuth client ID,您可能需要配置同意屏幕(但我认为这很简单,您必须选择 Internal 或 External 并提供Application Name), 在 Create OAuth client ID 中,选择 Other,随便命名,点击新 window 上的 Ok,然后在 Credentials Page(右侧)上下载 JSON,放置文件在 .exe 应用程序所在的同一词典中。然后为 Gmail 令牌创建另一个凭据(我相信与上面的方式相同)。将它再次放入 .exe 应用程序所在的同一个字典中。
  4. 要 运行 应用程序,您需要 .NET Core 3.1 https://dotnet.microsoft.com/download(或 Visual Studio 的新版本)
  5. 构建应用程序,点击选择按钮 select 一个文件,然后点击上传按钮。
  6. 如果令牌在同一个字典中,一个新网站应该启动并要求您登录到一个合适的帐户(我会选择您创建的同一个 Gmail 帐户这些令牌)然后如果您允许访问此应用程序,请同意。完成后,令牌文件夹应出现在与 .exe 文件相同的字典中。创建令牌文件夹的原因是您不必重复第 6 步。
  7. 应会出现可下载的 link,将其复制并粘贴到“电子邮件”选项卡的“文本”字段中。
  8. 输入电子邮件地址(我会建议您使用 alt 帐户或其他帐户,这样您就可以对其进行测试)。
  9. 主题字段可以为空。
  10. 单击“发送电子邮件”(现在只需重做第 6 步)

一些旁注:

  1. 我必须为 Drive 和 Gmail 创建两个令牌 APIs,我不知道这是否是最快的方法,我尝试只使用 1 个令牌,但它不想工作。
  2. MainView.xaml只是你看到的东西,所以在这种情况下并不重要。
  3. MainViewModel.cs 是您所有重要信息所在的文件。
  4. 我会看看UploadFileAsync方法,它会上传到root文件夹(Google驱动器的主文件夹),然后将文件放到public 这样任何人都可以访问该文件并下载它,然后获取文件的 public link。
  5. SendEmail 方法发送电子邮件。
  6. 我将这些方法设置为异步的,这样应用程序就不会死机(希望这不会成为您的问题)。
  7. 代码并不完美,但我认为它可以作为学习material。

如有任何问题,请随时 post 在下方提出。祝你好运。

编辑:如果您想要 link like this 而不是完整的 link,您可以将字符串 plainText 更改为 "<p><a href=\"https://www.youtube.com/\">test</a><p>"