ASH84

Software Engineer/Developer, co-founder of Payhere. Ex-Banksalad. Intereseted in iteroperability, bootstrap company, writting.

[C#] 기본 메일 클라이언트 열기

created:2010-01-15
updated:2015-07-03
edit
기존의 MFC에서는 메일 클라이언트를 열기 위해서는 MAPI 라는것을 사용했었는데, .NET으로 넘어오면서 다양한 라이브러리를 지원해 주면서 파워포인트, 엑셀, 아웃룩 등등 MS Office와 연계해서 사용할 수 있도록 지원해주고 있습니다. 
**Microsoft.Office.Interop.Outlook**
이미 .NET의 참조추가를 통해서 아웃룩 관련 Dll을 추가하고 그에따른 클래스를 이용해서 아웃룩을 열고 제어할수 있습니다. 하지만 **Microsoft.Office.Interop.Outlook **을 사용하는 경우에는 아웃룩 밖에는 열수 없는 단점이 있습니다. 그래서 사용자가 사용하는 메일 클라이언트를 이용하기 위해서는 기존에 쓰던 MAPI32를 Wrap한 Mapi Wrapper 클래스를 이용해야 합니다. **MAPI Wrapper Class**
MAPI Wrapper 클래스에서는 Dll Import 이용해서 기존의 Win32에서 사용하는  MAPI32.Dll 을 가져와서 사용해야 합니다.
       [DllImport(“MAPI32.DLL”)]         static extern int MAPISendMail(IntPtr sess, IntPtr hwnd, MapiMessage message, int flg, int rsv);

cfile6.uf.1351641F4B4FE66446F33C.cs
호출하는 부분

 
                                MapiWrapper mapi = newMapiWrapper();
                                 mapi.AddAttachment(@”C:\MapiWrapper.cs”);
                                 mapi.SendMailPopup(“”, “”);
MapiWrapper 클래스에 대한 객체를 만들고 첨부파일을 첨부하기 위해서는 AddAttachment() 함수를 사용하고 파라미터 값으로 해당 파일의 경로를 넣어주면 됩니다. 그후, SendMailPopup() 함수를 호출하면 기본 메일 클라이언트가 실행되면서 자동적으로 첨부파일이 첨부 된것을 확인할수가 있습니다.만약, 메일 클라이언트를 실행시키지 않고 그냥 보내고 싶을 경우에는, SendMailDirect() 함수를 호출해서 사용하시면 됩니다. SendMailDirect와 SendMailPopup 함수는 둘다 모두 같은 두개의 파라미터 값을 요구합니다.      
        public int SendMailPopup(string strSubject, string strBody)         {           return SendMail(strSubject, strBody, MAPI_LOGON_UI | MAPI_DIALOG);         }
        public int SendMailDirect(string strSubject, string strBody)         {             return SendMail(strSubject, strBody, MAPI_LOGON_UI);         }

strSubject 와 strBody 인자값은 각각 보낼 메일의 제목과 본문내용에 대한 파라미터기 때문에, 만약 제목과 본문도 지정해 주고 싶다면, 해당 파라미터에 내용을 넣어주시면 됩니다. *여기서 한 가지 팁(Tip) : 현재 기본 메일 클라이언트 알아오기 *

위의 MapiWrapper 를 사용하면 현재 사용자 pc에 기본 메일 클라이언트로 메일을 보낼수가 있습니다. 하지만 그런 용도가 아니라 단순히 현재 기본 메일 클라이언트로 지정된것이 무엇인지 알고 싶을때는 아래와 같이 레지스터에서 값을 읽어오면 알수 있습니다.
object mailClient = Registry.GetValue(@”HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail”, “”, “none”);
![](http://ash84.net/wp-content/uploads/1/cfile8.uf.11056F164B4FED8C60D720.jpg)

 

#basic mail clients  #c#  #c# 메일 보내기  #call basic mail clients  #dev  #mapi  #MAPI Wrapper  #mapi32  #메일 보내기