(*@\\\0000000601*) (*@/// procedure t_nntp.GetArticleNr(index:integer); // ARTICLE *) procedure t_nntp.GetArticleNr(index:integer); begin if not f_logged_in then login; self.SendCommand('ARTICLE '+inttostr(index)); self.response; f_news.clear; GetArticleInternally; end; (*@\\\0000000401*) (*@/// procedure t_nntp.SetCurrentArticle(index:integer); // STAT *) procedure t_nntp.SetCurrentArticle(index:integer); begin if not f_logged_in then login; self.SendCommand('STAT '+inttostr(index)); self.response; end; (*@\\\0000000401*) (*@/// procedure t_nntp.GetCurrentArticle; // HEAD and BODY *) procedure t_nntp.GetCurrentArticle; begin if not f_logged_in then login; f_news.clear; self.SendCommand('HEAD'); GetArticleInternally; f_news.add(''); self.SendCommand('BODY'); GetArticleInternally; end; (*@\\\0000000401*) (*@/// procedure t_nntp.GetNextArticle; // NEXT *) procedure t_nntp.GetNextArticle; begin if not f_logged_in then login; self.SendCommand('NEXT'); self.response; GetCurrentArticle; end; (*@\\\0000000401*) (*@/// procedure t_nntp.GetPreviousArticle; // LAST *) procedure t_nntp.GetPreviousArticle; begin if not f_logged_in then login; self.SendCommand('LAST'); self.response; GetCurrentArticle; end; (*@\\\0000000401*)
(*@/// procedure t_nntp.response; *) procedure t_nntp.response; var s: string; begin s:=self.read_line(f_socket); if assigned(f_tracer) then f_tracer(s,tt_proto_get); try f_status_nr:=strtoint(copy(s,1,3)); except f_status_nr:=999; end; f_status_txt:=copy(s,5,length(s)); if f_status_nr>=400 then raise EProtocolError.Create('NNTP',f_status_txt,f_status_nr); end; (*@\\\0000000D01*) (*@/// procedure t_nntp.GetArticle(group:string; index:integer); *) procedure t_nntp.GetArticle(const group:string; index:integer); begin self.SendCommand('GROUP '+group); self.response; GetArticleNr(index); end; (*@\\\0000000301*) (*@/// procedure t_nntp.GetArticleInternally; *) procedure t_nntp.GetArticleInternally; var s: string; begin while true do begin s:=read_line(f_socket); if s<>'.' then f_news.add(s) else BREAK; end; end; (*@\\\0000000611*) (*@\\\0000000D01*)
{ Mail and News text components } (*@/// class t_mailnews(tcomponent) *) (*@/// constructor t_mailnews.Create(Aowner:TComponent); *) constructor t_mailnews.Create(Aowner:TComponent); begin inherited create(AOwner); f_body:=TStringList.Create; f_add_header:=TStringList.Create; f_message:=TStringList.Create; end; (*@\\\0000000603*) (*@/// destructor t_mailnews.Destroy; *) destructor t_mailnews.Destroy; begin f_body.Free; f_add_header.Free; f_message.Free; inherited destroy; end; (*@\\\0000000503*)
(*@/// procedure t_mailnews.SetBody(Value: TStringList); *) procedure t_mailnews.SetBody(Value: TStringList); begin if value=NIL then f_body.clear else f_body.assign(value); end; (*@\\\0000000603*) (*@/// procedure t_mailnews.SetHeader(Value: TStringList); *) procedure t_mailnews.SetHeader(Value: TStringList); begin if value=NIL then f_add_header.clear else f_add_header.assign(value); end; (*@\\\0000000603*)
(*@/// procedure t_mailnews.action; *) procedure t_mailnews.action; begin f_message.insert(0,'From: '+f_from); (* normally the first *) if f_sender<>'' then f_message.add('Sender: '+f_sender); f_message.insert(1,'Message-ID: <'+inttostr(round((now-encodedate(1970,1,1))*86400))+'@' +my_hostname+'>'); f_message.insert(2,'Date: '+internet_date(now)); f_message.insert(3,'Subject: '+f_subject); if f_references<>'' then f_message.add('References: '+f_references); if f_replyto<>'' then f_message.add('Reply-To: '+f_replyto); f_message.addstrings(f_add_header); f_message.add(''); (* An empty line to separate header from body *) f_message.addstrings(f_body); end; (*@\\\0000000B01*) (*@\\\0000000701*) (*@/// class t_mail(t_mailnews) *) (*@/// constructor t_mail.Create(Aowner:TComponent); *) constructor t_mail.Create(Aowner:TComponent); begin inherited create(AOwner); f_smtp:=NIL; f_receipts:=TStringList.Create; f_cc:=TStringList.Create; f_bcc:=TStringList.Create; end; (*@\\\0000000601*) (*@/// destructor t_mail.Destroy; *) destructor t_mail.Destroy; begin f_receipts.Free; f_cc.free; f_bcc.free; inherited destroy; end; (*@\\\0000000601*)
(*@/// procedure t_mail.SetRecipients(Value: TStringList); *) procedure t_mail.SetRecipients(Value: TStringList); begin if value=NIL then f_receipts.clear else f_receipts.assign(value); end; (*@\\\0000000603*) (*@/// procedure t_mail.SetCC(Value: TStringList); *) procedure t_mail.SetCC(Value: TStringList); begin if value=NIL then f_cc.clear else f_cc.assign(value); end; (*@\\\0000000609*) (*@/// procedure t_mail.SetBCC(Value: TStringList); *) procedure t_mail.SetBCC(Value: TStringList); begin if value=NIL then f_bcc.clear else f_bcc.assign(value); end; (*@\\\0000000601*)
(*@/// procedure t_mail.action; *) procedure t_mail.action; var i: integer; clear_sender: boolean; begin if (f_smtp=NIL) or (f_receipts=NIL) or (f_receipts.count=0) or (f_from='') then EXIT; clear_sender:=(f_smtp.Sender=''); if clear_sender then begin if f_sender<>'' then f_smtp.sender:=f_sender else f_smtp.sender:=f_from; end;
if f_disclose_receipts then f_message.add('To: disclosed recipients list') else for i:=0 to f_receipts.count-1 do begin f_message.add('To: '+f_receipts.strings[i]); end; f_smtp.Recipients:=f_receipts; for i:=0 to f_cc.count-1 do begin f_message.add('CC: '+f_cc.strings[i]); f_smtp.Recipients.add(f_cc.strings[i]); end; for i:=0 to f_bcc.count-1 do begin f_smtp.Recipients.add(f_bcc.strings[i]); end;
inherited action; f_smtp.message:=f_message; f_smtp.action; f_message.clear; if clear_sender then f_smtp.sender:=''; end; 
|