using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Runtime.Remoting.Messaging; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; namespace KeficoMailService { public class Manager { public string Host { get; set; } = "https://service.kefico.co.kr"; public readonly string GetFormHTML = "/KEFICO.XML/MAIL/MailManager.asmx"; public readonly string SendMailDetailHTML = "/KEFICO.XML/MAIL/MailManager.asmx"; public string GetFormHtml(HtmlFormType formType) { string result = string.Empty; string url = $"{Host}{GetFormHTML}"; string soapEnvelope = $@" {formType.SystemName} {formType.FormType} "; Console.ForegroundColor = ConsoleColor.DarkYellow; Console.WriteLine($"Request URL: {url}"); Console.WriteLine($"Request soap: {soapEnvelope}"); byte[] data = Encoding.UTF8.GetBytes(soapEnvelope); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; request.ContentType = "application/soap+xml; charset=utf-8"; request.ContentLength = data.Length; using (Stream stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } using (WebResponse response = request.GetResponse()) using (StreamReader reader = new StreamReader(response.GetResponseStream())) { result = reader.ReadToEnd(); //decode XDocument doc = XDocument.Parse(result); XNamespace ns = "http://kefico.co.kr/"; string htmlEncoded = doc.Descendants(ns + "GetFormHTMLResult").First().Value; // HTML Decode result = WebUtility.HtmlDecode(htmlEncoded); result = WebUtility.HtmlDecode(htmlEncoded); Console.ForegroundColor = ConsoleColor.DarkGreen; Console.WriteLine(""); Console.WriteLine("Response"); Console.WriteLine(result); } return result; } public string SendMailDetail(Address from, List
to, List
cc, List
bcc, string subject, string body, MailType type) { string result = string.Empty; string url = $"{Host}{SendMailDetailHTML}"; string soapEnvelope = $@" {from.AddressMail} {from.AddressName} {string.Join("",to.Select(x=> $@"
{x.AddressMail} {x.AddressName}
"))}
{string.Join("",cc.Select(x => $@"
{x.AddressMail} {x.AddressName}
"))}
{string.Join("", bcc.Select(x => $@"
{x.AddressMail} {x.AddressName}
"))}
{subject} {body} {type.ToString()}
"; Console.ForegroundColor = ConsoleColor.DarkYellow; Console.WriteLine(""); Console.WriteLine($"Request URL: {url}"); Console.WriteLine($"Request soap: {soapEnvelope}"); byte[] data = Encoding.UTF8.GetBytes(soapEnvelope); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; request.ContentType = "application/soap+xml; charset=utf-8"; request.ContentLength = data.Length; using (Stream stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } using (WebResponse response = request.GetResponse()) using (StreamReader reader = new StreamReader(response.GetResponseStream())) { result = reader.ReadToEnd(); //decode XDocument doc = XDocument.Parse(result); XNamespace ns = "http://kefico.co.kr/"; string htmlEncoded = doc.Descendants(ns + "SendMailDetailResponse").First().Value; //decode result = WebUtility.HtmlDecode(htmlEncoded); result = WebUtility.HtmlDecode(result); Console.ForegroundColor = ConsoleColor.DarkGreen; Console.WriteLine(""); Console.WriteLine("Response"); Console.WriteLine(result); } return result; } } }