MailKit:如何从 MimeMessage 本地下载所有附件

2023-11-22

我在网上查看了其他示例,但我无法弄清楚如何从 MimeMessage 对象下载和存储所有附件。 我确实研究过 WriteTo(),但无法让它工作。 还想知道附件是否会按照原始文件名保存,并在电子邮件内键入。 这是我到目前为止所拥有的:

using (var client = new ImapClient())
{
    client.Connect(Constant.GoogleImapHost, Constant.ImapPort, SecureSocketOptions.SslOnConnect);
    client.AuthenticationMechanisms.Remove(Constant.GoogleOAuth);
    client.Authenticate(Constant.GoogleUserName, Constant.GenericPassword);

    if (client.IsConnected == true)
    {
        FolderAccess inboxAccess = client.Inbox.Open(FolderAccess.ReadWrite);
        IMailFolder inboxFolder = client.GetFolder(Constant.InboxFolder);
        IList<UniqueId> uids = client.Inbox.Search(SearchQuery.All);

        if (inboxFolder != null & inboxFolder.Unread > 0)
        {
            foreach (UniqueId msgId in uids)
            {
                MimeMessage message = inboxFolder.GetMessage(msgId);

                foreach (MimeEntity attachment in message.Attachments)
                {
                    //need to save all the attachments locally
                }
            }
        }
    }
}

这一切都在FAQ在“如何保存附件?”中部分。

这是您在问题中发布的代码的固定版本:

using (var client = new ImapClient ()) {
    client.Connect (Constant.GoogleImapHost, Constant.ImapPort, SecureSocketOptions.SslOnConnect);
    client.AuthenticationMechanisms.Remove (Constant.GoogleOAuth);
    client.Authenticate (Constant.GoogleUserName, Constant.GenericPassword);

    client.Inbox.Open (FolderAccess.ReadWrite);
    IList<UniqueId> uids = client.Inbox.Search (SearchQuery.All);

    foreach (UniqueId uid in uids) {
        MimeMessage message = client.Inbox.GetMessage (uid);

        foreach (MimeEntity attachment in message.Attachments) {
            var fileName = attachment.ContentDisposition?.FileName ?? attachment.ContentType.Name;

            using (var stream = File.Create (fileName)) {
                if (attachment is MessagePart) {
                    var rfc822 = (MessagePart) attachment;

                    rfc822.Message.WriteTo (stream);
                } else {
                    var part = (MimePart) attachment;

                    part.Content.DecodeTo (stream);
                }
            }
        }
    }
}

一些注意事项:

  1. 无需检查是否client.IsConnected认证后。如果没有连接,就会抛出异常Authenticate()方法。它会抛出一个异常Connect()如果没有成功,也可以使用该方法。无需检查IsConnected说明您是否真的刚刚打电话过Connect()2 排。
  2. 你为什么要检查inboxFolder.Unread如果你甚至不在任何地方使用它?如果您只想下载未读消息,请将搜索更改为SearchQuery.NotSeen这只会为您提供尚未读取的消息 UID。
  3. 我删除了你的IMailFolder inboxFolder = client.GetFolder(Constant.InboxFolder);逻辑,因为你不需要它。如果您要使用进行搜索client.Inbox,然后不要使用不同的文件夹对象迭代结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MailKit:如何从 MimeMessage 本地下载所有附件 的相关文章

  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 不支持将数据直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery)

    正在编码视觉工作室2012并使用实体模型作为我的数据层 但是 当页面尝试加载时 上面提到的标题 我使用 Linq 语句的下拉控件往往会引发未处理的异常 下面是我的代码 using AdventureWorksEntities dw new
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 关于 C++ 转换:参数 1 从“[some_class]”到“[some_class]&”没有已知的转换

    我正在研究 C 并且遇到了一个错误 我不知道确切的原因 我已经找到了解决方案 但仍然想知道原因 class Base public void something Base b int main Base b b something Base
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现

随机推荐

  • Vis.js 网络:如何获取数据和选项进行保存?

    我的目的是使用 vis js 创建简单的图形编辑器 我想到的第一个功能是手动定位节点并保存它 然而 与设置选项一种直接的方法来获取所有options似乎不存在 是否有任何合理的方法来获取它们 除了尝试使用诸如dragEnd这听起来太脆弱了
  • 如何在java中消除retrofit反应式请求?

    我正在开发一个 android 项目 该项目使用 Rx Java observable 和 subscribe 通过改造来发出请求 但是 在某些交互中 此请求可以被多次调用 我只想在预定义的时间窗口内执行最后一个请求 去抖 我尝试应用deb
  • 如何将 PHP 代码嗅探器 XML 报告转换为 HTML?

    您能否建议一些将 PHP 代码嗅探器 XML 报告转换为 HTML 页面的方法 我想我可能需要一些 XSLT 翻译 提前感谢您的建议 几天前 我在博客上发布了 XSLT 样式表 http phpdojo blogspot com 2010
  • 如何:更新 iCalendar 文件导入的日历事件? [复制]

    这个问题在这里已经有答案了 可能的重复 ICalendar 和事件更新在 Outlook 中不起作用 帮助使用 iCalendar 文件更新 Outlook 2007 中的事件 如何更新 iCalendar 文件导入的日历事件 我需要重新导
  • 如何使用 PlistBuddy 将数组添加到 Plist?

    这个问题是一个子问题 替代方法来解决我试图通过这个问题做的事情 如何使用 PListBuddy 将条目从一个文件复制到另一个文件 我想使用 PlistBuddy 通过 XCode 构建脚本 使用 Bash Shell 将条目从 Plist
  • 将matlab矩阵分成几个相等的部分

    我有一个大小矩阵64500x17 它代表检测到的文本特征 我必须用它来找到 5 个质心kmeans 我需要的是 把这个矩阵分成5份12900x17矩阵 找到方法 将它们连接成一个5x17矩阵输入到开始参数kmeans 我几乎知道如何做所有事
  • 来自 .. 错误有效负载的无效状态代码“400”:“要求失败:会话不活动

    我正在运行 Pyspark 脚本将数据帧写入 jupyter Notebook 中的 csv 如下所示 df coalesce 1 write csv Data1 csv header true 运行一个小时后 我收到以下错误 错误 状态代
  • 为什么我不能多重声明一个类

    我可以做这个 extern int i extern int i 但我不能对班级做同样的事情 class A class A 虽然在这两种情况下都没有分配内存 以下是声明 extern int i class A 接下来的两个是定义 int
  • 如何开始活动 语言和输入

    我想打开 启动 名为 语言和输入 的活动 用户可以在其中更改设备语言 startActivity new Intent Locale 它在区域设置或 设置中 它在哪里 尝试这个 Intent intent new Intent intent
  • Powershell - 检查远程进程,如果完成则继续

    作为备份操作的一部分 我运行 7zip 命令将文件夹压缩为单个 7z 文件 没有问题 因为我正在使用InVoke WMIMethod Example zip cmd c irFolder 7za exe a somedirectory 7z
  • 线程有不同的堆吗?

    据我所知 当操作系统创建线程时 每个线程都会获得一个不同的堆栈 我想知道每个线程是否也有一个独特的堆 不 所有线程共享一个公共堆 Each 线程有一个私有堆栈 它可以快速添加和删除项目 这使得基于堆栈的内存变得更快 但是如果您使用太多堆栈内
  • 将副本集转换为独立服务器后遇到 MongoDB 警告

    将 mongodb 副本集转换为独立服务器后 我遇到了以下警告 我执行了 rs remove host 并在启动 mongo 数据库时删除了 replSet 参数 root sam mongo MongoDB shell version 2
  • 用 PHP 编写的语言解析器库

    我正在寻找一个语言解析器用 PHP 编写 目标是阅读自定义语言 不读PHP代码 基本上 我想指定一种语言语法 给出一个代码片段并返回一个表示它的结构 然后我可以遍历该结构来执行代码片段 我相信该结构将是AST 但我不知道这是否是唯一的选择
  • 如何从 NodeMCU 中的无限重启循环中恢复?

    我的 NodeMCU 程序已进入无限重启循环 我的代码功能正常 但我尝试执行的任何操作 例如file remove init lua 甚至只是 node heap 它会出现恐慌并重新启动 并显示 PANIC unprotected erro
  • Visual Studio 设置文件 - 它是如何工作的?

    我不明白以下事情 app config applicationname exe config 和设置文件有什么区别 我无法在特定帐户下的 Windows7 AppData 目录中找到 settings 文件 我听说它应该位于那里的某个地方
  • Bootstrap v4 导航栏错误?

    问题就在这里 我从引导端获取了默认导航栏示例 https v4 alpha getbootstrap com components navbar 它们在结果中显示全尺寸的导航栏 当屏幕变小时 导航栏可能会折叠 但是当我将代码插入到我的项目中
  • 如何在 Android 上用 Java 创建 Multimap

    我在哪里可以找到 Java 的 multimap 实现 它可以在 Android 上运行 而无需包含任何其他类等 我发现的实现都需要其他东西 而这些东西又需要其他东西 而且很快就会变得混乱 我正在从 C 移植一个项目 并且是 java 的新
  • 在jquery中选择根元素

    我需要能够从 a 中选择根元素fragment不知道节点类型 类 id 或层次结构 div div div div div div div div div div 我希望能够执行类似 root 的操作 并在上面的示例中选择 0 更好的是我更
  • 为什么“True == not False”是语法错误?

    比较布尔值与 在 Python 中工作 但是当我应用布尔值时not运算符 结果是语法错误 Python 2 7 r27 82500 Sep 16 2010 18 02 00 GCC 4 5 1 20100907 Red Hat 4 5 1
  • MailKit:如何从 MimeMessage 本地下载所有附件

    我在网上查看了其他示例 但我无法弄清楚如何从 MimeMessage 对象下载和存储所有附件 我确实研究过 WriteTo 但无法让它工作 还想知道附件是否会按照原始文件名保存 并在电子邮件内键入 这是我到目前为止所拥有的 using va