예제 #1
0
        public static MessageAddresses ParseAddresses(ISequence <String> addresses)
        {
            MessageAddresses lAddresses = new MessageAddresses();

            foreach (String address in addresses)
            {
                lAddresses.Add(MessageAddress.ParseAddress(address));
            }

            return(lAddresses);
        }
예제 #2
0
        private static void EnlistMailAddresses(IList <String> destination, MessageAddresses addresses)
        {
            for (Int32 i = 0; i < addresses.Count; i++)
            {
                String lAddress = addresses[i].Address;

                if (String.IsNullOrEmpty(lAddress) || destination.Contains(lAddress))
                {
                    continue;
                }

                destination.Add(lAddress);
            }
        }
예제 #3
0
        /// <summary>
        /// MessageSink DoSendMsg implementation
        /// </summary>
        /// <param name="msg">Message</param>
        protected override bool DoSendMsg(Message msg)
        {
            if (msg == null || !msg.AddressToBuilder.All.Any())
            {
                return(false);
            }

            var sent = false;

            try
            {
                var addresses = new MessageAddresses();

                var addressFrom = msg.AddressFromBuilder.GetFirstOrDefaultMatchForChannels(SupportedChannelNames);
                addresses.From = addressFrom.Assigned ? fmtEmail(addressFrom.Name, addressFrom.ChannelAddress)
                                              : fmtEmail(DefaultFromName, DefaultFromAddress);

                var addressTo = msg.AddressToBuilder.GetMatchesForChannels(SupportedChannelNames).ToList();
                addresses.To = string.Join(", ", addressTo.Select(a => fmtEmail(a.Name, a.ChannelAddress)).ToArray());

                var addressCC = msg.AddressCCBuilder.GetMatchesForChannels(SupportedChannelNames);
                addresses.CC = string.Join(", ", addressCC.Select(a => fmtEmail(a.Name, a.ChannelAddress)).ToArray());

                var addressBCC = msg.AddressBCCBuilder.GetMatchesForChannels(SupportedChannelNames);
                addresses.BCC = string.Join(", ", addressBCC.Select(a => fmtEmail(a.Name, a.ChannelAddress)).ToArray());

                var addressReplyTo = msg.AddressReplyToBuilder.GetMatchesForChannels(SupportedChannelNames);
                addresses.ReplyTo = string.Join(", ", addressReplyTo.Select(a => fmtEmail(a.Name, a.ChannelAddress)).ToArray());

                //20170921 opan, dkh: fix too long content for Uri encoding - switch to multipart
                //if (msg.Attachments == null)
                //  doSendWithoutAttachments(msg, addresses);
                //else
                doSendMultipart(msg, addresses);
                sent = true;
            }
            catch (Exception error)
            {
                var et = error.ToMessageWithType();
                Log(MessageType.Error, "{0}.DoSendMsg(msg): {1}".Args(this.GetType().FullName, et), et);
            }

            return(sent);
        }
예제 #4
0
        private static void EnlistMailAddresses(IList<String> destination, MessageAddresses addresses)
        {
            for (Int32 i = 0; i < addresses.Count; i++)
            {
                String lAddress = addresses[i].Address;

                if (String.IsNullOrEmpty(lAddress) || destination.Contains(lAddress))
                    continue;

                destination.Add(lAddress);
            }
        }
예제 #5
0
		private void SetAddresses(MessageAddresses address, String names)
		{
			String[] lAddresses = names.Split(';');

			for (Int32 i = 0; i < lAddresses.Length; i++)
				address.Add(lAddresses[i].Trim());
		}
예제 #6
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()) { }
            }
        }
예제 #7
0
 private static MessageAddresses ParseAddresses(String input)
 {
     return(MessageAddresses.ParseAddresses(Utility.SplitStringWithCharNotInsideQuotes(input, ',')));
 }