Exemplo n.º 1
0
        public void EncodeToStreamDecode()
        {
            var partField = getDefaultField();
            var partFile  = getDefaultFile();

            var stream = new MemoryStream();

            stream.WriteByte(0xFF);
            stream.WriteByte(0xFF);

            var mpE = new Multipart(new Multipart.Part[] { partField, partFile });
            var enc = mpE.Encode(stream);

            Assert.AreEqual(enc.StartIdx, 2);

            var src = new byte[enc.Length];

            Array.Copy(enc.Buffer, enc.StartIdx, src, 0, src.Length);

            string boundary = null;
            var    mpD      = Multipart.ReadFromBytes(src, ref boundary);

            Assert.AreEqual(enc.Boundary, boundary);
            Assert.AreEqual(partField.Content.AsString(), mpD.Parts[partField.Name].Content.AsString());
            Assert.IsNull(mpD.Parts[partField.Name].ContentType);
            Assert.IsNull(mpD.Parts[partField.Name].FileName);
            Assert.AreEqual(partFile.FileName, mpD.Parts[partFile.Name].FileName);
            Assert.AreEqual(partFile.ContentType, mpD.Parts[partFile.Name].ContentType);
            Assert.IsTrue(IOMiscUtils.MemBufferEquals(partFile.Content as byte[], mpD.Parts[partFile.Name].Content as byte[]));
        }
Exemplo n.º 2
0
        public void EncodeDecode_OneFile()
        {
            var part = getDefaultFile();

            var mpE     = new Multipart(new Multipart.Part[] { part });
            var encCont = mpE.Encode();

            string boundary = null;
            var    mpD      = Multipart.ReadFromBytes(encCont.Buffer, ref boundary);

            Assert.AreEqual(encCont.Boundary, boundary);
            Assert.AreEqual(1, mpD.Parts.Count);
            Assert.IsTrue(IOMiscUtils.MemBufferEquals(part.Content as byte[], mpD.Parts[part.Name].Content as byte[]));
            Assert.AreEqual(part.FileName, mpD.Parts[part.Name].FileName);
            Assert.AreEqual(part.ContentType, mpD.Parts[part.Name].ContentType);
        }
Exemplo n.º 3
0
        public void EncodeDecode_OneField()
        {
            var part = getDefaultField();

            var mpE     = new Multipart(new Multipart.Part[] { part });
            var encCont = mpE.Encode();

            string boundary = null;
            var    mpD      = Multipart.ReadFromBytes(encCont.Buffer, ref boundary);

            Assert.AreEqual(encCont.Boundary, boundary);
            Assert.AreEqual(1, mpD.Parts.Count);
            Assert.AreEqual(part.Content.AsString(), mpD.Parts[part.Name].Content.AsString());
            Assert.IsNull(mpD.Parts[part.Name].ContentType);
            Assert.IsNull(mpD.Parts[part.Name].FileName);
        }
Exemplo n.º 4
0
        public void MissCharset1251()
        {
            var part = new Multipart.Part("field");

            part.FileName    = "text";
            part.ContentType = "Content-type: text/plain";
            part.Content     = Encoding.GetEncoding(1251).GetBytes("Значение");

            var mpE = new Multipart(new Multipart.Part[] { part });
            var enc = mpE.Encode();

            var boundary = enc.Boundary;
            var mpD      = Multipart.ReadFromBytes(enc.Buffer, ref boundary);

            Assert.AreNotEqual("Значение", mpD.Parts["field"].Content);
        }
Exemplo n.º 5
0
        public void WithoutCharset()
        {
            var part = new Multipart.Part("field");

            part.FileName    = "text";
            part.ContentType = "Content-type: text/plain";
            part.Content     = Encoding.UTF8.GetBytes("Значение of the word is გთხოვთ Οὐχὶ");

            var mpE = new Multipart(new Multipart.Part[] { part });
            var enc = mpE.Encode();

            var boundary = enc.Boundary;
            var mpD      = Multipart.ReadFromBytes(enc.Buffer, ref boundary);

            Aver.AreObjectsEqual("Значение of the word is გთხოვთ Οὐχὶ", mpD.Parts["field"].Content);
        }
Exemplo n.º 6
0
        public void EncodeDecode_OneField_Enc1251()
        {
            var encoding = Encoding.GetEncoding(1251);
            var part     = new Multipart.Part("Field");

            part.Content = "Значение";

            var mpE     = new Multipart(new Multipart.Part[] { part });
            var encCont = mpE.Encode(encoding);

            string boundary = null;
            var    mpD      = Multipart.ReadFromBytes(encCont.Buffer, ref boundary, encoding);

            Assert.AreEqual(encCont.Boundary, boundary);
            Assert.AreEqual(encCont.Encoding, encoding);
            Assert.AreEqual(1, mpD.Parts.Count);
            Assert.AreEqual(part.Content.AsString(), mpD.Parts[part.Name].Content.AsString());
            Assert.IsNull(mpD.Parts[part.Name].ContentType);
            Assert.IsNull(mpD.Parts[part.Name].FileName);
        }
Exemplo n.º 7
0
        public void EncodeDecode_OneField_UTF8()
        {
            var encoding = Encoding.UTF8;
            var part     = new Multipart.Part("Field");

            part.Content = "Значение of the word is გთხოვთ ახლავე Οὐχὶ ταὐτὰ παρίσταταί μοι";

            var mpE     = new Multipart(new Multipart.Part[] { part });
            var encCont = mpE.Encode(encoding);

            string boundary = null;
            var    mpD      = Multipart.ReadFromBytes(encCont.Buffer, ref boundary, encoding);

            Aver.AreEqual(encCont.Boundary, boundary);
            Aver.AreObjectsEqual(encCont.Encoding, encoding);
            Aver.AreEqual(1, mpD.Parts.Count);
            Aver.AreEqual(part.Content.AsString(), mpD.Parts[part.Name].Content.AsString());
            Aver.IsNull(mpD.Parts[part.Name].ContentType);
            Aver.IsNull(mpD.Parts[part.Name].FileName);
        }
Exemplo n.º 8
0
        public void EncodeDecode_FieldAndFile()
        {
            var partField = getDefaultField();
            var partFile  = getDefaultFile();

            var mpE     = new Multipart(new Multipart.Part[] { partField, partFile });
            var encCont = mpE.Encode();

            string boundary = null;
            var    mpD      = Multipart.ReadFromBytes(encCont.Buffer, ref boundary);

            Assert.AreEqual(encCont.Boundary, boundary);
            Assert.AreEqual(2, mpD.Parts.Count);

            Assert.AreEqual(partField.Content.AsString(), mpD.Parts[partField.Name].Content.AsString());
            Assert.IsNull(mpD.Parts[partField.Name].ContentType);
            Assert.IsNull(mpD.Parts[partField.Name].FileName);
            Assert.AreEqual(partFile.FileName, mpD.Parts[partFile.Name].FileName);
            Assert.AreEqual(partFile.ContentType, mpD.Parts[partFile.Name].ContentType);
            Assert.IsTrue(IOMiscUtils.MemBufferEquals(partFile.Content as byte[], mpD.Parts[partFile.Name].Content as byte[]));
        }
Exemplo n.º 9
0
        //private void doSendWithoutAttachments(Message msg, MessageAddresses addresses)
        //{
        //  var request = new WebClient.RequestParams(this)
        //  {
        //    Method = HTTPRequestMethod.POST,
        //    BodyParameters = new Dictionary<string, string>()
        //  };

        //  var auth = new HttpBasicAuthenticationHelper(API_USER_NAME, AuthorizationKey);
        //  auth.AddAuthHeader(ref request);

        //  addParameter(request.BodyParameters, MAIL_PARAM_FROM, addresses.From);
        //  addParameter(request.BodyParameters, MAIL_PARAM_TO, addresses.To);

        //  if (addresses.CC.IsNotNullOrWhiteSpace())
        //      addParameter(request.BodyParameters, MAIL_PARAM_CC, addresses.CC);

        //  if (addresses.BCC.IsNotNullOrWhiteSpace())
        //    addParameter(request.BodyParameters, MAIL_PARAM_BCC, addresses.BCC);

        //  if (addresses.ReplyTo.IsNotNullOrWhiteSpace())
        //    addParameter(request.BodyParameters, MAIL_PARAM_REPLY_TO, addresses.ReplyTo);

        //  if (msg.Subject.IsNotNullOrWhiteSpace())
        //    addParameter(request.BodyParameters, MAIL_PARAM_SUBJECT, msg.Subject);

        //  if (msg.Body.IsNotNullOrWhiteSpace())
        //    addParameter(request.BodyParameters, MAIL_PARAM_TEXT, msg.Body);

        //  if (msg.RichBody.IsNotNullOrWhiteSpace())
        //    addParameter(request.BodyParameters, MAIL_PARAM_HTML, msg.RichBody);

        //  if (TestMode)
        //    request.BodyParameters.Add(API_PARAM_TESTMODE, "yes");

        //  WebClient.GetString(ServiceUrl, request);
        //}

        private void doSendMultipart(Message msg, MessageAddresses addresses)
        {
            Multipart.Part part;

            var parts = new List <Multipart.Part>();

            part = new Multipart.Part(MAIL_PARAM_FROM)
            {
                ContentType = ContentType.TEXT,
                Content     = addresses.From
            };
            parts.Add(part);

            part = new Multipart.Part(MAIL_PARAM_TO)
            {
                ContentType = ContentType.TEXT,
                Content     = addresses.To
            };
            parts.Add(part);

            if (addresses.CC.IsNotNullOrWhiteSpace())
            {
                part = new Multipart.Part(MAIL_PARAM_CC)
                {
                    ContentType = ContentType.TEXT,
                    Content     = addresses.CC
                };
                parts.Add(part);
            }

            if (addresses.BCC.IsNotNullOrWhiteSpace())
            {
                part = new Multipart.Part(MAIL_PARAM_BCC)
                {
                    ContentType = ContentType.TEXT,
                    Content     = addresses.BCC
                };
                parts.Add(part);
            }

            if (addresses.ReplyTo.IsNotNullOrWhiteSpace())
            {
                part = new Multipart.Part(MAIL_PARAM_REPLY_TO)
                {
                    ContentType = ContentType.TEXT,
                    Content     = addresses.ReplyTo
                };
                parts.Add(part);
            }

            part = new Multipart.Part(MAIL_PARAM_SUBJECT)
            {
                ContentType = ContentType.TEXT,
                Content     = msg.Subject
            };
            parts.Add(part);

            part = new Multipart.Part(MAIL_PARAM_TEXT)
            {
                ContentType = ContentType.TEXT,
                Content     = msg.Body
            };
            parts.Add(part);

            part = new Multipart.Part(MAIL_PARAM_HTML)
            {
                ContentType = ContentType.HTML,
                Content     = msg.RichBody
            };
            parts.Add(part);

            if (TestMode)
            {
                part = new Multipart.Part(API_PARAM_TESTMODE)
                {
                    ContentType = ContentType.TEXT,
                    Content     = "yes"
                };
                parts.Add(part);
            }

            if (msg.Attachments != null)
            {
                foreach (var attachment in msg.Attachments.Where(a => a.Content != null))
                {
                    part = new Multipart.Part(MAIL_PARAM_ATTACHMENT)
                    {
                        ContentType = attachment.ContentType,
                        Content     = attachment.Content,
                        FileName    = attachment.Name
                    };
                    parts.Add(part);
                }
            }

            var mp  = new Multipart(parts);
            var enc = mp.Encode();

            var req = WebRequest.CreateHttp(ServiceUrl);

            req.Method        = "POST";
            req.ContentType   = ContentType.FORM_MULTIPART_ENCODED_BOUNDARY.Args(enc.Boundary);
            req.ContentLength = enc.Length;
            var auth = new HttpBasicAuthenticationHelper(API_USER_NAME, AuthorizationKey);

            auth.AddAuthHeader(req);

            using (var reqs = req.GetRequestStream())
            {
                reqs.Write(enc.Buffer, 0, (int)enc.Length);
                using (var resp = req.GetResponse()) { }
            }
        }