Q&A

  • 메일 발송에 대한 질문...
날씨가 많이 추워졌네요...

요새 메일 발송땜시 죽을 맛입니다.

여기서 메일에 대한 검색을 하다가 질문 드립니다.

인디를 이용해서 메일을 발송하고 있습니다.

현재 네이트를 테스트 하고 있는데요.

제가 저의 메일로 메일을 발송하면 정상적으로 메일이 들어 옵니다.

그리고 며칠전에는 네띠앙, 한메일의 제 메일로 전송을 했더니 정상적으로 도착을 했더군요.

그런데, 어제부터였나?? 네이트에서 네이트는 전송이 되는데, 네이트에서 네띠앙, 한메일로는

발송이 안되네요..

아래는 소스입니다.

<!--CodeS-->
if FThreadList = nil then
            FThreadList := TList.Create ;


    URL :=(URL);
    URL :='<br><br><br><br><font size=2 color=#00F96F72><A href=''' + URL + '''>' + ' 다운로드 받기</a></font>';
    s_Server := 'smtp.' + Copy(edt_sendername.Text, pos('@',edt_sendername.Text) + 1,
                Length(edt_sendername.Text) - pos('@',edt_sendername.Text) + 1);
    dxButton6.Enabled := False;

    For i:=0 to FMailListCount - 1 do
    begin
        FThreadList.add(TSMTPThread.Create);
        with TSMTPThread(FThreadList.Items[i]) do
        begin
                FIndex := i;
            FreeOnTerminate := True;
            OnTerminate := ThreadTerminated;
            FFrom := Trim(edt_sendername.Text);
            FMessage := mo_text.Lines.Text + URL;
            FRecipient := Trim(edt_recive.Text);
            FSubject := Trim(edt_subject.Text);
            FSMTPServer := Trim(s_Server);
             FAuthenticationType := atLogin;
            FUserid   := Copy(edt_sendername.Text, 1, Pos('@',edt_sendername.Text) - 1);
            FPassword := Pass_Word;
        end;
    end;

    For i:=0 to FMailListCount do begin
        TSMTPThread(FThreadList.Items[i]).Start;
    end;

<!--CodeE-->

아래 부분은 발송 부분입니다.
<!--CodeS-->
procedure TSMTPThread.Run;
var
    LMsg: TIdMessage;
begin
    LMsg := TIdMessage.Create(nil);
    try
        with LMsg do
        begin
            From.Address := FFrom;
            Recipients.Add.Address := FRecipient;
            Subject := FSubject;
            Body.Text := FMessage;
            CharSet := 'KS_C_5601-1987';
            Headers.Text := 'Content-type: text/html';
            ContentType := 'text/html';  
        end;
        with TIdSMTP.Create(nil) do
        begin
            try
                Host := FSMTPServer;
                AuthenticationType := FAuthenticationType;
                Password := FPassword;
                Username := FUserID;
                Connect;
                try
                    Send(LMsg);
                finally
                    Disconnect;
                end;
            finally
                Free;
            end;
        end;
    finally
        LMsg.Free;
    end;
    Stop;
end;
<!--CodeE-->

대체 이유를 모르겠습니다. 고수님들 문제가 뭔지 부탁드리겠습니다.

P.S : 사무실에는 메일 서버가 있지만...납품되는곳은 메일 서버가 따로 없기에
사용자의 메일을 이용해서 인증을 받아 메일 발송을 하게 하고자 합니다. 방법이 없네요..ㅠㅠ

질문시 빠진부분이 있네요..^^;;;

<!--CodeS-->
procedure TfrmSendMail.ThreadTerminated(ASender: TObject);
var
    s: string;
    p: Pointer;
    nIndex : Integer;
    DownList : TStringList;
    i : Integer;
    User_ID_Result : String;
begin
        p := TSMTPThread(ASender);
    nIndex := TSMTPThread(ASender).FIndex ;
    s := TIdThread(ASender).TerminatingException;

    if Length(s) > 0 then
    begin
        Memo1.Lines.add(IntToStr(nIndex) + ' : ' + IntToStr(TIdThread(ASender).ThreadID)
                + 'An error occurred while sending message. ' + s);
        Application.MessageBox('메일 발송에 실패 하였습니다.' + #13 + '다시 시도해 보시기 바랍니다.','DreamHard',MB_ICONWARNING + MB_OK);

        dxButton6.Enabled := True;
    end
    else
    begin
        
        Memo1.Lines.add(IntToStr(nIndex) + ' : ' + IntToStr(TIdThread(ASender).ThreadID) + ' : Message sent!');
        FThreadList.Delete(FThreadList.IndexOf(p));


        Application.MessageBox('메일이 성공적으로 발송되었습니다.','DreamHard',MB_ICONINFORMATION + MB_OK);
    end;
    dxButton6.Enabled := True;
end;
<!--CodeE-->
메일 발송 확인 부분입니다.^^;;
4  COMMENTS
  • Profile
    라벤더 2005.12.03 18:18
    안녕하세요 ^^

    으음.. 제가 보기엔 소스상에는 아무런 문제가 없는 것 같아요..

    뭔가 이상하다..싶어 네이트에서 한메일로 직접 메일을 보내니 메일이

    보내지지 않는군요..  아무래도.. 네이트 자체적인 문제 같은 생각이..

    오늘 날씨가 많이 추워졌네요- 감기 조심하세요 ^^
  • Profile
    김영대 2005.12.03 18:50
    답변 감사합니다.^^

    오늘 윗지방은 눈이 온다고 하던데...부럽습니다...^^ 부산은 눈 구경하기가 힘들어서리..^^

    지금도 메일이 보내지지 않아서 열심히 홈페이지 둘러보고 있습니다.

    혹시나 다른 방법이 있으신 고수님들 자료좀 보내주실 수 있나요???

    이것땜시 일주일을 머리굴리고 있습니다.^^
  • Profile
    겨울이 2005.12.03 21:45
    김영대님의 사이트에서 많은 도움을 받는사람인지라..몇자 올립니다.
    그 분이 맞는지는 모르겠지만요.

    지금 포탈들끼리는 SPF가 발효되어 있습니다.
    SPF한 Sender Policy 어쩌고하는 말인데..
    아마 이문제 때문인지도 모르겠군요...
    확인 한번 해보세요..

    SFP란
    보내는 측의 도메인과 아이피를 검사해서
    해당 아이피가 해당송신자도메인측의 아이피가 일치할때만
    수신측에서 받아준다는 정책입니다.
    이건 스팸문제 때문인데요..
    몇일전부터 발효가 된 정책입니다.

    즉, from aaa@nate.com
    to bbb@yahoo.co.kr 이라는 메일을 보내려면
    from aaa@nate.com에 해당되는 도메인, 즉 nate.com의 아이피에서 발송해야한다는뜻입니다.

    만일, 웹메일이 아닌, 어플단에서의 메일 발송을 한다면
    송신자의 아이피가...지금 메일을 보내는 김영대님의 컴 아이피가 날라갈테니..
    당연히 수신측에서 거부한다는 뜻이기도 합니다.

    일반적인 네이트사이트의 웹메일을 통해서 발송한다면,
    당연히 송신자의 아이피도 나오겠지만..거기에 따르는 네이트의 아이피가 같이 발송되기때문에
    수신측에서는 거부하지않는다는 거겠지요.

    발송이 안되는 이유가 아마 이 이유때문은 아닌지 싶네요..
    확인해보시기 바랍니다.
    다른 문제라면...머.....다행이구요..


  • Profile
    김영대 2005.12.05 18:18
    ㅎㅎ 전 개인홈피를 운영하고 있는 그 김영대님이 아니랍니다.^^

    저도 동명이인이신분의 홈피에서 좋은 자료 많이 보고 있습니다.

    SPF정책이라...

    그럼 일반 어플에서는 메일 발송이 힘들겠군요.

    그런데, 아웃룩은 메일을 어케 발송하는지 생각해 봐야 할 문제군요.

    답변 감사드립니다. 그 SPF란 정책을 해결할 수 있는 방법을 모색해 봐야겠군요.

    모두들 즐거운 일주일 시작하시기 바랍니다.