public string CreateFile(MimeMessage mailMessageEx) { if (mailMessageEx == null) { throw new ArgumentNullException(nameof(mailMessageEx)); } var tempDir = CreateUniqueTempDirectory(); var visitor = new HtmlPreviewVisitor(tempDir); mailMessageEx.Accept(visitor); string htmlFile = Path.Combine(tempDir, "index.html"); _logger.Verbose("Writing HTML Preview file {HtmlFile}", htmlFile); File.WriteAllText(htmlFile, visitor.HtmlBody, Encoding.Unicode); return(htmlFile); }
public void TestArgumentExceptions() { var message = new MimeMessage(); Assert.Throws <ArgumentOutOfRangeException> (() => message.Importance = (MessageImportance)500); Assert.Throws <ArgumentOutOfRangeException> (() => message.Priority = (MessagePriority)500); Assert.Throws <ArgumentOutOfRangeException> (() => message.XPriority = (XMessagePriority)500); Assert.Throws <ArgumentException> (() => message.ResentMessageId = "this is some random text..."); Assert.Throws <ArgumentException> (() => message.MessageId = "this is some random text..."); Assert.Throws <ArgumentException> (() => message.InReplyTo = "this is some random text..."); Assert.Throws <ArgumentNullException> (() => message.ResentMessageId = null); Assert.Throws <ArgumentNullException> (() => message.MessageId = null); Assert.Throws <ArgumentNullException> (() => message.Subject = null); Assert.Throws <ArgumentNullException> (() => message.MimeVersion = null); Assert.Throws <ArgumentNullException> (() => MimeMessage.Load((Stream)null)); Assert.Throws <ArgumentNullException> (() => MimeMessage.Load((Stream)null, true)); Assert.Throws <ArgumentNullException> (() => MimeMessage.Load(null, Stream.Null)); Assert.Throws <ArgumentNullException> (() => MimeMessage.Load(ParserOptions.Default, (Stream)null)); Assert.Throws <ArgumentNullException> (() => MimeMessage.Load(null, Stream.Null, true)); Assert.Throws <ArgumentNullException> (() => MimeMessage.Load(ParserOptions.Default, (Stream)null, true)); Assert.Throws <ArgumentNullException> (() => MimeMessage.Load((string)null)); Assert.Throws <ArgumentNullException> (() => MimeMessage.Load(null, "fileName")); Assert.Throws <ArgumentNullException> (() => MimeMessage.Load(ParserOptions.Default, (string)null)); Assert.Throws <ArgumentNullException> (() => message.Accept(null)); Assert.Throws <ArgumentOutOfRangeException> (() => message.Prepare(EncodingConstraint.None, 10)); Assert.Throws <ArgumentNullException> (() => message.WriteTo((string)null)); Assert.Throws <ArgumentNullException> (() => message.WriteTo((Stream)null)); Assert.Throws <ArgumentNullException> (() => message.WriteTo(null, Stream.Null)); Assert.Throws <ArgumentNullException> (() => message.WriteTo(FormatOptions.Default, (Stream)null)); Assert.Throws <ArgumentNullException> (() => message.WriteTo(null, "fileName")); Assert.Throws <ArgumentNullException> (() => message.WriteTo(FormatOptions.Default, (string)null)); Assert.Throws <ArgumentNullException> (() => message.Sign(null)); Assert.Throws <ArgumentNullException> (() => message.Sign(null, DigestAlgorithm.Sha1)); Assert.Throws <ArgumentNullException> (() => message.Encrypt(null)); Assert.Throws <ArgumentNullException> (() => message.SignAndEncrypt(null)); }
void Render() { var visitor = new HtmlPreviewVisitor(MailView); message.Accept(visitor); }
public static AttachmentList GetAttachmentList(MimeMessage message, bool forReply, FilesToDelete filesToDelete) { var uploadHelper = new UploadHelper("Nortwind/Mail/{3:yyyyMM}/{4}"); var result = new AttachmentList(); result.ByIndex = new Dictionary <int, AttachmentInfo>(); result.InOrder = new List <AttachmentInfo>(); var attachmentNumber = 0; var visitor = new EmailPreviewVisitor(message, (mime, embedUrl) => { var sameAttachment = result.InOrder.FirstOrDefault(x => x.Mime == mime); if (sameAttachment != null) { sameAttachment.IsEmbedded = sameAttachment.IsEmbedded || embedUrl != null; return(sameAttachment.Url); } ++attachmentNumber; string fileName; string downUrl = null; byte[] buffer; using (var output = new MemoryStream()) { (mime as MimePart).Content.DecodeTo(output); buffer = output.GetBuffer(); } if (mime is MessagePart) { fileName = mime.ContentDisposition?.FileName ?? (mime.ContentType.Name ?? "attached" + attachmentNumber + ".eml"); } else { fileName = ((MimePart)mime).FileName ?? "file" + attachmentNumber + ".dat"; } if (embedUrl != null) { downUrl = string.Format("data:{0};base64,{1}", mime.ContentType.MimeType, Convert.ToBase64String(buffer, 0, buffer.Length)); } else { var processor = new UploadProcessor { ThumbWidth = 128, ThumbHeight = 96 }; if (processor.ProcessStream(new MemoryStream(buffer), Path.GetExtension(fileName))) { var temporaryFile = "temporary/" + Path.GetFileName(processor.FilePath); using (var sw = new StreamWriter(Path.ChangeExtension(UploadHelper.DbFilePath(temporaryFile), ".orig"))) sw.WriteLine(fileName); var copyResult = uploadHelper.CopyTemporaryFile(temporaryFile, -1, filesToDelete); downUrl = "/upload/" + copyResult.DbFileName; } else { downUrl = "?"; } } var info = new AttachmentInfo { Key = attachmentNumber, Filename = fileName, Mime = mime, Url = downUrl, IsEmbedded = embedUrl != null, Size = buffer.Length }; result.ByIndex[attachmentNumber] = info; result.InOrder.Add(info); return(downUrl); }, forReply); message.Accept(visitor); result.HtmlBody = visitor.HtmlBody; return(result); }