GMAIL API 在 C# 中发送带有附件的电子邮件

2024-03-04

我需要在 C# 中使用 Gmail Api 发送带附件的电子邮件的帮助。

我已经阅读过有关发送带有附件的电子邮件的 Google 网站,但示例是用 java 编写的。


答案为时已晚,但将其发布以防万一有人需要:)

为此需要 MimeKit 库:可以从 NuGet 安装。

Code:

public void SendHTMLmessage()
{
    //Create Message
    MailMessage mail = new MailMessage();
    mail.Subject = "Subject!";
    mail.Body = "This is <b><i>body</i></b> of message";
    mail.From = new MailAddress("[email protected] /cdn-cgi/l/email-protection");
    mail.IsBodyHtml = true;
    string attImg = "C:\\Documents\\Images\\Tulips.jpg OR Any Path to attachment";
    mail.Attachments.Add(new Attachment(attImg));
    mail.To.Add(new MailAddress("toemailaddress.com.au"));
    MimeKit.MimeMessage mimeMessage = MimeKit.MimeMessage.CreateFromMailMessage(mail);

    Message message = new Message();
    message.Raw = Base64UrlEncode(mimeMessage.ToString());
    //Gmail API credentials
    UserCredential credential;
    using (var stream =
        new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
    {
        string credPath = System.Environment.GetFolderPath(
            System.Environment.SpecialFolder.Personal);
        credPath = Path.Combine(credPath, ".credentials/gmail-dotnet-quickstart2.json");

        credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
            GoogleClientSecrets.Load(stream).Secrets,
            Scope,
            "user",
            CancellationToken.None,
            new FileDataStore(credPath, true)).Result;
        Console.WriteLine("Credential file saved to: " + credPath);
    }

    // Create Gmail API service.
    var service = new GmailService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = ApplicationName,
    });
    //Send Email
    var result = service.Users.Messages.Send(message, "me/OR UserId/EmailAddress").Execute();
}

范围可以是:

GmailSend 或 GmailModify

static string[] Scope = { GmailService.Scope.GmailSend };
static string[] Scope = { GmailService.Scope.GmailModify };

Base64UrlEncode函数:

private string Base64UrlEncode(string input)
{
    var inputBytes = System.Text.Encoding.UTF8.GetBytes(input);
    return Convert.ToBase64String(inputBytes)
      .Replace('+', '-')
      .Replace('/', '_')
      .Replace("=", "");
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GMAIL API 在 C# 中发送带有附件的电子邮件 的相关文章

随机推荐

  • Kafka连接消费者引用偏移量并存储在消息中

    如果我使用 kafka connect 来消费消息并存储到 s3 使用 kafka connect s3 连接器 我是否可以将消息偏移量与事件负载一起存储 我希望使用这些数据对消息进行一些排序 并检查是否存在任何间隙或检查我收到的消息中是否
  • 如何在 iOS 中的 TableView 中添加工具栏

    我正在构建一个简单的笔记应用程序 我想在 TableView 的底部添加一个静态栏 例如 我想添加一个帮助按钮 我怎样才能只对我的 TableView 执行此操作 So far 我通过情节提要添加了一个工具栏 但这使得它粘在最后制作的 ta
  • 使用 $compile 测试 ng-if

    我试图通过针对预定义范围编译视图并运行 scope digest 来测试我的模板之一中的 ng if 我发现无论我的条件是真还是假 编译的模板都是一样的 我希望编译后的 html 在 false 时删除 ng if dom 元素 befor
  • 将“pip install”分解为较小的步骤,以便我可以在安装之前编辑包

    我对 pip 的熟悉最终使我能够执行以下操作 pip install pip uninstall 和 pip list 将我想要安装的包的名称作为单个参数 到目前为止 这种有限的知识使我能够安装大多数简单的软件包 有时 如果幸运的话 我什至
  • 并行化字典理解

    我有以下功能和字典理解 def function name params results fits open name
  • 无法让 Jetty 扫描带注释的类

    我有一个带有嵌入式码头服务器的应用程序 我像这样启动它 放置在 main 中并使用 eclipse 启动 Server server new Server port WebAppContext context new WebAppConte
  • 从 couchbase 存储桶复制到 Elasticsearch 索引时出现问题?

    此问题似乎与在 couchbase 中使用 XDCR 有关 如果我有以下简单的对象 1 name Mark age 30 2 name Bill age forty 并设置一个elasticsearch索引 curl XPUT http l
  • 如何使用 Firestore 更新“对象数组”?

    我目前正在尝试 Firestore 但我陷入了一些非常简单的事情 更新数组 又名子文档 我的数据库结构非常简单 例如 proprietary John Doe sharedWith who email protected cdn cgi l
  • 绑定到“模型”的集合超出了 MvcOptions.MaxModelBindingCollectionSize (1024)

    当向控制器提交超过 1024 个项目的数组 当前为 2 500 个项目 时 我遇到异常 您可以提交的项目数量似乎有 1024 件的最大限制 它似乎是在 MvcOptions 中设置的 但是我正在使用 Net Core 3 0 并使用端点路由
  • 将 Java 数组中任意范围的元素设置为 null 的最快方法是什么?

    我知道我可以简单地迭代start to end并清除这些细胞 但我想知道是否有可能以更快的方式 也许使用 JNI edSystem arrayCopy 如果我猜对了 您需要使一个数组或包含对象引用的数组的子范围无效 以使它们符合 GC 的条
  • 按类型限制 ElasticSearch 聚合?

    如何针对特定类型执行 ElasticSearch 聚合 我意识到您可以在请求 URL 中指定索引和 或类型 但我想对两种不同的类型执行聚合 谢谢你 您可以按类型过滤聚合 然后使用子聚合 例如 aggs Test 1 filter type
  • doxygen 不显示静态函数和公共函数之间的依赖关系

    你好 我正在尝试使用 doxygen 记录我的 C 代码 问题是静态函数和公共 私有函数之间的依赖关系没有显示出来 其中 公共 私人之间的那些正在正确显示 有人可以在这件事上帮助我吗 将配置和一些示例代码粘贴到此处 Project rela
  • 出现错误 ORA-00909:参数数量无效

    CREATE VIEW ITCC release testcase count AS SELECT CONCAT rtm requirement id tct release id AS id rtm requirement id AS r
  • PHP stmt 准备失败但没有错误

    我正在尝试准备 mysqli 查询 但它默默地失败而没有给出任何错误 db hostname test com db database dbname db username db user db password password db n
  • Spring:单例/会话范围和并发性

    Spring bean 的单例 会话范围是否要求对其所有字段的访问必须同步 通过 synchronized 关键字或使用 java util concurrent 包中的一些类来表示 例如 这段代码不是线程安全的吗 复制 粘贴自here h
  • 如何使 TinyMCE 的模式对话框响应式?

    我正在使用 Bootstrap 3 在响应式 CMS 上使用 TinyMCE4 我注意到 TinyMCE4 中的对话框 模式没有响应 这有点令人失望 我开始编写一些简单的 CSS 类来覆盖固定宽度 但似乎有大量的 CSS 类使得这项任务看起
  • 如何在 R 中的一条水平线上创建气泡图时间线

    我想在 R 中创建一个气泡图 其中每个气泡代表大规模枪击事件 伤亡Killed和人员伤亡Injured像下面这样 基本上 我想要一个ggplot2气泡图与geom point on one水平线 没有 y 轴 其中点的大小表示值 Kille
  • 为什么 C 和 C++ for 循环使用 int 而不是 unsigned int?

    这是一个相当愚蠢的问题 但为什么int常用来代替unsigned int在 C 或 C 中为数组定义 for 循环时 for int i i
  • 一般对元组的每个元素调用成员函数

    第一步 展开元组并将元素传递给函数 我有一个带有 N 个参数的函数 void func int double char 和一个具有匹配类型的元组 std tuple
  • GMAIL API 在 C# 中发送带有附件的电子邮件

    我需要在 C 中使用 Gmail Api 发送带附件的电子邮件的帮助 我已经阅读过有关发送带有附件的电子邮件的 Google 网站 但示例是用 java 编写的 答案为时已晚 但将其发布以防万一有人需要 为此需要 MimeKit 库 可以从