【问题标题】:Can I skip MIME-parsing to get an attachment?我可以跳过 MIME 解析来获取附件吗?
【发布时间】:2010-09-26 11:35:03
【问题描述】:

我是新来的,所以首先向你问好

我正在编写一个在我的 Windows Mobile(掌上电脑)上运行的应用程序。仅供参考,我正在使用 VB.NET。

我的想法是将我的电子邮件帐户与我的提供商一起使用,该提供商给了我很多 GB:s 供我使用,作为虚拟在线存储磁盘。简而言之,或多或少类似于您可能已经阅读过的 GMAIL 驱动器。我已经编写了代码来使用 telnet-socket 连接到我的提供商的 SMTP、POP3 和 IMAP 帐户。我可以登录,到目前为止一切顺利。

在我的具体情况下,我对电子邮件本身不感兴趣,但实际上附件将成为我在这个虚拟存储卡上的文件。我发现了很多免费课程,主要是 C#,用于下载带有附件的电子邮件,最重要的是 MIME 解析。不幸的是,所有这些类都以一种或另一种方式使用了 Net Framework 的类/命名空间,这些类/命名空间不包含在 Windows Mobile 使用的 NET Compact Framework 中。对于我和我的知识来说,自己编写一个 MIME 解析器太复杂了。

因此,至少关于我通过 POP3 或 IMAP 接收的代码,我在想,一旦我下载了设备上的所有字节,我只需解析完整的电子邮件(验证边界在哪里)和获取已在 Base64 中编码的部分,然后对其进行解码并使用我在发送时在电子邮件的主题字段中编写的文件的名称和扩展名对其进行重命名。这样,我也许可以避免所有关于 MIME 及其所有含义的东西......

怎么样,通过 SMTP 发送,我还是要调查一下。任何想法将不胜感激。

很抱歉这个浪漫 - 你怎么看 - 我可以跳过获取 MIME 解析器而只使用普通的字符串解析吗?

亲切的问候, 莫斯特67

【问题讨论】:

    标签: .net vb.net windows-mobile mime


    【解决方案1】:

    MIME 解析器只是一个字符串解析器。它们很容易编写,特别是如果您知道您只想要/需要 MIME 类型的子集。查找 RFC 并自行实施。

    【讨论】:

    • 谢谢。你证实了我的想法,即使用普通字符串解析的黑客可能会起作用
    • “它们很容易写”?我会说,“他们写得还不错……”。 Piskvor 所说的是我的经验,关于脆性。
    【解决方案2】:

    您可以尝试在邮件标题中查找boundaries,然后在此字符串上拆分电子邮件。恕我直言,解析子部分是必要的(想到编码和字符集;在大多数情况下,仅删除标头是行不通的),但比一次处理整个消息要容易一些。

    请注意:这是一种脆弱的方法 - 它适用于某些消息,但会破坏其他消息(例如嵌套的多部分消息、更改边界字符串(不应该,但可能发生)等)。

    【讨论】:

    • 您所说的或多或少是我的想法,即使用边界。我将尝试找到一些包含嵌套多部分消息的电子邮件示例。感谢您的建议。
    • 嵌套的多部分消息无关紧要,因为嵌套消息的 MIME 边界标记与根消息的不同。
    【解决方案3】:

    编写邮件消息的字符串解析器实际上是编写一个简单的 MIME 解析器。您可以在几个小时内编写一个快速而简单的 MIME 解析器。如果您将使用它来解析类似的邮件(例如,由同一个客户端软件从一个位置发送),它应该是您所需要的。

    有关 MIME 的详细信息,请参阅

    几天的工作应该是现实的。我参与了一个简单的内部 MIME 解析器的开发(花了几天时间破解并解析了 95% 收到的电子邮件),它涉及到商业产品(几个月的工作、大量的单元测试和数百封非常奇怪的测试电子邮件从野外),然后进行了修改,以便可以在 Compact Framework 中使用(由于内存受限的设备而发生的变化,因为只有一小部分 .NET 框架被移植到 .NET CF 而发生了变化)。并添加对大部分 CryptoAPI 功能的重写,以使签名和加密的 S/MIME 电子邮件在 .NET CF 上工作。

    MIME 解析器是 Rebex Secure Mail for .NET/.NET CF 组件的一部分,可以从 http://www.rebex.net/secure-mail.net/ 下载

    支持所有版本的 .NET 和 .NET CF。甚至 .NET CF1 恐龙 ;-)。但是,它不是免费的。

    【讨论】:

    • 有趣。是的,我知道你们的产品(如果我记得我相信我什至尝试了一些),但由于我的应用程序是免费的,所以我必须找到另一种方法。我的这个项目暂时搁置了,但我可能会在找到一些空闲时间的时候继续它。
    猜你喜欢
    • 2010-10-16
    • 2020-11-27
    • 2014-06-29
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多