실행파일이 있는 곳에 libeay32.dll 과 ssleay32.dll 파일이 필요합니다.
(
http://docwiki.embarcadero.com/RADStudio/Berlin/en/OpenSSL#32-bit_and_64-bit_Windows 를 참조하시거나, 또는 구글링으로 찾으실 수 있습니다.)
이메일에 첨부파일을 같이 보내시려면, #include <IdAttachmentFile.hpp> 를 해 주셔야 합니다.
IdSMTP1, IdSSLIOHandlerSocketOpenSSL1, IdMessage1 콤포넌트들을 폼 에 올려 놓으시고
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String stQuery, stCClist, stBCClist, stHost, stPort, stMyEmail, stMyPassword, stFile, stMyClientEmail ;
stHost = "smtp.gmail.com" ;
stPort = "465" ;
stMyEmail = "MyEMail@gmail.com" ;
stMyPassword = "MyPassword" ;
stMyClientEmail = "myClient@client.com" ;
stCClist = "eMail1@test.com,eMail2@test.com" ;
stBCClist = "mySecondEmail@mycompany.com" ;
stFile = "c:\\Temp\\MyPhoto.jpg" ;
Form1->IdSMTP1->Disconnect() ;
Form1->IdSSLIOHandlerSocketOpenSSL1->MaxLineAction = maException ;
Form1->IdSSLIOHandlerSocketOpenSSL1->SSLOptions->Method = sslvSSLv23 ;
Form1->IdSSLIOHandlerSocketOpenSSL1->SSLOptions->Mode = sslmUnassigned ;
Form1->IdSSLIOHandlerSocketOpenSSL1->SSLOptions->VerifyDepth = 0 ;
Form1->IdSSLIOHandlerSocketOpenSSL1->Destination = stHost + ":" + stPort ;
Form1->IdSSLIOHandlerSocketOpenSSL1->Host = stHost ;
Form1->IdSSLIOHandlerSocketOpenSSL1->Port = StrToInt(stPort) ;
Form1->IdSMTP1->IOHandler = Form1->IdSSLIOHandlerSocketOpenSSL1 ;
Form1->IdSMTP1->AuthType = satDefault;
Form1->IdSMTP1->UseTLS = utUseImplicitTLS ; // 위에서 포트를 465 로 지정했을 경우...
/*
// utNoTLSSupport -> 25 and do not assign the SSL IOHandler;
// utUseImplicitTLS -> 465 for google ;
// utUseExplicitTLS -> 587 for google ;
// utUseRequireTLS ;
*/
Form1->IdSMTP1->Host = stHost ;
Form1->IdSMTP1->Port = StrToInt(stPort) ;
Form1->IdSMTP1->Username = stMyEmail ;
Form1->IdSMTP1->Password = stMyPassword ;
Form1->IdMessage1->Clear() ;
Form1->IdMessage1->ClearHeader() ;
Form1->IdMessage1->ClearBody() ;
Form1->IdMessage1->MessageParts->Clear() ;
Form1->IdMessage1->Body->Clear() ;
Form1->IdMessage1->CharSet = "utf-8";
Form1->IdMessage1->From->Address = stMyEmail ;
Form1->IdMessage1->Recipients->EMailAddresses = stMyClientEmail ;
Form1->IdMessage1->CCList->EMailAddresses = stCClist ;
Form1->IdMessage1->BccList->EMailAddresses = stBCClist;
Form1->IdMessage1->Subject = "메일 제목" ;
Form1->IdMessage1->Body->Add( "메일 내용" ) ;
if ( stFile.Length() > 1 ) {
Form1->IdMessage1->ContentType = "multipart/form-data";
TIdAttachmentFile(IdMessage1->MessageParts, stFile); // #include <IdAttachmentFile.hpp> // 첨부파일 추가
} ;
try {
IdSMTP1->Connect() ;
Form1->IdSMTP1->Authenticate();
Form1->IdSMTP1->Send(IdMessage1);
} __finally {
Form1->IdSMTP1->Disconnect();
} ;
}
//---------------------------------------------------------------------------
라이손레종ㅎ 님이 쓰신 글 :
: 네 안녕하세요.. Intotheblue님의 답글을 보고서 시도를 해보았긴 했었습니다..
: 빌더 6으로하면.. 명령어가 달라서.. 안되었고.. 인디만 버젼올려서하니.. 뭔가.. 문제있는지..
: 인디자체에 문제가 생겼고.. 그래서.. 빌더9를 공수해서 해보았지만.. 안되었습니다..
:
: 방금은 혹시나 해서 빌더 10을 공수해서.. 해보았습니다.. 다행히 컴파일은 되지만..
: 역시나 메일은 가질않습니다..
:
: 아래는 컴파일 해본 코드입니다..
:
:
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
: IdMessage1->From->Text = "abcd";
: IdMessage1->Recipients->EMailAddresses = "abcd@gmail.com";
: IdMessage1->Body->Add( "test"); // 메일 내용
: IdMessage1->Subject = "test"; // 제목
:
: if (IdSMTP1) {
: IdSMTP1->Host = "smtp.gmail.com"; // 받는 smtp 서버
: IdSMTP1->Username= "abcd@gmail.com";
: IdSMTP1->Password= "abcdpass" ;
: IdSMTP1->Port = 465;
: IdSMTP1->AuthType = satDefault;
: IdSMTP1->UseTLS = utUseImplicitTLS;
:
: IdSSLIOHandlerSocketOpenSSL1->PassThrough = FALSE;
: IdSSLIOHandlerSocketOpenSSL1->Destination = "smtp.gmail.com:465" ;
: IdSSLIOHandlerSocketOpenSSL1->SSLOptions->Method = sslvTLSv1;
: IdSSLIOHandlerSocketOpenSSL1->SSLOptions->Mode = sslmClient;
:
: IdSMTP1->Connect(); // 10초
: IdSMTP1->Authenticate();
:
: try {
:
:
: IdSMTP1->Send(IdMessage1);
: MessageDlg("succ.", mtWarning, TMsgDlgButtons() << mbOK, 0);
:
: }
: __finally {
: IdSMTP1->Disconnect();
: }
: }
: }
:
: 컴파일이 되고 실행하면..
: SSL IOHandler is required for this setting. 이라는 쇼메시지가 뜹니다..
: 이래저래 다해본거 같은데.. 무엇이 문제인지 모르겠습니다..
:
:
: Intotheblue 님이 쓰신 글 :
: : 제가 예전에 gmail 로 테스트 해서 올린 코드가 있습니다..
: : 보셨다는 코드가 이건지 모르겠네요.
: : 제가 테스트 했을때는 잘 됐습니다.
: :
: :
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=73604
: :
: :
: : 라이손레종ㅎ 님이 쓰신 글 :
: : : 안녕하세요.. 한참을 고민하다가.. 답이 없어.. 전문가분들께 문의를 해야겠다 싶어.. 왔습니다.
: : : 질문전에 메일 보내는 방법을 검색을 해보았는데..
: : : 방법이 2종류 이더라고요.. NMSMTP 방법과 indy 방법..
: : :
: : : 제가 빌더6을 사용하고 있습니다..
: : :
: : : NMSMTP의 예제를 실행해 보았습니다. gmail을 사용하려 합니다.
: : : Connection 부분 에서는 Connected라 뜨고.. 잘 연결 된거 같습니다.
: : : Sending E-Mail 부분에서.. To : 주소적고. 메일내용 적고 Send를 클릭하면
: : :
: : : 530 5.7.0 Must issue a STARTTLS command first.
: : : f21sm11453923pff.48 - gsmtp
: : :
: : : 이렇게 쇼메시지가 나옵니다.. 포럼에 검색해보면 관련 내용은.. 없어서.. 구글을 찾아 보았으나..
: : : 저에겐.. 무리였습니다..
: : :
: : : 그리하여.. indy로도 해보려 했으나.. indy는 예제가 없어 누군가의 답글 코드를 보고서 해보았으나..
: : : 되지를 않았습니다..
: : :
: : : ... 답변 부탁드리겠습니다..
: : :
: : : 예제를 첨부파일에 올렸습니다..