当前位置: 首页 > 编程语言 > C#

使用MailKit-MimeKit从电子邮件中删除附件Share

时间:2023-04-10 18:12:17 C#

使用MailKit/MimeKit从电子邮件中删除附件但是,我正在尝试将电子邮件拆分为其组成文件a)主电子邮件(无附件)b)存储在文件系统中的单个附件文件。我可以单独保存附件,但我似乎无法将它们从电子邮件文本代码中删除。即它们与主电子邮件一起保存,从而复制数据。:/我试过:foreach(inMessage.BodyParts中的MimePart部分){if(part.IsAttachment){//删除MimePart<此函数在集合中不可用。}}也试过:varbuilder=newBodyBuilder();foreach(MimePartininMessage.BodyParts){if(!part.IsAttachment){//将MimePart添加到集合<此函数在集合中不可用。}}outMessage.Body=builder.ToMessageBody();如果有人可以提供帮助,我将不胜感激。解决方案实施仅供参考:privatestringGetMimeMessageOnly(stringoutDirPath){MimeMessagemessage=(MasterasfsEmail).GetMimeMessage();if(message.Attachments.Any()){varmultipart=message.BodyasMultipart;if(multipart!=null){while(message.Attachments.Count()>0){multipart.Remove(message.Attachments.ElementAt(0));}}message.Body=multipart;}stringfilePath=outDirPath+Guid.NewGuid().ToString()+".eml";Directory.CreateDirectory(Path.GetDirectoryName(outDirPath));使用(varcancel=newSystem.Threading.CancellationTokenSource()){使用(varstream=File.Create(filePath)){message.WriteTo(stream,cancel.Token);}}返回文件路径;}并仅获取附件:privateListGetAttachments(stringoutDirPath){MimeMessagemessage=(MasterasfsEmail).GetMimeMessage();列表列表=新列表();foreach(消息中的MimePart附件。附件){使用(varcancel=newSystem.Threading.CancellationTokenSource()){stringfilePath=outDirPath+Guid.NewGuid().ToString()+Path.GetExtension(attachment.FileName);使用(varstream=File.Create(filePath)){attachment.ContentObject.DecodeTo(stream,cancel.Token);list.Add(文件路径);}}}返回列表;您可以检索所有作为附件的MimePartshttps://github.com/jstedfast/MimeKit/blob/master/MimeKit/MimeMessage.cs#L734,然后遍历所有Multiparts并调用https://github.com/jstedfast/MimeKit/blob/master/MimeKit/Multipart.cs#L468forremoveattachments下面的例子对邮件做了一些假设,例如,只有一个Multipart有些邮件客户端(Outlook)很有创意如何制作邮件。staticvoidMain(string[]args){varmimeMessage=MimeMessage.Load(@"x:sample.eml");var附件=mimeMessage.Attachments.ToList();if(attachments.Any()){//只有多部分邮件可以有附件varmultipart=mimeMessage.BodyasMultipart;if(multipart!=null){foreach(varattachmentinattachments){multipart.Remove(attachment);}}mimeMessage.Body=multipart;}mimeMessage.WriteTo(newFileStream(@"x:stripped.eml",FileMode.CreateNew));从MimeKit0.38.0.0开始,您将能够使用MimeIterator遍历MIME树结构以收集要删除(并删除它们)的附件列表。为此,您的代码将如下所示:varattachments=newList();varmultiparts=new列表();variter=newMimeIterator(消息);//收集我们的附件列表及其父多部分while(iter.MoveNext()){varmultipart=iter.ParentasMultipart;varpart=iter.CurrentasMimePart;if(multipart!=null&&part!=null&&part.IsAttachment){//跟踪每个附件的父multipartmultiparts.Add(multipart);attachments.Add(部分);}}//现在从其父多部分中删除每个附件...for(inti=0;i我创建了一个使用Mailkit和附件下载电子邮件的应用程序。我遇到了一个问题:从iOS发送带有附加图像的电子邮件未正确处理。MailKit未将图像添加到附件列表。我使用此方法仅获取消息的文本:privatestaticstringGetPlainTextFromMessageBody(MimeMessagemessage){//内容类型需要匹配text/plain否则我会将html存储到DBvarmimeParts=message.BodyParts.Where(bp=>bp.IsAttachment==false&&bp.ContentType.Matches("text","plain"));foreach(varmimePartinmimeParts){if(mimePart.GetType()==typeof(TextPart)){vartextPart=(TextPart)mimePart;返回文本部分。文本;}}返回String.Empty;这是我下载.jpg文件的方法:大家有用,需要多了解C#学习教程,希望大家多多关注——foreach(varattachmentinmessage.BodyParts.Where(bp=>!string.IsNullOrEmpty(bp.FileName))){if(attachment.FileName.ToLowerInvariant().EndsWith(".jpg")){//对这里的图片做点什么}}本文收集自网络,不代表一个位置。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢