static IEnumerable<MimeEntity> EnumerateMimeParts (MimeEntity entity)
{
if (entity == null)
yield break;
var multipart = entity as Multipart;
if (multipart != null) {
foreach (var subpart in multipart) {
foreach (var part in EnumerateMimeParts (subpart))
yield return part;
}
yield break;
}
yield return entity;
}