C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[74270] Re:Re:Re:Re:Re:메일 보내기 NMSTMP , Indy
초행길 [] 3748 읽음    2017-03-11 01:53
저도 이 문제로 고생을 했었습니다.
5~6년 전에 만든 프로그램이 잘 돌다가, 약 2~3년전 어느 순간부터 지메일을 이용해서 메일을 보내는 부분에서 문제가 있었습니다.

지금 기억하는 당시의 사항은,, 인터넷을 제공하는 업체에 따라서 약간 설정을 달리해야 한다는 것 이었습니다.
( 참고로, 제가 있는 곳은 미국 뉴욕입니다. 이곳에서는 인터넷 서비스를 제공하는 업체를 대부분,   타임워너 라는 곳 과 버라이죤 이라는 업체 중에서 선택합니다. )
아래 올려 드렸던 소스는, 버라이죤이라는 곳을 이용할 경우에 정상 작동됩니다.

버라이죤에서는
stPort = "465" ;
Form1->IdSMTP1->UseTLS  = utUseImplicitTLS ;

타임워너에서는
stPort = "587" ;
Form1->IdSMTP1->UseTLS  = utUseExplicitTLS;

이렇게 했던 기억이 납니다.

참고하시라고, 프로그램을 올려드리겠습니다. ( 제 컴 환경은, Win10, RAD Studio 10.1 Berlin 입니다. )
소스에서 위에 적어 놓은 세팅 부분을 이리저리 조합하면서 테스트 해 보세요.


즐 프 하세요.





라이손레종ㅎ 님이 쓰신 글 :
: 초행길님 답변감사합니다.
: 말씀하신 dll을 찾아서 곁에 두니.. 이번엔 다른 쇼메시지가 뜹니다..
: 내용에 꽤 길고.. 무얼 의미하는지 모르겠습니다..
: 혹시나 싶어 로그인 상태에서 해보고..
: 제가 저에게 보내기도 해보고 다른사람에게 보내기도 해봤지만.. 결과가 같습니다..
:
: 캡쳐파일을 첨부합니다..
:
:
: 초행길 님이 쓰신 글 :
: : 실행파일이 있는 곳에 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는 예제가 없어 누군가의 답글 코드를 보고서 해보았으나..
: : : : : 되지를 않았습니다..
: : : : :
: : : : : ... 답변 부탁드리겠습니다..
: : : : :
: : : : : 예제를 첨부파일에 올렸습니다..

+ -

관련 글 리스트
74251 메일 보내기 NMSTMP , Indy 라이손레종ㅎ 3535 2017/03/09
74252     Re:메일 보내기 NMSTMP , Indy Intotheblue 3504 2017/03/09
74256         Re:Re:메일 보내기 NMSTMP , Indy 라이손레종ㅎ 3554 2017/03/09
74258             Re:Re:Re:메일 보내기 NMSTMP , Indy 초행길 4412 2017/03/10
74264                 Re:Re:Re:Re:메일 보내기 NMSTMP , Indy 라이손레종ㅎ 3646 2017/03/10
74270                     Re:Re:Re:Re:Re:메일 보내기 NMSTMP , Indy 초행길 3748 2017/03/11
74273                         답변 진심으로 감사드립니다. 3707 2017/03/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.