Q&A

  • smtp 로 메일 발송 시 첨부파일 추가하는 방법을 알고 싶습니다.
telnet을 이용해서 smtp로 메일을 발송하려고 하는데 메일에 첨부파일 기능도 추가하고 싶습니다.

첨부파일을 보낼 수 있는 방법이 궁금합니다.
2  COMMENTS
  • Profile
    KDDG_Apine 2009.08.12 04:12
    밑에 같이 id 컴포넌트를 사용하면 됩니다. ^^
    제가 사용했던부분인데.. 될겁니다.

    var
    nDate, nTime : string;
    nAttFileName : string;
    LTheTextPart: TIdText;
    LTheAttachment: TIdAttachmentFile;
    nSubject : string;
    nItem : TIdEMailAddressItem;

    procedure SetAddress( AList : TIdEmailAddressList ; AStr : string);
    var
    nStrList : TStringList;
    nCnt : integer;
    nItem : TIdEMailAddressItem;
    begin
    AList.Clear;
    nStrList := TStringList.Create;
    try
    nStrList.CommaText := AStr;
    for nCnt := 0 to nStrList.Count - 1 do
    begin
    nItem := AList.Add;
    nItem.Address := Trim(nStrList.Strings[nCnt])
    end;
    finally
    nStrList.Free;
    end;
    end;

    begin
    nDate := FormatDateTime('yyyy-mm-dd', now);
    nTime := FormatDateTime('hh:mm', now);


    idSMTP.Host := fMailHost;
    idSMTP.Port := fMailPort; //smtp service usually runs on this port
    IdSMTP.Username := fMailUserName;
    idSMTP.Password:=fMailUserPwd;
    idmessage.From.address:= fGMSHFromAddress;

    SetAddress(IdMessage.Recipients, fGMSHRecipientsAddress);


    SetAddress(idmessage.CCList, fGMSHCCAddress);

    //idmessage.BccList.EMailAddresses:=edBC.Text;
    IdMessage.ConvertPreamble := False;
    IdMessage.ContentType := 'multipart/mixed';
    IdMessage.Encoding := meMIME;

    IdMessage.ContentTransferEncoding := '8bit';
    IdMessage.CharSet := 'KS_C_5601-1987';
    IdMessage.Date := now;
    // idmessage.ContentType:='text/plain' ;
    nSubject := format (
    '테스트 메일입니다. . %s일 .' , [nDate]);

    idmessage.Subject := EncodeHeader(nSubject, [], 'B' , bit8, IdMessage.CharSet);

    // idmessage.Subject := EncodeHeader(nSubject, '', 'B' , bit8, IdMessage.CharSet);
    //중요도
    IdMessage.Priority := mpHigh;
    idmessage.MessageParts.Clear;
    LTheTextPart := TIdText.Create(idmessage.MessageParts);
    LTheTextPart.Body.Text := Format(' 테스트입니다. '+#10#13+' %s %s 데이터 수신 현황입니다.'+
    #10#13+
    ' 감사합니다. ', [nDate, nTime]);
    LTheTextPart.ContentTransfer := '8bit';
    LTheTextPart.ContentType := 'text/plain';
    LTheTextPart.charset := 'KS_C_5601-1987';
    LTheTextPart.ParentPart := -1;

    // 첨부파일 넣기 (실제 파일 GetExcelFile)
    nAttFileName := 'c:\a.xls';
    if nAttFileName <> '' then
    begin
    LTheAttachment := TIdAttachmentFile.Create(idmessage.MessageParts, nAttFileName);
    end;

    //with IdMessage do DoCreateAttachment(attachment.Headers, attachment);
    try
    try
    idSMTP.Connect;
    except on E: Exception do
    begin
    Log := 'Mail connect Error : ' + E.Message;
    end;
    end;
    try
    idSMTP.send(idmessage);
    //if an exception occurs?/span>
    except on E: Exception do
    begin
    Log := 'Send Mail Error : ' + E.Message;
    end;
    end;
    finally
    //disconnect from server
    if IdSMTP.Connected then
    IdSMTP.Disconnect;
    end;
    // end;
    end;
  • Profile
    김지호 2009.08.24 18:27
    답변 감사합니다 ^^
    • 이성찬
    • 2009.08.24 03:47
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2009.08.24 18:34
      안녕하세요.. 코드는 문제 없어보이는데.. 개발하시는 PC 의 OS 가 비스타가 아닌지요? 비스타의 경우...
    • 이성찬
      2009.08.26 06:22
      KDDG_MIN//답변 감사합니다. 하지만 윈도 xp sp3인걸요ㅠ
    • 구창민
      2009.08.26 22:19
      안녕하세요.. 제가 TurboDelphi 가 없어서 테스를 못해보았는데.. 정품으로 테스트시 Vista, XP 에서 ...
    • 이성찬
      2009.08.27 02:47
      KDDG_MIN//아, 여기서도 작동 잘 됩니다 ^^ 감사합니다. 아직 배우는중이라 이런면에서 좀 부족한듯 하네...
    • 박진수
    • 2009.08.21 23:54
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2009.08.23 09:22
      폴더에 대한 옵션이 많아서 그런가 봅니다. 비스타에선 기본적으로 폴더를 생성하면 [고급특성]에서 '...
    • 치꼬
      2009.08.22 02:51
      배우는 단계에서는 그닥 차이점은 중요하지 않을듯합니다.
    • 윤영훈
    • 2009.08.20 04:14
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2009.08.20 20:31
      ShowMessage대신에 MessageBox나 MessageDlg함수를 쓰세요...
    • 장성호
      2009.08.21 00:49
      //다음과 같이 만들어서.. procedure ShowMessageEx(const sTitle:String;const sMsg:String); b...
    • 성더기
      2009.08.22 02:32
      위에 방법도 있구요 델파이 메뉴의 프로젝트 > 프로젝트 옵션 > 프로그램 타이틀을 다른 바꾸시면...
    • 장성호
      2009.08.22 10:00
      Application 타이틀을 바꿔서도 가능하네요 다음과 같이 Application.Title을 변경해서도 구현이 가능...
    • 윤영훈
      2009.08.25 20:13
      감사합니다~ 한번씩 다 확인해고 제일 맞는 걸로 사용해야겠네요. 도움 주신 분들 정말정말 감사해요~
    • 최용일
      2009.08.18 18:43
      상용이구요... 아래 홈페이지에서 구매하실 수 있습니다. http://www.devart.com/dac.html
    • 조상은
      2009.08.18 19:25
      최용일님 정말 감사합니다. 알려주신 사이트 들어가서 보니 SQL에 직접 붙일 때 사용하는 컴포넌트이...
    • 조상은
      2009.08.18 20:12
      위의 글을 작성하다보니 install package에서 runtime packages 에 정의된 목록이 의심이 가서 다른 정상...
    • 문병구
    • 2009.08.15 00:11
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 백록화
      2009.08.15 09:16
      흠...보통 스캐너에서 바코드번호와 엔터값이 넘어옵니다. 따로 자릿수 처리를 할 필요가 없을껀데요.....
    • 아르스
      2009.08.18 00:15
      백록화 님의 말씀 처럼 OnKeyPress 나 OnKeyDown 이벤트에 if Key = #13 then begin ..... end; 또는 i...
    • 문병구
      2009.08.18 01:21
      맞네요..제가 착각을 했네요... 바코드 값이 읽어지는 것은 마치 키보드에 값을 넣고 모두 넣은 다음 엔...
    • 김동원
    • 2009.08.14 18:55
    • 6 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2009.08.15 02:41
      안녕하세요.. 우선 그 네개의 TMemo 콘트롤의 크기가 동일하다는 가정하에 아래 예제를 따라해보세요....
    • 김동원
      2009.08.15 22:27
      초보가 이해하긴 대단히 어려운 내용같습니다.. 하여간, 좋은 답변주신데 대해 , 저의 감사의 마음을 ...
    • 구창민
      2009.08.17 19:09
      조금 설명을 달아 보겠습니다.. 음.. FOldMemoWndProc 는 함수포인터라고 하는건데.. 일종의 변수라고...
    • 김동원
      2009.08.19 02:08
      어렴풋이 이해할수있게되었습니다. 정말 감사합니다.그런데 실제로 코드를 입력해보니 아래와 같은 오류...
    • 구창민
      2009.08.19 18:25
      동원님.. 위에러만 봐서는 상황을 알 수 없고요... 에러나는 부분의 함수부분만이라도 떼서 올려보세요....
    • 김동원
      2009.08.21 01:03
      님께서 올려주신대로 새로 코드를 써서 만들었더니 잘 됩니다. 그런데 문제는 다른데 있었던것 같습니다. ...
    • cdrd
    • 2009.08.13 20:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김동원
      2009.08.14 18:24
      위 질문중 1번에서 ADO,BDE 두가지만 말씀드릴수 있습니다. 제가 경험한 것이 이것 뿐이라서요.(저는 초...
    • 현실환
      2009.08.18 21:16
      Antialiased Drawing을 할려면 GDI가 아닌 GDI+ 함수를 이용해야 합니다. 컴포넌트 자체는 TImage를 그...
    • 오델로
    • 2009.08.12 19:50
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 김병윤
      2009.08.12 21:28
      10분에 천원이면...한시간에 6천원...하루에 14만4천원? 뜨억 @.@;; ㅋㅋ 설마 이렇게 많이 받지는 않겠죠...
    • 오델로
      2009.08.12 22:54
      아 완전 깔끔한 한방이네요 ㅠ.ㅠ 완전 감솨*10000000000000000000 소중하게 보겠습니다... Edit6....
    • 김병윤
      2009.08.13 01:46
      Format에 관해서 따로 알아두시는게 좋으실텐데 여기다 다 설명드리기는 좀 그렇고 대략...설명하자면 ...
    • 오델로
      2009.08.19 18:24
      이제서야 답변봤네요^^ 유용한 답변 감사합니다...^^ 복사해서 따로 저장후에 써야겠네요 ㅋ즐거운 하루...
    • 이훈
    • 2009.08.12 08:47
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2009.08.12 18:45
      코드를 올려보세요..
    • 김병윤
      2009.08.12 21:37
      폼.Hide 때문입니다. 번쩍하고 사라지지 않습니까? 폼.Show; 로 폼을 호출하면 그 아래 코드까지 일사...
    • 구창민
      2009.08.12 20:49
      아래 코드 한줄을 추가해 보세요.. Application.ProcessMessages; fmInfoProgress.Show; 즐거운 ...
    • 김병윤
      2009.08.12 22:15
      Application.ProcessMessages; 요놈이 루프 안에 있어야 원하시는 결과를 얻으실 수 있을 듯 합니다. ^^
    • Hyphen
      2009.08.12 22:56
      fmInfoProgress.Show; Application.ProcessMessages; 순서를 이렇게 하니까 보이는 군요.. 대단히 ...
    • 치꼬
      2009.08.12 06:21
      내용은 정확히 파악은 잘 안되지만요. 위의 문장이 안되는건.. 말그대로 edit2.text 가 '' 것이 아니라...
    • 구창민
      2009.08.12 19:15
      안녕하세요.. 아래와 같은 문자열을 날짜로 치환하는 문장으로 해결하실수 있을거 같네요.. if Str...
    • 오델로
      2009.08.12 19:38
      답변 무한감사드립니다^^;; 아직 완전 백지상태라서 무작정 삽들고 파대기 시작하는중이라 답답합니다...
    • 백록화
      2009.08.11 21:32
      리더기가 시리얼통신을 사용한다면 관련 시리얼통신 콤포넌트에 데이터읽기 이벤트에서 제어를 해주심돼...
    • 김지호
    • 2009.08.11 16:29
    • 2 COMMENTS
    • /
    • 0 LIKES
    • KDDG_Apine
      2009.08.12 04:12
      밑에 같이 id 컴포넌트를 사용하면 됩니다. ^^ 제가 사용했던부분인데.. 될겁니다. var nDate,...
    • 김지호
      2009.08.24 18:27
      답변 감사합니다 ^^