public void DecodeStringTest1()
    {
        string quoted = $"1=0D=0AFirmenstra=C3=9Fe=0D=0AOrt Firma, Bundesland Firma PLZFirma=0D=0ALand={Environment.NewLine} Firma";

        string?s = QuotedPrintableConverter.Decode(quoted);

        Assert.IsNotNull(s);
        StringAssert.Contains(s, "Firmenstraße");
        StringAssert.EndsWith(s, " Firma");
    }
Пример #2
0
    /// <summary>
    /// Dekodiert Quoted-Printable kodierten Text, der sich in <see cref="Value"/> befindet, wenn
    /// <see cref="VCards.Models.PropertyParts.ParameterSection.Encoding"/>
    /// gleich <see cref="VCdEncoding.QuotedPrintable"/> ist.
    /// </summary>
    internal void DecodeQuotedPrintable()
    {
        if (this.Parameters.Encoding == VCdEncoding.QuotedPrintable && !_quotedPrintableDecoded)
        {
            this.Value = QuotedPrintableConverter.Decode(this.Value,                                                  // null-Prüfung nicht erforderlich
                                                         TextEncodingConverter.GetEncoding(this.Parameters.Charset)); // null-Prüfung nicht erforderlich

            _quotedPrintableDecoded = true;                                                                           // Encoding nicht 2x durchführen
        }
    }
        public void QuotedPrintableConverter_Decode()
        {
            var qc = new QuotedPrintableConverter(2000, QuotedPrintableConvertMode.Default);

            qc.InsertNewline = true;
            var text = "=1B$B5@1`@:<K$N>b$N@<=1B(B=0D=0A=1B$B=3Dt9TL5>o$N6A$-$\"$j=1B(B=0D=0A=1B$B:=" + Environment.NewLine
                       + ";MeAP<y$N2V$N?'=1B(B=0D=0A=1B$B@9<TI,?j$NM}$r$\"$i$o$9=1B(B=0D=0A";
            var bb          = qc.Decode(Encoding.UTF8.GetBytes(text));
            var decodedText = Encoding.GetEncoding("Iso-2022-JP").GetString(bb);

            Assert.AreEqual(BodyText, decodedText);
        }
        public void QuotedPrintableConverter_Decode_1()
        {
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

            var qc = new QuotedPrintableConverter(2000, QuotedPrintableConvertMode.Default);

            qc.InsertNewline = true;
            var text        = "https://join.slack.com/t/team/invite/MjM1ODAzMTM3MDc2LTE1MDQ0OTk3NDItODMzYmU4MWEwOQ?x=x-39652798756-2358031371";
            var bb          = qc.Decode(Encoding.UTF8.GetBytes(text));
            var decodedText = Encoding.GetEncoding("iso-2022-JP").GetString(bb);

            Assert.AreEqual("https://join.slack.com/t/team/invite/MjM1ODAzMTM3MDc2LTE1MDQ0OTk3NDItODMzYmU4MWEwOQ?x=x-39652798756-2358031371", decodedText);
        }
Пример #5
0
        public void QuotedPrintableConverter_Encode_InsertNewline()
        {
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

            var qc = new QuotedPrintableConverter(2000, QuotedPrintableConvertMode.Default);

            qc.InsertNewline = true;

            var bb          = qc.Encode(Encoding.GetEncoding("Iso-2022-JP").GetBytes(BodyText));
            var encodedText = Encoding.UTF8.GetString(bb);

            Assert.AreEqual("=1B$B5@1`@:<K$N>b$N@<=1B(B=0D=0A=1B$B=3Dt9TL5>o$N6A$-$\"$j=1B(B=0D=0A=1B$B:=" + Environment.NewLine
                            + ";MeAP<y$N2V$N?'=1B(B=0D=0A=1B$B@9<TI,?j$NM}$r$\"$i$o$9=1B(B=0D=0A", encodedText);
        }
Пример #6
0
        public MimeWriter(Stream stream)
        {
            _Stream = stream;
            _Base64HeaderConverter = new Base64Converter(200);
            _Base64HeaderConverter.InsertNewline = false;
            _Base64BodyConverter = new Base64Converter(12000);
            _Base64BodyConverter.InsertNewline            = true;
            _QuotedPrintableHeaderConverter               = new QuotedPrintableConverter(200, QuotedPrintableConvertMode.Header);
            _QuotedPrintableHeaderConverter.InsertNewline = false;
            _QuotedPrintableBodyConverter = new QuotedPrintableConverter(2000, QuotedPrintableConvertMode.Default);

            this.HeaderEncoding              = Default.HeaderEncoding;
            this.HeaderRfc2047Encoding       = Default.HeaderRfc2047Encoding;
            this.FileNameEncoding            = Default.FileNameEncoding;
            this.MimeHeaderParameterEncoding = Default.MimeHeaderParameterEncoding;

            if (_Initialize != null)
            {
                _Initialize(this);
            }
        }
Пример #7
0
        /// <summary>
        /// Get decoded BodyData by ContentTransferEncoding
        /// </summary>
        /// <returns></returns>
        public Byte[] GetDecodedData()
        {
            Byte[] bb = this.BodyData;

            if (bb == null)
            {
                throw new InvalidOperationException("BodyData is not loaded.Please ensure to set MimeParser.Filter.LoadContentBodyData = true when you download mail.");
            }

            if (this.ContentTransferEncoding == TransferEncoding.Base64)
            {
                var cv = new Base64Converter(9000);
                bb = cv.Decode(bb);
            }
            else if (this.ContentTransferEncoding == TransferEncoding.QuotedPrintable)
            {
                var cv = new QuotedPrintableConverter(9000, QuotedPrintableConvertMode.Default);
                bb = cv.Decode(bb);
            }
            return(bb);
        }
Пример #8
0
        public void Decode()
        {
            string quoted = $"1=0D=0AFirmenstra=C3=9Fe=0D=0AOrt Firma, Bundesland Firma PLZFirma=0D=0ALand={Environment.NewLine} Firma";

            _ = QuotedPrintableConverter.Decode(quoted);
        }
Пример #9
0
        private void Write(Stream stream, SmtpContent content)
        {
            var ct = content;

            ThrowExceptionIfValueIsNull(this.HeaderEncoding, "You must set HeaderEncoding property of SmtpContent object.");
            ThrowExceptionIfValueIsNull(ct.ContentDisposition, "You must set ContentDisposition property of SmtpContent object.");
            ThrowExceptionIfValueIsNull(ct.ContentType, "You must set ContentType property of SmtpContent object.");
            ThrowExceptionIfValueIsNull(ct.ContentType.CharsetEncoding, "You must set CharsetEncoding property of ContentType property of SmtpContent object.");

            foreach (var header in ct.Headers)
            {
                this.WriteHeader(stream, header.Key, header.Value);
            }

            if (ct.ContentType.IsMultipart == true && String.IsNullOrEmpty(ct.ContentType.Boundary) == true)
            {
                ct.ContentType.Boundary = MimeWriter.GenerateBoundary();
            }
            this.WriteEncodedHeader(stream, ct.ContentType);
            this.WriteEncodedHeader(stream, ct.ContentDisposition);

            stream.Write(ByteData.NewLine);

            if (ct.ContentType.IsMultipart == true)
            {
                var boundary = ct.ContentType.CharsetEncoding.GetBytes("--" + ct.ContentType.Boundary + "\r\n");
                for (int i = 0; i < ct.Contents.Count; i++)
                {
                    stream.Write(boundary);

                    Write(stream, ct.Contents[i]);
                }
                stream.Write(ct.ContentType.CharsetEncoding.GetBytes("--" + ct.ContentType.Boundary + "--\r\n"));
            }
            else
            {
                if (ct.ContentType.IsText == true && String.IsNullOrEmpty(ct.BodyText) == false)
                {
                    this.WriteEncodedBodyText(stream, ct.BodyText, ct.ContentTransferEncoding, ct.ContentType.CharsetEncoding, 74);
                }
                else if (ct.BodyData != null)
                {
                    Byte[] bb = null;
                    switch (ct.ContentTransferEncoding)
                    {
                    case TransferEncoding.Base64:
                    {
                        var converter = new Base64Converter(ct.BodyData.Length);
                        bb = converter.Encode(ct.BodyData);
                    }
                    break;

                    case TransferEncoding.QuotedPrintable:
                    {
                        var converter = new QuotedPrintableConverter(ct.BodyData.Length, QuotedPrintableConvertMode.Default);
                        bb = converter.Encode(ct.BodyData);
                    }
                    break;

                    case TransferEncoding.None:
                    case TransferEncoding.SevenBit:
                    case TransferEncoding.EightBit:
                    case TransferEncoding.Binary:
                    default: throw new InvalidOperationException();
                    }
                    stream.Write(bb, 0, bb.Length);
                    stream.Write(ByteData.NewLine);
                }
            }
        }
 public void EncodeStringTest1(string?quoted)
 => Assert.AreEqual(string.Empty, QuotedPrintableConverter.Encode(quoted, 0));
 public void DecodeDataTest1(string?quoted)
 {
     byte[] data = QuotedPrintableConverter.DecodeData(quoted);
     Assert.IsNotNull(data);
     Assert.AreEqual(0, data.Length);
 }
 public void DecodeStringTest2(string?quoted)
 => Assert.IsNull(QuotedPrintableConverter.Decode(quoted));