안녕하세여~
델파이를 사랑하는 한국의 젊은이 입니다.
지금 winshoes 컴포런트를 다운받아 db에 있는 email주소로 단체메일을 보내는 프로그램을 구현 중입니다.
문제는 winshoes 데모 소스를 보니깐 쓰레드를 이용했더군여
한사람한테 하나씩 물론 받는 사람들을 여려명으로 할수 있지만
그렇게 한다면.. 받는사람의 모든 주소가 수신측에서 보게 땜에 이를 막고자
하는데 문제가 많이 발생합니다.
while not query1.eof do begin
memoto.lines.add(query1.fieldbyname('email')asstrng);
query1.next;
end;
이런 씩으로 했을 경우 (xxxx@yahoo.co.kr, xxxx@hanmail.net,...... 이런씩으로
받는 사람이 나옴)
제가 원하는 것은 (to : xxxx@yahoo.co.kr) 요렇게
데모 소스는 대충 이렇게 한개의 function과 하나의 procedure 쯤
분석해 보면, function 에서는 메일서버와 보내는 사람의 이메일 주소를 ini 파일에서 읽어와서 검색한뒤 조건에 만족하면 procedure에서 msg컴퍼런의 값을 주고 이를 쓰래드에서 보내는 걸루 분석됩니다.
procedure TFormMain.ButtonSendClick(Sender: TObject);
function EmailAndHostAreValid : Boolean;
begin
ReadIniFile;
if (( Length(HostAddress) > 0 ) and
( Length(EmailAddress) > 0 ))
then
Result := True
else
Result := False;
end;
procedure PopulateSMTPValues;
begin
SMTP.Host := HostAddress;
with Msg do begin
Attachments.Clear;
CCList := MemoCC.Lines;
BCCList := MemoBCC.Lines;
Too := AMemoTo.Lines;
From := EmailAddress;
Subject := EditSubject.Text;
Text := MemoBody.Lines;
if FileExists(EditAttachment.Text) then
Attachments.AddAttachment(EditAttachment.Text);
end;
end;
begin
if EmailAndHostAreValid then begin
PopulateSMTPValues;
with TSenderThread.Create(True) do begin
FreeOnTerminate := True;
SMTP := Self.SMTP;
Msg := Self.Msg;
Resume;
end;
end else
ShowMessage('Use File : Setup to set your server parameters first.');
end;
// 쓰래드 부분
procedure TSenderThread.Execute;
begin
OldStatusEvent := SMTP.OnStatus; try
SMTP.OnStatus := StatusEvent;
SMTP.Send(Msg);
Terminate;
finally SMTP.OnStatus := OldStatusEvent; end
end;
*********************************************************************88
전 이 데모소스에서 procedure의 msg 의 값을 주는 부분을 없애고
while 문으로 돌리기 위해
begin
if EmailAndHostAreValid then begin
while not query1.eof do begin
memoto.lines.text := query1.fieldbyname('email').asstring;
SMTP.Host := HostAddress;
with Msg do begin
Attachments.Clear;
CCList := MemoCC.Lines;
BCCList := MemoBCC.Lines;
Too := MemoTo.Lines;
From := EmailAddress;
Subject := EditSubject.Text;
Text := MemoBody.Lines;
if FileExists(EditAttachment.Text) then
Attachments.AddAttachment(EditAttachment.Text);
end;
with TSenderThread.Create(True) do begin
FreeOnTerminate := True;
SMTP := Self.SMTP;
Msg := Self.Msg;
Resume;
end;
memoto.lines.text := '';
query1.next;
end;
end else
ShowMessage('Use File : Setup to set your server parameters first.');
end;
이렇게 바꾸었습니다. 위를 실행시키면..
당연히 에러 ^^;
쓰래드 부분에서 계속 연결 하더군여, 그리고 프로그램 다운
에러 분석은 아마 연결된 상태에서 계속 연결하는거 같아여, 후미~
어떻게 해결해야 할까여, 고수님들의 조언 및 힌트를 부탁 드리겠습니다.
저두열심히 공부해보구여, 전 델파이4.0을 쓰고 아쉽게도 fastnet이 없기땜에 쩝,
nmsmtp도 content-type : html/text; euc-kor가 지원안돼서, -.-; (5.0이상은 모르겠지만 전 설정하는 것이 없음)
* 암튼 정리가 잘 안된것 같네여..
고수님 저 좀 살려주세여..
> 안녕하세여~
> 델파이를 사랑하는 한국의 젊은이 입니다.
> 지금 winshoes 컴포런트를 다운받아 db에 있는 email주소로 단체메일을 보내는 프로그램을 구현 중입니다.
>
> 문제는 winshoes 데모 소스를 보니깐 쓰레드를 이용했더군여
> 한사람한테 하나씩 물론 받는 사람들을 여려명으로 할수 있지만
> 그렇게 한다면.. 받는사람의 모든 주소가 수신측에서 보게 땜에 이를 막고자
> 하는데 문제가 많이 발생합니다.
>
> while not query1.eof do begin
> memoto.lines.add(query1.fieldbyname('email')asstrng);
> query1.next;
> end;
> 이런 씩으로 했을 경우 (xxxx@yahoo.co.kr, xxxx@hanmail.net,...... 이런씩으로
> 받는 사람이 나옴)
> 제가 원하는 것은 (to : xxxx@yahoo.co.kr) 요렇게
>
> 데모 소스는 대충 이렇게 한개의 function과 하나의 procedure 쯤
> 분석해 보면, function 에서는 메일서버와 보내는 사람의 이메일 주소를 ini 파일에서 읽어와서 검색한뒤 조건에 만족하면 procedure에서 msg컴퍼런의 값을 주고 이를 쓰래드에서 보내는 걸루 분석됩니다.
>
> procedure TFormMain.ButtonSendClick(Sender: TObject);
>
> function EmailAndHostAreValid : Boolean;
> begin
> ReadIniFile;
> if (( Length(HostAddress) > 0 ) and
> ( Length(EmailAddress) > 0 ))
> then
> Result := True
> else
> Result := False;
> end;
>
> procedure PopulateSMTPValues;
> begin
> SMTP.Host := HostAddress;
> with Msg do begin
> Attachments.Clear;
> CCList := MemoCC.Lines;
> BCCList := MemoBCC.Lines;
> Too := AMemoTo.Lines;
> From := EmailAddress;
> Subject := EditSubject.Text;
> Text := MemoBody.Lines;
> if FileExists(EditAttachment.Text) then
> Attachments.AddAttachment(EditAttachment.Text);
> end;
> end;
>
> begin
> if EmailAndHostAreValid then begin
> PopulateSMTPValues;
> with TSenderThread.Create(True) do begin
> FreeOnTerminate := True;
> SMTP := Self.SMTP;
> Msg := Self.Msg;
> Resume;
> end;
> end else
> ShowMessage('Use File : Setup to set your server parameters first.');
> end;
>
> // 쓰래드 부분
> procedure TSenderThread.Execute;
> begin
> OldStatusEvent := SMTP.OnStatus; try
> SMTP.OnStatus := StatusEvent;
>
> SMTP.Send(Msg);
> Terminate;
> finally SMTP.OnStatus := OldStatusEvent; end
> end;
> *********************************************************************88
> 전 이 데모소스에서 procedure의 msg 의 값을 주는 부분을 없애고
> while 문으로 돌리기 위해
>
> begin
> if EmailAndHostAreValid then begin
> while not query1.eof do begin
> memoto.lines.text := query1.fieldbyname('email').asstring;
> SMTP.Host := HostAddress;
> with Msg do begin
> Attachments.Clear;
> CCList := MemoCC.Lines;
> BCCList := MemoBCC.Lines;
> Too := MemoTo.Lines;
> From := EmailAddress;
> Subject := EditSubject.Text;
> Text := MemoBody.Lines;
> if FileExists(EditAttachment.Text) then
> Attachments.AddAttachment(EditAttachment.Text);
> end;
> with TSenderThread.Create(True) do begin
> FreeOnTerminate := True;
> SMTP := Self.SMTP;
> Msg := Self.Msg;
> Resume;
> end;
> memoto.lines.text := '';
> query1.next;
> end;
> end else
> ShowMessage('Use File : Setup to set your server parameters first.');
> end;
>
> 이렇게 바꾸었습니다. 위를 실행시키면..
> 당연히 에러 ^^;
> 쓰래드 부분에서 계속 연결 하더군여, 그리고 프로그램 다운
> 에러 분석은 아마 연결된 상태에서 계속 연결하는거 같아여, 후미~
>
> 어떻게 해결해야 할까여, 고수님들의 조언 및 힌트를 부탁 드리겠습니다.
> 저두열심히 공부해보구여, 전 델파이4.0을 쓰고 아쉽게도 fastnet이 없기땜에 쩝,
> nmsmtp도 content-type : html/text; euc-kor가 지원안돼서, -.-; (5.0이상은 모르겠지만 전 설정하는 것이 없음)
> * 암튼 정리가 잘 안된것 같네여..
> 고수님 저 좀 살려주세여..
-.-;; 해결 했습다.. 쩝..