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;
아래와 같은 방식으로 작업을 하면 메일전송프로토콜을 그대로 적용해서 하는거라 이 방법이면 해결될 듯 하네여.
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;//연결끊음