반응형
/* 465 stmps 일떄 메일 전송 테스트 */
//★★★★★★★★★★AIM - 메일 제목 (한글 깨짐) , 메일 내용 (스타일 X)★★★★★★★★★★★★
#region
//UTF-8
//byte[] bytes = Encoding.Default.GetBytes(testSubject);
//testSubject = Encoding.UTF8.GetString(bytes);

//EUC-KR
//byte[] bytes = Encoding.Default.GetBytes(testSubject);
//testSubject = Encoding.GetEncoding(51949).GetString(bytes);

//UTF-32 얘는 깨지네
//byte[] bytes = Encoding.Default.GetBytes(testSubject);
//testSubject = Encoding.UTF32.GetString(bytes);

//인코딩 체크
//var encodingName = mailMessage.SubjectEncoding.BodyName.ToLower();
//string.Format("=?{0}?B?{1}?=", encodingName, Convert.ToBase64String(mailMessage.SubjectEncoding.GetBytes(mailMessage.Subject)));

//mailMessage.Subject = Encoding.GetEncoding(51949).GetString(bytes);
//mailMessage.Subject = Encoding.UTF8.GetString(bytes); //string으로 받아서 보내면 안꺠지지만 바로 쓰면 꺠짐
//mailMessage.Subject = Encoding.GetEncoding(51949).GetString(bytes); //SUbject는 꺠지지 않지만 전송할떄 꺠짐
//mailMessage.Subject = Encoding.UTF32.GetString(bytes) //한글 자체가 깨짐

//subject 인코딩
//mailMessage.SubjectEncoding = System.Text.Encoding.GetEncoding(51949); //ecu-kr
//mailMessage.SubjectEncoding = System.Text.Encoding.UTF8; //UTF-8
//mailMessage.SubjectEncoding = System.Text.Encoding.Default; //Default

//mailMessage.Subject = "메일 제목";
//mailMessage.Body = "메일 내용";

//인코딩 체크
//encodingName = mailMessage.BodyEncoding.BodyName.ToLower();
//string.Format("=?{0}?B?{1}?=", encodingName, Convert.ToBase64String(mailMessage.BodyEncoding.GetBytes(mailMessage.Subject)));

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//var mailMessage = new MimeMailMessage();

//DateTime dateT = DateTime.Now;
//string datePart = dateT.ToString("yyyy-MM-dd hh:mm:ss");

//mailMessage.Subject = "메일 제목";
//mailMessage.Body = "메일 내용";
//mailMessage.IsBodyHtml = true; //html 형식인지 True or false

//var encodingName = mailMessage.BodyEncoding.BodyName.ToLower();
//string.Format("=?{0}?B?{1}?=", encodingName, Convert.ToBase64String(mailMessage.BodyEncoding.GetBytes(mailMessage.Subject)));

//mailMessage.From = new MimeMailAddress("보내는 사람 메일");
//mailMessage.To.Add(new MimeMailAddress("받는 사람 메일"));

//var emailer = new SmtpSocketClient();
//emailer.Host = "smtp host명";
//emailer.Port = Port명;
//emailer.SslType = SslMode.Ssl;
//emailer.User = "smtp 아이디";
//emailer.Password = "smtp 비밀번호";
//emailer.AuthenticationMode = AuthenticationType.Base64;
//emailer.MailMessage = mailMessage;
//emailer.SendMailAsync();
#endregion

//★★★★★★★★★전송 X 465포트는 불가능★★★★★★★★★
//EASendMail
#region
//SmtpMail oMail = new SmtpMail("TryIt");

//DateTime dateT = DateTime.Now;
//string datePart = dateT.ToString("yyyy-MM-dd hh:mm:ss"); //메일 보내는 시간

//oMail.Subject = "메일 제목";
//oMail.TextBody = "메일 내용"; //텍스트로 보내는 body
//oMail.HtmlBody = "메일 내용"; //HTML 코드로 보내는 body

//oMail.From = "보내는 사람 메일";
//oMail.To = "받는 사람 메일";

// Your SMTP server address
//SmtpServer oServer = new SmtpServer(smtpConfig.Network.Host); // smtp Host 명
// User and password for ESMTP authentication
//oServer.User = smtpConfig.Network.UserName; //smtp 아이디
//oServer.Password = smtpConfig.Network.Password; //smtp 비밀번호

// Set SSL 465 port
//oServer.Port = 465; Port 명
// Set direct SSL connection, you can also use ConnectSSLAuto
//oServer.ConnectType = SmtpConnectType.ConnectSSLAuto;
//oServer.AuthType = SmtpAuthType.AuthAuto;

//SmtpClient oSmtp = new SmtpClient();
//oSmtp.SendMail(oServer, oMail);
#endregion

//전송 X
//★★★★★★★★★Chilkat ★★★★★★★★★
#region
//Chilkat.MailMan mailman = new Chilkat.MailMan();

//// Set the SMTP server.
//mailman.SmtpHost = "smtp Host 명";

//// Set SMTP login and password (if necessary)
//mailman.SmtpUsername = "smtp 아이디";
//mailman.SmtpPassword = "smtp 비밀번호";

//mailman.SmtpSsl = true;
//mailman.SmtpPort = 465;

//// Create a new email object
//Chilkat.Email email = new Chilkat.Email();

//email.Subject = "메일 제목";
//email.Body = "메일 내용";
//email.From = "메일 보내는 사람";
//bool success = email.AddTo("받는사람 이름 ", "받는사람 이메일 명");

//success = mailman.SendEmail(email);
//success = mailman.CloseSmtpConnection();
#endregion

//★★★★★★★★★System.Net.Mail의 465 Port Implicit Port는 사용 불가능★★★★★★★★★
#region
//System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient("smtp 호스트 명", 포트번호)
//{
// UseDefaultCredentials = false, // 시스템에 설정된 인증 정보를 사용하지 않는다.
// EnableSsl = true, // SSL을 사용한다.
// DeliveryMethod = SmtpDeliveryMethod.Network, // 이걸 하지 않으면 Gmail에 인증을 받지 못한다.
// Credentials = new System.Net.NetworkCredential("Smtp 아이디 ", "Smtp 비밀번호"),
// Timeout = 10000
//};

//MailAddress from = new MailAddress("보내는 사람 메일", "보내는 사람 이름", System.Text.Encoding.UTF8);
//MailAddress to = new MailAddress("받는 사람 메일");

//MailMessage message = new MailMessage(from, to);

//message.Body = "내용";
//string someArrows = new string(new char[] { '\u2190', '\u2191', '\u2192', '\u2193' });
//message.Body += Environment.NewLine + someArrows;
//message.BodyEncoding = System.Text.Encoding.UTF8;
//message.Subject = "test message 2" + someArrows;
//message.SubjectEncoding = System.Text.Encoding.UTF8;

//client.Send(message);

//message.Dispose();
#endregion

//★★★★★★★★★System.Web.Mail 지원 X★★★★★★★★★
#region
//System.Web.Mail.MailMessage msg = new System.Web.Mail.MailMessage();

//msg.Body = "Test is good";
//msg.Subject = "Test mail";
//msg.To = "보내는 사람 메일";
//msg.From = "받는 사람 메일";

//int cdoBasic = 1;

//msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", true);
//msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", 465);
//msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", cdoBasic);
//msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "...[다음_사용자_계정]...");
//msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "...[다음_사용자_암호]...");

//SmtpMail.SmtpServer = "smtp.daum.net";
//SmtpMail.Send(msg);

==정리==
결국 smtps로 보내는 로직은 실패 하였다.
AIM을 써서 성공은 하였지만 제목에는 한글이 인코딩을 해도 안들어가고
body에는 html로 스타일을 지정하였지만 텍스트로만 들어간다.

개발자 사이트 까지 뒤져가면서 확인했지만 2018년에 스타일 추가하는 로직 넣어서 수정한다고 하였는데
글을 적는 현재까지 수정이 되지 않아서 버리고 smtp 서버를 다시 요청하였다.

진짜 개 쉣더 뻑인거 같다 smtps...

반응형

톱니바퀴를 누릅니다.
누겟 이름과 소스(URL)을 입력합니다.
SELECT BOX에서 방금 설정한 NUGET을 클릭 후 검색을 합니다. 끝

반응형

Oracle.ManagedDataAccess.Client를 사용한 예제 입니다.

using Oracle.ManagedDataAccess.Client;

namespace DB_Data
{
	public class DB_Connection_Test
	{
		DataTable dt = new DataTable();
		DataSet ds = new DataSet();

		public string DB_Test_haha()
		{
			string con_str = "User ID= 디비아이디;Password=디비 비밀번호;pooling=false;Data Source=(DESCRIPTION=";
			con_str += "(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=아이피)(PORT=포트번호)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=서비스이름ORCL ETC..)));";

			OracleConnection conn = new OracleConnection(con_str); //DB 커넥션 객체 생성
			conn.Open(); //DB 오픈

			OracleDataAdapter oda = new OracleDataAdapter(sqlstr, conn); //쿼리 보내고 받기
			oda.Fill(dt); //데이터 테이블에 데이터 넣기 (DataSet도 가능)

			conn.Close(); //디비 종료

			return strJsonData;
		}
	}
}
반응형
string _SendUrl = "";
string _GetUrl = "";
bool _isMssiExit = true;
bool _isImoExit = true;

Thread thread = new Thread(new ThreadStart(GetWebPageWorker));
Thread thread2 = new Thread(new ThreadStart(GetWebPageWorker));

_SendUrl = ""; //초기화
_GetUrl = "";  //초기화

_SendUrl = "URL링크"
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();

//Wating Thread
while(_isMssiExit)
{
	if (_GetUrl.IndexOf("shipid:") > -1)
	{
		_isMssiExit = false;
		thread.Abort();
	}
	else if (_GetUrl == _SendUrl)
	{
		thread.Abort();

		_SendUrl = "URL링크"
		thread2.SetApartmentState(ApartmentState.STA);
		thread2.Start();
		thread2.Join();

		while (_isImoExit)
		{
			if(_GetUrl.IndexOf("shipid:") > -1)
			{
				_isMssiExit = false;
				_isImoExit = false;
				thread2.Abort();
			}
			else if (_GetUrl == _SendUrl)
			{
				throw new ArgumentNullException("오류");
			}
		}
	}
}

//URL 가져오는 함수
protected void GetWebPageWorker()
{
	using (WebBrowser browser = new WebBrowser())
	{
		//  browser.ClientSize = new Size(_width, _height);
		browser.ScrollBarsEnabled = false;
		browser.ScriptErrorsSuppressed = true;
		browser.Navigate(_SendUrl);

		// Wait for control to load page
		while (browser.ReadyState != WebBrowserReadyState.Complete)
		Application.DoEvents();

		_GetUrl = browser.Url.AbsoluteUri; //Redirct 한 URL
	}
}
반응형
//Youtube Rss Atom형식의 XML을 파싱하는 소스
using(XmlTextReader rssReader = new XmlTextReader("Youtube URl")) 
{ 
	XmlDocument xmlDoc = new XmlDocument(); //XML 객체 생성      
	xmlDoc.Load(rssReader); //URL Load

	//Select all nodes starting with "entry"
	XmlNodeList xmlNodeList = xmlDoc.GetElementsByTagName("entry"); //XML에 entry태그의 데이터를 전부 가지고 와서 List로 만들어준다.

	//각각의 노드로 만들어서 반복문을 돌린다.
	foreach(XmlNode node in xmlNodeList) 
	{ 	
		XmlDocument innerXmlDocument = new XmlDocument(); //내부 객체를 파싱하기 위한 XmlDocument를 생성한다.
		innerXmlDocument.LoadXml(node.OuterXml); //entry 노드의 데이터를 파싱한다.

		//innerXmlDocument.GetElementsByTagName("media:title")[0].InnerText => XML 태그의 텍스트를 전부 가지고 온다.
		//innerXmlDocument.GetElementsByTagName("media:thumbnail")[0].Attributes["url"].Value 태그 안에 있는 속성의 값만 가지고 온다.

		string vYoutube_URL = innerXmlDocument.GetElementsByTagName("link")[0].Attributes["href"].Value;
		string vThumbnail_URL innerXmlDocument.GetElementsByTagName("media:thumbnail")[0].Attributes["url"].Value;
		string vTitle = innerXmlDocument.GetElementsByTagName("media:title")[0].InnerText;
		string vDescription = innerXmlDocument.GetElementsByTagName("media:description")[0].InnerText;
	}
}
반응형
using (ZipFile zip = new ZipFile())
{
    DirectoryInfo dir = new DirectoryInfo(Server.MapPath(압축 할 파일 경로);
    FileInfo[] infos = dir.GetFiles();
    string[] files1 = new string[infos.Length];

    for (int i = 0; i < infos.Length; i++)
    {
        files1[i] = infos[i].FullName;
    }

    byte[] b = null;
    string d = null;

    foreach (string file in files1)
    {
        // 시스템의 기본 인코딩 타입으로 읽어서
        b = System.Text.Encoding.Default.GetBytes(file);
        // IBM437로 변환해 준다.
        d = System.Text.Encoding.GetEncoding("IBM437").GetString(b);

        zip.AddEntry(d, "", System.IO.File.ReadAllBytes(file));
    }

    zip.Save(압축 파일 경로 및 압축 파일명.);
}
반응형
string path = Server.MapPath("~/")+"\\" + DateTime.Now.ToString("yyyyMMdd");

//현재 날짜 파일 생성
DirectoryInfo di = new DirectoryInfo(path); //폴더 관련 객체
if (di.Exists != true)
{
	di.Create();
}

//압축 파일 넣을 경로 생성
string strDateTimeDi = DateTime.Now.ToString("yyyyMMddHHmmssFFF");
di.Refresh();

path += "/"+strDateTimeDi;

di = new DirectoryInfo(path);
if (di.Exists != true)
{
	di.Create();
}

//압축 만들기
using (ZipFile zip = new ZipFile())
{     
    zip.AddDirectory(폴더 경로);
    zip.Save("압축 파일 만들 경로 및 압축파일 명.");
}
반응형
//시트 한가지만 사용할 경우
using (ExcelPackage pck = new ExcelPackage())
{
	ExcelWorksheet workSheet = pck.Workbook.Worksheets.Add(ds.Tables["데이터테이블명"].TableName);
	workSheet.Cells["A1"].LoadFromDataTable(ds.Tables["데이터테이블명"], true);

	pck.SaveAs(new FileInfo(strRealPath));
}

//시트 여러개 사용할 경우
private static void DataSetToExcel(DataSet dataSet, string filePath)
{
	using (ExcelPackage pck = new ExcelPackage())
	{
		foreach (DataTable dataTable in dataSet.Tables)
		{
			ExcelWorksheet workSheet = pck.Workbook.Worksheets.Add(dataTable.TableName);
			workSheet.Cells["A1"].LoadFromDataTable(dataTable, true);
		}

		pck.SaveAs(new FileInfo(filePath));
	}
}

//EPPlus를 사용 한 것 입니다.

대략 1만개의 row를 15초 정도로 속도 줄여줍니다. 퍼포먼스 좋습니다.

 

 

 

 

+ Recent posts