【问题标题】:how modify message body - Mimekit Message如何修改消息正文 - Mimekit Message
【发布时间】:2016-01-14 12:52:42
【问题描述】:

我正在使用 mimekit 为我的项目接收和发送邮件。我正在发送已收到的邮件,并进行了一些修改(往返部分)。现在我需要在正文部分进行修改。我将用 asterix 字符替换特定的单词。每封邮件的特定文本都不同。邮件可以是任何格式。你可以看到我找到了我想要的,但我不知道我怎样才能在没有任何错误的情况下替换?

【问题讨论】:

  • 如果 Text 属性是可写的,我想找出答案的唯一方法是实际尝试修改它。
  • yes Text 属性似乎是可写的。但; MimeMessage 消息; mesaj.body 不是一种列表类型。所以我无法访问和修改 mesaj.body[0].Text。我找不到Text属性的方式。

标签: c# email message mailkit mimekit


【解决方案1】:

MimeMessage.Body 是一个树结构,类似于 MIME,因此您必须导航到包含您要修改的内容的 MimePart

在这种情况下,由于您要修改文本/* MimePart,它实际上是 MimePart 的子类,称为 TextPart,它具有 .Text 属性(可写)。

我已经编写了有关如何遍历邮件的 MIME 结构以在此处找到您要查找的部分的文档:http://www.mimekit.org/docs/html/WorkingWithMessages.htm

一个非常简单的解决方案可能是:

var part = message.BodyParts.OfType<TextPart> ().FirstOrDefault ();
part.Text = part.Text.Replace ("x", "y");

但请记住,该逻辑假定您找到的第一个 text/* 部分就是您要查找的部分。

【讨论】:

  • 谢谢,但在第一行:System.Collections.GenericIEnumerable&lt;MimeKit.MimeEntity&gt; does not contain a definition for 'OfType' and not extension method 'OfType' accepting a first argument of type System.Collections.GenericIEnumerable&lt;MimeKit.MimeEntity&gt; could by found (are you missing a using directive or an assembly reference?) 我正在使用 MimeKit.1.2.0.0
  • 这是一个 LINQ 语句。您需要将using System.Linq; 添加到您的使用列表中。
  • 好的,当我在调试屏幕中看到 mesaj.body 时,它似乎发生了变化。但是当我发送邮件时,接收者采用未更改的版本。是否需要类似的重建或其他什么?
  • 没有重建。我不知道你为什么看到你所看到的行为。我得看看你的代码。
  • BodyParts 只是一个方便的属性,它以类似列表的方式而不是树的方式迭代 Body 属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-08
  • 1970-01-01
  • 1970-01-01
  • 2017-04-30
  • 2015-06-22
  • 2017-04-14
相关资源
最近更新 更多