Beispiel #1
0
        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);
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        void Render()
        {
            var visitor = new HtmlPreviewVisitor(MailView);

            message.Accept(visitor);
        }
Beispiel #4
0
        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);
        }