2022년 2월 12일 토요일

(동영상)C# Gmail SMTP를 이용한 메일발송, SendMail, SmtpClient, NetworkCredential, C#학원, 자바학원, 닷넷학원, WPF학원 SQL학원, 오라클학원

 (동영상)C# Gmail SMTP를 이용한 메일발송, SendMail, SmtpClient, NetworkCredential, C#학원, 자바학원, 닷넷학원, WPF학원 SQL학원, 오라클학원




Gmail SMTP를 이용한 메일발송









Gmail SMTP를 이용한 메일발송


  • Gmail의 SMTP를 이용하여 메일을 보내는 프로그램을 C#으로 간단히 작성해 보자.


  • SMTP(Send Mail Transfer Protocol)은 TCP/IP를 이용해 메일을 보낼 수 있는 프로토콜 이다.
  • 대부분의 SMTP 서버 이름은 "smtp.domain.com"또는 "mail.domain.com"형식으로 작성된다. 예를 들어 Gmail 계정은 smtp.gmail.com로 SMTP 주소를 사용한다.
  • 일반적으로 POP3 또는 IMAP과 같은 다른 프로토콜 중 하나와 함께 사용되어 사용자가 서버 사서함에 메시지를 저장하고 서버에서 주기적으로 다운로드 할 수있게 한다.
  • SMTP 인증 : SMTP AUTH는 SMTP (Simple Mail Transfer Protocol)의 확장 기능으로 SMTP 클라이언트가 SMTP 서버가 지원하는 인증 메커니즘 중에서 선택한 인증 메커니즘을 사용하여 로그인 할 수 있게한다.


SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");

SmtpServer.Port = 587;

SmtpServer.Credentials = new System.Net.NetworkCredential("username", "password");


  • Microsoft .NET 프레임 워크는 응용 프로그램이 인터넷을 통해 데이터를 보내거나 받도록 사용할 수있는 인터넷 프로토콜의 구현을 위한 System.Net 및 System.Net.Sockets 등 두 개의 네임 스페이스를 제공한다.


  • SMTP 프로토콜은 C#에서 전자메일을 보내는데 사용되며 SMTP는 전자 메일을 보내는 데 System.Net.Mail 네임 스페이스를 사용하는 C#의 SmtpClient 클래스를 인스턴스화 하고 호스트와 포트를 할당 할 수 있다. SMTP를 사용하는 기본 포트는 “25”이지만 다를 수 있다.


- 이메일을 구글 계정을 통해 SMTP로 보내고자 할때는 구글에 로그인 후 계정의 설정, 로그인/보안(https://myaccount.google.com/security​) 에서 하단의 "보안수준이 낮은 앱 허용"을 "사용"으로 설정해야 한다.


  

using System.Net;

using System.Net.Mail;

 

namespace Smtp

{

    class Program

    {

        static void Main(string[] args)

        {

            try

            {

                // Credentials

                var credentials = new NetworkCredential("구글계정@gmail.com", "비번");

 

                // Mail message

                var mail = new MailMessage()

                {

                    From = new MailAddress("구글계정@gmail.com"),

                    Subject = "Test email.",

                    Body = "Test email body"

                };

 

                mail.To.Add(new MailAddress("받는사람 이메일주소"));

 

                // Smtp client

                var client = new SmtpClient()

                {

                    Port = 587,

                    DeliveryMethod = SmtpDeliveryMethod.Network,

                    UseDefaultCredentials = false,

                    Host = "smtp.gmail.com",

                    EnableSsl = true,

                    Credentials = credentials

                };

 

                // Send it...         

                client.Send(mail);

            }

            catch (Exception ex)

            {

                Console.WriteLine("Error in sending email: " + ex.Message);

                Console.ReadKey();

                return;

            }

 

            Console.WriteLine("Email sccessfully sent");

            Console.ReadKey();

        }

    }

}




#시샵메일발송, #닷넷메일, #Gmail, #SMTP, #메일발송, #SendMail, #SmtpClient, #NetworkCredential, #닷넷교육, #닷넷강좌, #시샵교육, #시샵동영상, 시샵메일발송, 닷넷메일, Gmail, SMTP, 메일발송, SendMail, SmtpClient, NetworkCredential, 닷넷교육, 닷넷강좌, 시샵교육, 시샵동영상 

2022년 2월 11일 금요일

비주얼스튜디오에서 Github 사용하기, GitHub Extension for Visual Studio, 시샵교육, 시샵동영상, 시샵학원, C#학원, C#교육, C#동영상

 비주얼스튜디오에서 Github 사용하기, GitHub Extension for Visual Studio, 시샵교육, 시샵동영상, 시샵학원, C#학원, C#교육, C#동영상


https://www.youtube.com/watch?v=rZcrIFB0yiE&list=PLxU-iZCqT52DJyR6gqJy0MCL8RiTVXdos&index=1 


http://ojc.asia/bbs/board.php?bo_table=LecCsharp&wr_id=419 


비주얼스튜디오에서 Github 사용하기, GitHub Extension for Visual Studio

비주얼스튜디오에서 Github 사용하기, GitHub Extension for Visual Studio1. Github Extension for Visual Studio 개요GitHub 및 GitHub Enterprise의 리포지토리에 Visual Studio 2015 이상에서 바로 연결할 수 있으며 기존 저장

ojc.asia

 

1. Github Extension for Visual Studio 개요

 

GitHub 및 GitHub Enterprise의 리포지토리에 Visual Studio 2015 이상에서 바로 연결할 수 있으며 기존 저장소(Repository)를 복제하거나 새로운 Repository를 만들고 공동 작업을 할 수 있다.

 

2. Github Extension for Visual Studio 설치

 

https://visualstudio.github.com/ 

 

 

 

물론 Visual Studio를 설치시 Select Option to Customize the install을 선택하여 “GitHub Extension for Visual Studio” 를 체크하여 설치해도 된다.



3. Github에 연결하기 

 

먼저 github.com에 회원가입 되어 있어야 한다.

 

비주얼 스튜디오에서 우측 솔루션 탐색기의 하단에 “팀 탐색기” 탭이 있는데 클릭 후 GitHub에 Connect 하거나 회원가입(Sign Up) 할 수 있다. 아래는 “Connect”를 클릭하여 로그인하는 화면이다.

 

 

 

4. Create a GitHub repository

 

비주얼 스튜디오 팀 탐색기의 “연결”을 클릭 후 GitHub >> Create를 클릭하자.

 

 

Create 링크를 클릭하면 아래 그림과 비슷한 창이 렌더링 되는데 Repository 이름, 설명 및 소스 코드를 저장하려는 로컬 위치를 입력하면 된다. (github.com에 회원가입 되어 있어야 한다.)

 

 

 

자동으로 로컬 레포지터리도 만들어 진다.

 

Github.com에 로그인하면 Repository가 생성되어 있는 것을 확인할 수 있다.

 





5. 생성한 Repository에 프로젝트를 생성하고 C# HelloWorld를 작성하여 GitHub에 올려보자.

 

팀 탐색기에서 상단의 홈 버튼을 클릭하고 아래의 “새로 만들기”를 클릭하자.

 

 

간단히 C# 콘솔 프로젝트를 생성하자.

 

 

[Program.cs 다음과 같이 간단한 코드를 작성하자.]

using System;

namespace ConsoleApp1

{

    class Program

    {

        static void Main(string[] args)

        {

            Console.WriteLine("Hello C#!");

        }

    }

}

 

팀 탐색기에서 “변경내용”을 클릭

 

 

“변경 내용” 버튼을 클릭하면 아래 그림과 같은 페이지로 이동하는데 설명을 입력하고 커밋 버튼을 누른다.

 

 

동기화 클릭

 

동기화 버튼을 클릭하면 페이지가 나타 나는데 푸시 링크를 클릭하여 변경 사항을 동기화 한다.

 



이제 GitHub.com의 csharp1 Repository에 우리의 프로젝트가 올라갔는지 확인하면 된다.

 



6. GitHub의 Repository를 복제(Clone)하여 로컬에 생성하기

 

비주얼 스튜디오를 종료하고 실습을 위해 탐색기를 열어 이전에 로컬 레포지터리(c:\GitHub\csharp1 폴더)를 삭제 후 비주얼 스튜디오를 다시 시작하여 GitHub에 Connect하고 Clone을 선택하자.

 

 

“Clone a GitHub Repository” 창이 열리면 복제를 원하는 Repository를 선택 후 하단의 로컬 레포지터리 경로(C:\GitHub)를 기술후 하단의 Clone 버튼을 클릭한다.

 

 

잠시 후 로컬로 복사되고 비주얼 스튜디오의 솔루션 탐색기에 복제한 솔루션(프로젝트)이 로드된다.

 

 

소스 코드를 수정 후 저장,  GitHub에 Commit 해보자.

 

using System;

namespace ConsoleApp1

{

    class Program

    {

        static void Main(string[] args)

        {

            Console.WriteLine("Hello C#!");

            Console.WriteLine("Hello C#!");

            Console.WriteLine("Hello C#!");

        }

    }

}



팀 탐색기에서 홈 버튼을 클릭 후 “변경 내용” 클릭

 

커멘트를 추가하고 아래의 “모두커밋”을 클릭하자.

다음화면에서 “동기화” 클릭



다음화면에서 “푸시” 선택




#Github, #깃허브, #VS깃허브, #비주얼스튜디오 


https://www.youtube.com/watch?v=tw6SakvHTtA&list=PLxU-iZCqT52DJyR6gqJy0MCL8RiTVXdos&index=21 


https://www.youtube.com/watch?v=-5Wq51be-nc&list=PLxU-iZCqT52DJyR6gqJy0MCL8RiTVXdos&index=20 


C#교육동영상, LINQ 내부조인, 외부조인 내부 JOIN을 메서드 기반으로, C#교육, 자바교육, WPF교육, 자바학원, 스프링교육, JAVA학원, JAVA동영상, 시샵동영상

 C#교육동영상,  LINQ 내부조인, 외부조인  내부 JOIN을 메서드 기반으로, C#교육, 자바교육, WPF교육, 자바학원, 스프링교육, JAVA학원, JAVA동영상, 시샵동영상


http://ojc.asia/bbs/board.php?bo_table=LecCsharp&wr_id=418 


C# LINQ 내부조인, 외부조인 내부 JOIN을 메서드 기반으로

C# LINQ 내부조인, 외부조인 내부 JOIN을 메서드 기반으로LINQ내부조인, 외부조인내부 JOIN을 메서드 기반으로C# LINQ 조인(Join)조인은 두 데이터 소스에서 조인키를 기준으로 일치하는지 비교하여 새

ojc.asia


https://www.youtube.com/watch?v=DaekIbRnM_w&list=PLxU-iZCqT52DJyR6gqJy0MCL8RiTVXdos&index=24
 

LINQ

내부조인, 외부조인

내부 JOIN을 메서드 기반으로






C# LINQ 조인(Join)


조인은 두 데이터 소스에서 조인키를 기준으로 일치하는지 비교하여 새로운 데이터 셋을 만들어 내는 것이다.




1. 내부조인 


내부조인은 교집합과 비슷하며 첫 번째 데이터원본의 특정 필드와 두 번째 데이터원본의 특정 필드를 비교하여 일치하는 데이터만 반환한다. SQL의 Inner Join과 유사하다.


[형식]


from a in 고객

join b in 매출 on a.이름 equals b.이름 

select a


on절의 조인조건은 동등비교(equals)만 가능하다.

조건에 정확히 일치하지 않는 데이터는 빠진다.


2. 외부조인


LINQ는 외부조인 중 왼쪽조인(Left Outer Join)만 지원한다. 먼저 조인절을 이용하여 조인수행 후

결과를 임시 컬렉션에 저장하고 이 임시컬렉션에 대해 DefaultIfEmpty 연산을 수행해서 비어있는 조인결과에 빈 값을 채운다. DefaultIfEmpty 연산을 거친 임시 컬렉션에서 from 절을 통해 변수를 뽑아내고 비 범위변수와 기준데이터 원본에서 뽑아낸 범위변수를 이용하여 결과를 추출한다.


namespace LinkJoin

{

    class Customer

    {

        public string Name { get; set; }

        public int Age { get; set; }

    }


    class Sale

    {

        public string Name { get; set; }

        public string Product { get; set; }

    }


    class Test

    {

        static void Main(string[] args)

        {

            Customer[] customer = {

                new Customer() {Name="홍길동", Age=8},

                new Customer() {Name="김길동",  Age=6},

                new Customer() {Name="오자커",  Age=13}

            };


            Sale[] sale = {

                new Sale() {Name="홍길동", Product="볼펜"},

                new Sale() {Name="김길동", Product="연필"},

            };


            // 고객별 매출현황을 출력

            // 내부조인("오자커"는 매출내역이 없으므로 출력되지 않는다)

            var result1 = from c in customer

                              join s in sale on c.Name equals s.Name

                             select new

                             {

                                Name = c.Name,

                                Age = c.Age,

                                 Product = s.Product

                             };


            foreach (var x in result1)  Console.WriteLine("이름 : {0}, 나이 : {1}, 상품 : {2}", x.Name, x.Age, x.Product);


            //외부조인

            result1 = from c in customer

                         join s in sale on c.Name equals s.Name into tmp

                         from s in tmp.DefaultIfEmpty(new Sale() { Product = "제품없음" })

                         select new

                         {

                             Name = c.Name,

                             Age = c.Age,

                             Product = s.Product

                         };


            Console.WriteLine("------------------------------------------------");

            foreach (var x in result1)

            {

                Console.WriteLine("이름 : {0}, 나이 : {1}, 제품 : {2}", x.Name, x.Age, x.Product);

            }


            // 내부JOIN을 메소드 쿼리식

            int[] arr1 = { 5, 6, 7};

            int[] arr2 = { 6, 7, 10 };


            Console.WriteLine("\n------------------------------------------------");

            // 메소드 기반 쿼리식

            //arr1의 수를 1증가 한값이 arr2와 같은 arr1의 값을 출력

            var res1 = arr1.Join<int, int, int, int>(arr2,

                                                       x => x + 1,   //outer key selector, 조인조건

                                                       y => y,         //inner key selector, 조인조건

                                                       (x, y) => x);   //결과 : 조인을 만족하는 X값을 출력

            foreach (var r in res1) Console.Write(r + " ");


            Console.WriteLine("\n------------------------------------------------");

            //쿼리식 기반

            //arr1의 수를 1증가 한값이 arr2와 같은 arr1의 값을 출력

            var res2 = from x in arr1

                           join y in arr2 on (x + 1) equals y

                          select x;


            foreach (var r in res2) Console.Write(r + " ");

            Console.WriteLine("\n------------------------------------------------");

        }

    }

}




[결과]

이름 : 홍길동, 나이 : 8, 상품 : 볼펜

이름 : 김길동, 나이 : 6, 상품 : 연필

------------------------------------------------

이름 : 홍길동, 나이 : 8, 제품 : 볼펜

이름 : 김길동, 나이 : 6, 제품 : 연필

이름 : 오자커, 나이 : 13, 제품 : 상품없음


-------------

5 6

-------------

5 6

-------------



#LINQ, #내부조인, #외부조인, #LINQJOIN, #LINQ조인, #시샵교육, #시샵동영상, #닷넷교육, #닷넷동영상, #시샵학원, #닷넷학원, LINQ, 내부조인, 외부조인, LINQJOIN, LINQ조인, 시샵교육, 시샵동영상, 닷넷교육, 닷넷동영상, 시샵학원, 닷넷학원,  

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...