-
응용 프로그램에서 SMTP(Simple Mail Transfer Protocol)를 사용하여 전자 메일을 보낼 수 있도록 합니다.
어셈블리: System(System.dll)SmtpClient 형식에서는 다음과 같은 멤버를 노출합니다.
이름 설명 SmtpClient() 구성 파일 설정을 사용하여 SmtpClient 클래스의 새 인스턴스를 초기화합니다. SmtpClient(String) 지정된 SMTP 서버를 사용하여 전자 메일을 보내는 SmtpClient 클래스의 새 인스턴스를 초기화합니다. SmtpClient(String, Int32) 지정된 SMTP 서버 및 포트를 사용하여 전자 메일을 보내는 SmtpClient 클래스의 새 인스턴스를 초기화합니다. 이름 설명 ClientCertificates SSL(Secure Sockets Layer) 연결을 설정하는 데 사용할 인증서를 지정합니다. Credentials 보낸 사람을 인증하는 데 사용되는 자격 증명을 가져오거나 설정합니다. DeliveryMethod 보내는 전자 메일 메시지의 처리 방법을 지정합니다. EnableSsl SmtpClient에서 SSL(Secure Sockets Layer)을 사용하여 연결을 암호화할지 여부를 지정합니다. Host SMTP 트랜잭션에 사용되는 호스트의 이름 또는 IP 주소를 가져오거나 설정합니다. PickupDirectoryLocation 응용 프로그램이 로컬 SMTP 서버에서 처리할 메일 메시지를 저장하는 폴더를 가져오거나 설정합니다. Port SMTP 트랜잭션에 사용되는 포트를 가져오거나 설정합니다. ServicePoint 전자 메일 메시지를 전송하는 데 사용되는 네트워크 연결을 가져옵니다. TargetName 확장 보호를 사용하는 경우 인증에 사용할 SPN(서비스 공급자 이름)을 가져오거나 설정합니다. Timeout 동기 Send 호출이 완료되어야 하는 제한 시간을 지정하는 값을 가져오거나 설정합니다. UseDefaultCredentials 요청에 DefaultCredentials를 보낼지 여부를 제어하는 Boolean 값을 가져오거나 설정합니다. 이름 설명 Dispose() QUIT 메시지를 SMTP 서버에 보내고, TCP 연결을 정상적으로 종료하고, SmtpClient 클래스의 현재 인스턴스가 사용하는 모든 리소스를 해제합니다. Dispose(Boolean) QUIT 메시지를 SMTP 서버에 보내고, TCP 연결을 정상적으로 종료하고, SmtpClient 클래스의 현재 인스턴스가 사용하는 모든 리소스를 해제하고, 관리되는 리소스를 선택적으로 삭제합니다. Equals(Object) 지정한 Object가 현재 Object와 같은지 여부를 확인합니다. (Object에서 상속됨) Finalize 가비지 수집에서 회수하기 전에 개체에서 리소스를 해제하고 다른 정리 작업을 수행할 수 있게 합니다. (Object에서 상속됨) GetHashCode 특정 형식에 대한 해시 함수 역할을 합니다. (Object에서 상속됨) GetType 현재 인스턴스의 Type을 가져옵니다. (Object에서 상속됨) MemberwiseClone 현재 Object의 단순 복사본을 만듭니다. (Object에서 상속됨) OnSendCompleted SendCompleted 이벤트를 발생시킵니다. Send(MailMessage) 배달용 SMTP 서버로 지정된 메시지를 보냅니다. Send(String, String, String, String) 배달용 SMTP 서버로 지정된 전자 메일 메시지를 보냅니다. 메시지의 보낸 사람, 받는 사람, 제목 및 메시지 본문은 String 개체를 사용하여 지정됩니다. SendAsync(MailMessage, Object) 배달용 SMTP 서버로 지정된 전자 메일 메시지를 보냅니다. 이 메서드는 호출 스레드를 차단하지 않으며 작업이 완료될 때 호출된 메서드에 호출자가 개체를 전달하도록 허용합니다. SendAsync(String, String, String, String, Object) 배달용 SMTP 서버로 전자 메일 메시지를 보냅니다. 메시지의 보낸 사람, 받는 사람, 제목 및 메시지 본문은 String 개체를 사용하여 지정됩니다. 이 메서드는 호출 스레드를 차단하지 않으며 작업이 완료될 때 호출된 메서드에 호출자가 개체를 전달하도록 허용합니다. SendAsyncCancel 전자 메일 메시지를 보내기 위한 비동기 작업을 취소합니다. ToString 현재 개체를 나타내는 문자열을 반환합니다. (Object에서 상속됨) SmtpClient 클래스는 배달용 SMTP 서버로 전자 메일을 보내는 데 사용됩니다. SMTP 프로토콜의 정의에 대해서는 http://www.ietf.org의 RFC 2821을 참조하십시오.
다음 표에서 보여 주는 클래스는 SmtpClient를 사용하여 보낼 수 있는 전자 메일 메시지를 생성하는 데 사용됩니다.
클래스
설명
첨부 파일을 나타냅니다. 이 클래스를 사용하면 전자 메일 메시지에 파일, 스트림 또는 텍스트를 첨부할 수 있습니다.
보낸 사람 및 받는 사람의 전자 메일 주소를 나타냅니다.
전자 메일 메시지를 나타냅니다.
SmtpClient를 사용하여 전자 메일 메시지를 생성하고 보내려면 다음 정보를 지정해야 합니다.
인증을 위한 자격 증명(SMTP 서버에서 요청하는 경우). Credentials 속성을 참조하십시오.
보낸 사람의 전자 메일 주소. from 매개 변수를 사용하는 Send 및 SendAsync 메서드를 참조하십시오. 또한 MailMessage::From 속성을 참조하십시오.
받는 사람의 전자 메일 주소. recipient 매개 변수를 사용하는 Send 및 SendAsync 메서드를 참조하십시오. 또한 MailMessage::To 속성을 참조하십시오.
메시지 내용. body 매개 변수를 사용하는 Send 및 SendAsync 메서드를 참조하십시오. 또한 MailMessage::Body 속성을 참조하십시오.
전자 메일 메시지에 첨부 파일을 포함하려면 먼저 Attachment 클래스를 사용하여 첨부 파일을 만든 다음 MailMessage::Attachments 속성을 사용하여 메시지에 추가합니다. 받는 사람이 사용하는 전자 메일 프로그램과 첨부 파일 형식에 따라 일부 경우에는 받는 사람이 첨부 파일을 읽지 못할 수도 있습니다. 첨부 파일을 원래 형식으로 표시할 수 없는 클라이언트를 위해 MailMessage::AlternateViews 속성을 사용하여 대체 보기를 지정할 수 있습니다.
응용 프로그램 또는 컴퓨터 구성 파일을 사용하여 모든 SmtpClient 개체에 대한 기본 호스트, 포트 및 자격 증명 값을 지정할 수 있습니다. 자세한 내용은 <mailSettings> 요소(네트워크 설정)을 참조하십시오.
전자 메일 메시지를 보내고 SMTP 서버로 전자 메일이 전송될 때까지 기다리는 동안 작업을 차단하려면 동기 Send 메서드 중 하나를 사용합니다. 전자 메일이 전송되는 동안 프로그램의 주 스레드에서 실행을 계속할 수 있도록 하려면 비동기 SendAsync 메서드 중 하나를 사용합니다. SendAsync 작업이 완료되면 SendCompleted 이벤트가 발생합니다. 이 이벤트를 받으려면 SendCompleted에 SendCompletedEventHandler 대리자를 추가해야 합니다. SendCompletedEventHandler 대리자는 SendCompleted 이벤트의 알림을 처리하는 콜백 메서드를 참조해야 합니다. 비동기 전자 메일 전송을 취소하려면 SendAsyncCancel 메서드를 사용합니다.
전자 메일 전송이 진행되는 동안 SendAsync 또는 Send를 다시 호출하면 InvalidOperationException이 발생합니다.
SMTP 서버에 대해 SmtpClient 클래스의 현재 인스턴스에 의해 설정된 연결은 응용 프로그램이 같은 SMTP 서버에 여러 메시지를 보내려는 경우 다시 사용할 수 있습니다. 이는 특히 인증 또는 암호화가 SMTP 서버에 대한 인증을 설정하는 데 사용될 때 유용합니다. TLS 세션을 인증하고 설정하는 프로세스는 값비싼 작업이 될 수 있습니다. 같은 SMTP 서버에 많은 수량의 전자 메일을 보낼 때 각 메시지에 대한 연결을 다시 설정하는 요구 사항은 성능에서 중요한 영향을 미칠 수 있습니다. 전자 메일 상태 업데이트, 회보 배포 또는 전자 메일 경고를 보내는 많은 양의 전자 메일 응용 프로그램이 있습니다. 또한 많은 전자 메일 클라이언트 응용 프로그램은 사용자가 SMTP 서버에 대한 연결이 설정될 때 나중에 보내는 많은 전자 메일 메시지를 작성할 수 있는 오프라인 모드를 지원합니다. 전자 메일 클라이언트가 모든 SMTP 메시지를 특정 SMTP 서버(인터넷 서비스 공급자가 제공)로 보낸 다음 이 전자 메일을 다른 SMTP 서버로 전달하는 것이 일반적입니다.
SmtpClient 클래스 구현은 모든 메시지에 대한 연결을 같은 서버로 다시 설정하는 오버헤드를 피할 수 있도록 SMTP 연결을 풀링합니다. 응용 프로그램은 같은 SmtpClient 개체를 다시 사용하여 여러 개의 다른 전자 메일을 같은 SMTP 서버 및 여러 개의 다른 SMTP 서버로 보낼 수 있습니다. 결과적으로 SmtpClient 개체를 사용하여 응용 프로그램을 완료하고 정리해야 하는 시간을 확인할 방법이 없습니다.
SMTP 세션이 완료되고 클라이언트가 연결을 종료하기를 원하면 QUIT 메시지를 서버로 보내 더 이상 보낼 메시지가 없음을 나타내야 합니다. 따라서 서버는 클라이언트에서 연결과 관련된 리소스를 해제하고 클라이언트가 보낸 메시지를 처리할 수 있습니다.
SmtpClient 클래스에는 Finalize 메서드가 없으므로 Dispose를 호출하여 응용 프로그램에서 명시적으로 리소스를 늘려야 합니다. Dispose 메서드는 모든 설정된 연결을 통해 Host 속성에 지정된 SMTP 서버에 반복하고 QUIT 메시지를 보낸 후에 TCP 연결을 안정적으로 종료합니다. Dispose 메서드는 Socket에서 사용하는 관리되지 않는 리소스를 해제하고, 필요에 따라 관리되는 리소스를 삭제합니다.
SmtpClient를 사용한 후에 Dispose를 호출합니다. Dispose 메서드를 사용하면 SmtpClient가 사용할 수 없는 상태가 됩니다. Dispose를 호출한 후에 가비지 수집기가 SmtpClient에서 차지한 메모리를 회수할 수 있도록SmtpClient에 대한 모든 참조를 해제해야 합니다.
Topic Location 방법: IIS에서 SMTP 가상 서버 설치 및 구성 Configuring ASP .NET Web Applications 방법: IIS 6.0에서 SMTP 가상 서버 설치 및 구성 Visual Studio에서 ASP .NET 웹 응용 프로그램 빌드 다음 코드 예제에서는 전자 메일 메시지를 비동기적으로 보내는 방법을 보여 줍니다.
#using <System.dll> using namespace System; using namespace System::Net; using namespace System::Net::Mail; using namespace System::Net::Mime; using namespace System::Threading; using namespace System::ComponentModel; static bool mailSent; static void SendCompletedCallback(Object^ sender, AsyncCompletedEventArgs^ e) { // Get the unique identifier for this asynchronous // operation. String^ token = (String^) e->UserState; if (e->Cancelled) { Console::WriteLine("[{0}] Send canceled.", token); } if (e->Error != nullptr) { Console::WriteLine("[{0}] {1}", token, e->Error->ToString()); } else { Console::WriteLine("Message sent."); } mailSent = true; } int main(array<String^>^ args) { if (args->Length > 1) { // Command line argument must the the SMTP host. SmtpClient^ client = gcnew SmtpClient(args[1]); // Specify the e-mail sender. // Create a mailing address that includes a UTF8 // character in the display name. MailAddress^ from = gcnew MailAddress("jane@contoso.com", "Jane " + (wchar_t)0xD8 + " Clayton", System::Text::Encoding::UTF8); // Set destinations for the e-mail message. MailAddress^ to = gcnew MailAddress("ben@contoso.com"); // Specify the message content. MailMessage^ message = gcnew MailMessage(from, to); message->Body = "This is a test e-mail message sent" + " by an application. "; // Include some non-ASCII characters in body and // subject. String^ someArrows = gcnew String(gcnew array<wchar_t>{L'\u2190', L'\u2191', L'\u2192', L'\u2193'}); message->Body += Environment::NewLine + someArrows; message->BodyEncoding = System::Text::Encoding::UTF8; message->Subject = "test message 1" + someArrows; message->SubjectEncoding = System::Text::Encoding::UTF8; // Set the method that is called back when the send // operation ends. client->SendCompleted += gcnew SendCompletedEventHandler(SendCompletedCallback); // The userState can be any object that allows your // callback method to identify this send operation. // For this example, the userToken is a string constant. String^ userState = "test message1"; client->SendAsync(message, userState); Console::WriteLine("Sending message... press c to" + " cancel mail. Press any other key to exit."); String^ answer = Console::ReadLine(); // If the user canceled the send, and mail hasn't been // sent yet,then cancel the pending operation. if (answer->ToLower()->StartsWith("c") && mailSent == false) { client->SendAsyncCancel(); } // Clean up. delete message; client = nullptr; Console::WriteLine("Goodbye."); } else { Console::WriteLine("Please give SMTP server name!"); } }
Windows 7, Windows Vista SP1 이상, Windows XP SP3, Windows XP SP2 x64 버전, Windows Server 2008(Server Core는 지원되지 않음), Windows Server 2008 R2(Server Core는 SP1 이상에서 지원됨), Windows Server 2003 SP2
.NET Framework에서 모든 플랫폼의 전체 버전을 지원하지는 않습니다. 지원되는 버전의 목록을 보려면 .NET Framework 시스템 요구 사항을 참조하십시오.
http://msdn.microsoft.com/ko-kr/library/system.net.mail.smtpclient.aspx#Y2900