Q&A

  • 메일보내기 질문이요
IdSmtp와 IdMessage 컴포넌트를 사용합니다.

현재 메일은 잘 전송되어 지나
@nate.com으로 보내는 메일은 전송이 되지 않고 있습니다.

메일을 보내면 에러메세지가

5.5.1 HELO is required

로 나옵니다.

IdSmtp에는 Helo라는 속성은 없으나
HeloName라는 속성이 있어서 그것을 사용하였습니다.

위의 에러가 나지 않고 메일이 전송될수 있도록 하는 방법좀 알고 싶습니다.

소스는 다음과 같습니다.
  
function SendMail(sHost: String): Boolean;
var sUser : String;
begin
  // _ToMail := 'xxx.@nate.com';
  Result := false;
  sUser  := Copy(_ToMail,1,pos('@',_ToMail)-1);
  with IdSMTP do begin
    Host := sHost;
    Port := 25;
    HeloName := sUser;
    Username := sUser;
    Password := d_passwd;
    try
      Connect;
      Send(IdMessage);
      Disconnect;
      Result := true;
    except
      on E : Exception do begin
        if Connected then try Disconnect; except end;
        result := false;
        ShowMessage(E.Message);
      end;
    end;
  end;
end;
1  COMMENTS
  • Profile
    권황중 2004.05.11 02:56
    아마 이 부분은 HELO 라는 메시지를 요구하는 메일전송관련 프로토콜을 그대로 해 주기를 바라는 것 같습니다.
    아래와 같은 방식으로 작업을 하면 메일전송프로토콜을 그대로 적용해서 하는거라 이 방법이면 해결될 듯 하네여.

    SMTP : ldSmtp 콤포넌트
    MailMsg : ldMessage 콤포넌트

    SMTP.Host := '서버주소';
    SMTP.Connect(); //메일서버연결
    //메일보낼메시지 작성부분
    MailMsg.CharSet := 'EUC-KR';
    MailMsg.From.Text := fromEMail;
    MailMsg.ContentType := 'text/html';
    MailMsg.Recipients.EMailAddresses := '메일주소';
    MailMsg.Subject := '메일제목';
    MailMsg.Body.Text := '메일바디내용';
    //메일메시지 작성완료
    //메일발신 시작
    ResultCode := SMTP.SendCmd('MAIL FROM:<보내는사람메일주소>',250);
    if ResultCode = 250 then begin //정상적인 회신이 떨어지면 아래 실행
          ResultCode := SMTP.SendCmd('RCPT TO:<받는사람메일주소>', [250, 251]);
          if (ResultCode=250) or (ResultCode=251) then begin //받는사람이 있다면
            ResultCode := SMTP.SendCmd('DATA', 354); //메일메시지 보낼준비 메시지명령
            if Resultcode = 354 then begin //메일메시지 보낼준비가 정상적으로 떨어졌다면 아래를 실행
              SMTP.SendMsg(MailMsg); //메일보내기
              ResultCode := SMTP.SendCmd('.',250); //메일보내기 완료 명령
              if ResultCode = 250 then vStatus := 'SendOK';
            end;
          end;
        end;
        SMTP.SendCmd('RSET',250); //새로 메일보내기 위해 SMTP 초기화
      end;
      SMTP.Disconnect;//연결끊음