Guest User

Untitled

a guest
Jan 3rd, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 5.88 KB | None | 0 0
  1. program OnBeforeSendingMessage;
  2.  
  3. const
  4.     RemoveFromEmails = true;
  5.     RemoveFromNews   = true;
  6.  
  7. (*
  8. Format for Remove_Headers: {} = required, [] = optional
  9.   {HeaderName: }[,HeaderName: ][,HeaderName: ][...]
  10. Examples:
  11. - Single header: 'User-Agent: '
  12. - Multiple headers: 'User-Agent: ,X-Face: '
  13. *)
  14. procedure RemoveHeaders ( Message : TStringlist;
  15.                           IsEmail : boolean;
  16.                           const Remove_Headers: String
  17. );
  18. var i                : integer;
  19.     k                : integer;
  20.     s                : string;
  21.     CommaPos         : integer;
  22.     DelHeader        : TStringlist;
  23.     RemoveH          : String;
  24. begin
  25.    RemoveH := Remove_Headers;
  26.    i := 0;
  27.    if ((IsEmail=true)  and (RemoveFromEmails=true)) or
  28.       ((IsEmail=false) and (RemoveFromNews=true)) then begin
  29.       If ( RemoveH <> '' ) then begin
  30.       try
  31.          DelHeader := TStringlist.Create;
  32.          if ansipos ( ',', RemoveH) = 0 then begin
  33.             DelHeader.Add ( LowerCase ( TrimLeft( RemoveH )));
  34.          end // if
  35.          else begin
  36.             CommaPos := 0;  
  37.             for k := 1 to length ( RemoveH ) do begin
  38.                If RemoveH[k] = ',' then begin
  39.                   DelHeader.Add ( LowerCase ( TrimLeft (copy ( RemoveH,
  40. CommaPos + 1, k - ( CommaPos + 1 )))));
  41.                   CommaPos := k;
  42.                end; // if
  43.                if k = length ( RemoveH ) then
  44.                   DelHeader.Add ( LowerCase ( TrimLeft (copy ( RemoveH,
  45. CommaPos + 1, k - CommaPos ))));                  
  46.             end; // for  
  47.          end; // else  
  48.          s:=Message.text;
  49.          while (Message.Strings[i]<>'') do begin
  50.             k := 0;
  51.             while k <= ( DelHeader.Count - 1 ) do begin
  52.                if pos( DelHeader[k], LowerCase ( Message.Strings[i] )) = 1
  53. then begin
  54.                   delete ( s, pos(DelHeader[k], LowerCase (s) ), length (
  55. Message.Strings[i] ) + 2 );
  56.                   i := i - 1;
  57.                   k := DelHeader.Count - 1;
  58.                   message.text := s;
  59.                end; // if
  60.                k := k + 1;
  61.             end; // while  
  62.             i := i + 1;
  63.          end; //while
  64.          message.text:=s;
  65.       finally
  66.       DelHeader.Free;
  67.       end; // try - finally
  68.       end; // if  
  69.    end; // if
  70. end; // RemoveHeaders    
  71.  
  72. function StrMatch(str: String; pattern: String):Boolean;
  73. var
  74.   patternSize : Integer;
  75.   subStr : String;
  76.   compareRes : Integer;
  77. begin
  78.   patternSize := Length(pattern);
  79.   subStr := Copy(str, 1, patternSize);
  80.   compareRes := CompareStr(pattern, subStr);
  81.   if (compareRes = 0) then
  82.     result := true
  83.   else
  84.     result := false;
  85. end;
  86.  
  87. //the xxx2Identity() functions must return an empty string if specified string is not identified
  88.  
  89. function From2Identity(from: String): String;
  90. begin  
  91.   if (StrMatch(from, 'First1 Last1 <[email protected]>')) then
  92.     result := 'id1'
  93.   else if (StrMatch(from, 'First2 Last2 <[email protected]>')) then
  94.     result := 'id2'
  95.   else
  96.     result := '';
  97. end;
  98.  
  99. function NewsGroup2Identity(newsgroup: String): String;
  100. begin
  101.   if StrMatch(newsgroup, 'news.software.readers') then
  102.     result := 'id1'
  103.   else if StrMatch(newsgroup, 'alt.free.newsservers') then
  104.     result := 'id2'
  105.   else
  106.     result := '';
  107. end;    
  108.  
  109. function Server2Identity(server: String): String;
  110. begin
  111.   if (CompareStr(server, 'aioe') = 0) then
  112.     result := 'id1'
  113.   else if (CompareStr(server, 'albasani') = 0) then
  114.     result := 'id2'
  115.   else
  116.     result := '';
  117. end;
  118.  
  119. procedure GetIdentities(var message: TStringlist; servername: string;
  120.   isEmail: boolean; FromIdentity: String; NewsgroupIdentity: String;
  121.   ServerIdentity: String);
  122. var i : Integer;
  123. begin
  124.   FromIdentity := '';
  125.   NewsgroupIdentity := '';
  126.   ServerIdentity := '';
  127.   if (not IsEmail) then
  128.   begin
  129.     for i := 0 to Message.Count - 1 do
  130.     begin
  131.       if (strMatch(Message[i], 'From:')) then
  132.         fromIdentity := Copy(Message[i], 7, Length(Message[i]) - 6);
  133.       if (strMatch(Message[i], 'Newsgroups:')) then
  134.         newsgroupIdentity := Copy(Message[i], 13, Length(Message[i]) - 12);
  135.     end;
  136.     fromIdentity := From2Identity(fromIdentity);
  137.     newsgroupIdentity := NewsGroup2Identity(newsgroupIdentity);
  138.     serverIdentity := Server2Identity(servername);
  139.     // The lines below write to the log file ./40tude/logs/20161231.log
  140.     WriteToLog('  fromIdentity = ' + fromIdentity, 7);
  141.     WriteToLog('  newsgroupIdentity = ' + newsgroupIdentity, 7);
  142.     WriteToLog('  serverIdentity = ' + serverIdentity, 7);
  143.   end;
  144. end;  
  145.  
  146. function OnBeforeSendingMessage(var Message     : TStringlist;
  147.                                     Servername  : string;
  148.                                     IsEmail     : boolean
  149. ):boolean;
  150. var
  151.   FromIdentity: String;
  152.   NewsgroupIdentity: String;
  153.   ServerIdentity: String;
  154.   Remove_Headers: String;
  155. begin
  156.   //get the identities of the message
  157.   GetIdentities(message, servername, isEmail, FromIdentity, NewsgroupIdentity, ServerIdentity);
  158.   //check the identities. make sure they are all identified.
  159.   if (FromIdentity <> '') and (NewsgroupIdentity <> '') and (ServerIdentity <> '') then
  160.   begin
  161.     Remove_Headers := '';
  162.  
  163.     {The main decision.
  164.      For FromIdentity, comparison must match against string returned by From2Identity() function.
  165.      Same applies to NewsgroupIdentity and ServerIdentity.
  166.     }
  167.     if FromIdentity = 'id1' then  
  168.       Remove_Headers := 'User-Agent: ,Message-ID: '
  169.     else if FromIdentity = 'id2' then
  170.       Remove_Headers := 'User-Agent: ,Content-Transfer-Encoding: '
  171.     else
  172.       Remove_Headers := 'User-Agent: ,Mime-Version: ';
  173.  
  174.     if Remove_Headers <> '' then RemoveHeaders(Message, IsEmail, Remove_Headers);
  175.   end;
  176.   result := true;
  177. //  result := false; //uncomment this line for testing purposes (doesn't send the message)
  178. end;
  179. // ----------------------------------------------------------------------
  180. begin
  181. end.
Advertisement
Add Comment
Please, Sign In to add comment