Advertisement
Guest User

Untitled

a guest
Jan 5th, 2017
310
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.62 KB | None | 0 0
  1. // JJAddAndRemoveHeadersWhileDoubleCheckingIdentityNgAndServers
  2. // Goal: Keep personal and business mail or news conditions separate
  3. // <http://pastebin.com/2tMYRKM4>
  4. // Additional comments & examples: http://pastebin.com/LvPvMCPN
  5. // From: JJ <jj4public@vfemail.net>
  6. // Newsgroups: news.software.readers,alt.windows7.general
  7. // Subject: Re: Request help with 40tude dialog program syntax
  8. // Date: Thu, 5 Jan 2017 23:06:19 +0700
  9. // Message-ID: <7vpx5y09pu98.1sukl5d600sda$.dlg@40tude.net>
  10. // Original code for checking identity:
  11. // http://dialog.datalist.org/scripts/CheckingIdentity.html
  12. // Original code for modifying headers:
  13. // http://dialog.datalist.org/scripts/RemoveHeaders.html
  14. // CUSTOMIZATION:
  15. // 1. Set the "ForEmail" Boolean as desired (search for "ForEmail :")
  16. // 2. Set the "ForNewsgroup" Boolean as desired (search for "ForNewsgroup :")
  17. // 3. Change identity as desired (search for "from,")
  18. // 4. If ForNewsgroup is true, change newsgroup as desired (search for "newsgroup,")
  19. // 5. Change server as desired (search for "server,")
  20. // 6. Change remove header as desired (search for "Remove_Headers :")
  21. // 7. Change add header as desired (search for "Add_Headers :")
  22.  
  23. program OnBeforeSendingMessage;
  24.  
  25. (*
  26. Format for Remove_Headers: {} = required, [] = optional
  27. {HeaderName: }[,HeaderName: ][,HeaderName: ][...]
  28. Examples:
  29. - Single header: 'User-Agent: '
  30. - Multiple headers: 'User-Agent: ,X-Face: '
  31. *)
  32. procedure RemoveHeaders(Message : TStringlist;
  33. const Remove_Headers: String
  34. );
  35. var i : integer;
  36. k : integer;
  37. s : string;
  38. CommaPos : integer;
  39. DelHeader : TStringlist;
  40. RemoveH : String;
  41. begin
  42. RemoveH := Remove_Headers;
  43. i := 0;
  44. If ( RemoveH <> '' ) then begin
  45. try
  46. DelHeader := TStringlist.Create;
  47. if ansipos ( ',', RemoveH) = 0 then begin
  48. DelHeader.Add ( LowerCase ( TrimLeft( RemoveH )));
  49. end // if
  50. else begin
  51. CommaPos := 0;
  52. for k := 1 to length ( RemoveH ) do begin
  53. If RemoveH[k] = ',' then begin
  54. DelHeader.Add ( LowerCase ( TrimLeft (copy ( RemoveH, CommaPos + 1, k - ( CommaPos + 1 )))));
  55. CommaPos := k;
  56. end; // if
  57. if k = length ( RemoveH ) then
  58. DelHeader.Add ( LowerCase ( TrimLeft (copy ( RemoveH, CommaPos + 1, k - CommaPos ))));
  59. end; // for
  60. end; // else
  61. s:= Message.text;
  62. while (Message.Strings[i]<>'') do begin
  63. k := 0;
  64. while k <= ( DelHeader.Count - 1 ) do begin
  65. if pos( DelHeader[k], LowerCase ( Message.Strings[i] )) = 1 then
  66. begin
  67. delete ( s, pos(DelHeader[k], LowerCase (s) ), length (Message.Strings[i] ) + 2 );
  68. i := i - 1;
  69. k := DelHeader.Count - 1;
  70. message.text := s;
  71. end; // if
  72. k := k + 1;
  73. end; // while
  74. i := i + 1;
  75. end; //while
  76. message.text:=s;
  77. finally
  78. DelHeader.Free;
  79. end; // try - finally
  80. end; // if
  81. end; // RemoveHeaders
  82.  
  83. (*
  84. Format for Add_Headers: {} = required, [] = optional
  85. {HeaderName: HeaderValue{#13#10}}[HeaderName: HeaderValue{#13#10}][...]
  86. Examples: (each header must end with CR+LF)
  87. - Single header: 'User-Agent: '#13#10
  88. - Multiple headers: 'User-Agent: MyNewsClient'#13#10'X-Comment: To be, or not to be'#13#10
  89.  
  90. WARNING: For the Add_Header, you MUST add the pound13-Pound10 as shown in the examples!
  91. If you forget to add the #13#10, then Dialog will error when you send news saying something like:
  92. Posting article failed: 437 Space before colon in "On Fri, 6 Jan 2017" header;
  93. *)
  94. procedure AddHeaders(var Message : TStringlist;
  95. const Add_Headers: String
  96. );
  97. var
  98. SeparatorIndex: integer;
  99. s: string;
  100. begin
  101. s:= Message.Text;
  102. // writetolog('***before***'#13#10+s, 7);
  103. SeparatorIndex:= pos(#13#10#13#10, s);
  104. Insert(Add_Headers, s, SeparatorIndex+2);
  105. Message.Text:= s;
  106. // writetolog('***after***'#13#10+s, 7);
  107. end;
  108.  
  109. function StrMatch(str: String; pattern: String):Boolean;
  110. var
  111. patternSize : Integer;
  112. subStr : String;
  113. compareRes : Integer;
  114. begin
  115. patternSize := Length(pattern);
  116. subStr := Copy(str, 1, patternSize);
  117. compareRes := CompareStr(pattern, subStr);
  118. if (compareRes = 0) then
  119. result := true
  120. else
  121. result := false;
  122. end;
  123.  
  124. //the xxx2Identity() functions must return an empty string if specified string is not identified
  125.  
  126. function From2Identity(from: String): String;
  127. begin
  128. if (StrMatch(from, 'First1 Last1 <email1@example.com>')) then
  129. result := 'id1'
  130. else if (StrMatch(from, 'First2 Last2 <email2@example.com>')) then
  131. result := 'id2'
  132. else if (StrMatch(from, 'First3 Last3 <email3@example.com>')) then
  133. result := 'id3'
  134. else
  135. result := '';
  136. end;
  137.  
  138. function NewsGroup2Identity(newsgroup: String): String;
  139. // news.software.readers,alt.windows7.general
  140. //SYNTAX: if (StrMatch(newsgroup, 'ng1') or StrMatch(newsgroup, 'ng2')) then
  141. begin
  142. if (StrMatch (newsgroup, 'news.software.readers') or StrMatch(newsgroup, 'alt.free.newssservers')) then
  143. result := 'id1'
  144. else if StrMatch(newsgroup, 'alt.free.newsservers') then
  145. result := 'id2'
  146. else if StrMatch(newsgroup, 'alt.test') then
  147. result := 'id3'
  148. else
  149. result := '';
  150. end;
  151.  
  152. function Server2Identity(server: String): String;
  153. begin
  154. if (CompareStr(server, 'aioe_119') = 0) then
  155. result := 'id1'
  156. else if (CompareStr(server, 'mixmin_563') = 0) then
  157. result := 'id2'
  158. else
  159. result := '';
  160. end;
  161.  
  162. procedure GetIdentities(var message: TStringlist; servername: string;
  163. isEmail: boolean; var FromIdentity: String; var NewsgroupIdentity: String;
  164. var ServerIdentity: String);
  165. var i : Integer;
  166. begin
  167. FromIdentity := '';
  168. NewsgroupIdentity := '';
  169. ServerIdentity := '';
  170. if (not IsEmail) then
  171. begin
  172. for i := 0 to Message.Count - 1 do
  173. begin
  174. if (strMatch(Message[i], 'From:')) then
  175. fromIdentity := Copy(Message[i], 7, Length(Message[i]) - 6);
  176. if (strMatch(Message[i], 'Newsgroups:')) then
  177. newsgroupIdentity := Copy(Message[i], 13, Length(Message[i]) - 12);
  178. end;
  179. fromIdentity := From2Identity(fromIdentity);
  180. newsgroupIdentity := NewsGroup2Identity(newsgroupIdentity);
  181. serverIdentity := Server2Identity(servername);
  182. // The lines below write to the log file of the format ./40tude/logs/20161231.log
  183. WriteToLog(' fromIdentity = ' + fromIdentity, 7);
  184. WriteToLog(' newsgroupIdentity = ' + newsgroupIdentity, 7);
  185. WriteToLog(' serverIdentity = ' + serverIdentity, 7);
  186. end;
  187. end;
  188.  
  189. procedure LogHeaders(var Message: TStringlist);
  190. var
  191. i: integer;
  192. s: string;
  193. begin
  194. s:= '';
  195. for i:= 0 to message.count-1 do
  196. begin
  197. if message[i] <> '' then s:= s+message[i]+#13#10
  198. else break;
  199. end;
  200. writetolog(s, 7);
  201. end;
  202.  
  203. function OnBeforeSendingMessage(var Message : TStringlist;
  204. Servername : string;
  205. IsEmail : boolean
  206. ):boolean;
  207. var
  208. ForEmail: boolean;
  209. ForNewsgroup : boolean;
  210. FromIdentity: String;
  211. NewsgroupIdentity: String;
  212. ServerIdentity: String;
  213. Remove_Headers: String;
  214. Add_Headers: String;
  215. begin
  216. //get the identities of the message
  217. GetIdentities(message, servername, isEmail, FromIdentity, NewsgroupIdentity, ServerIdentity);
  218.  
  219. // Four program decisions to be made if you wish to change the program defaults:
  220. // 1. This Boolean sets whether email headers are modified:
  221. // ForEmail := false; //false means don't do email message by default
  222. // ForEmail := true; //true means do email headers
  223. // 2. This Boolean sets whether newsgroup headers are modified:
  224. // ForNewsgroup := false; //false means don't do newsgroup message by default
  225. // ForNewsgroup := true; //true means do newsgroup messages
  226. // 3. This string syntax sets the default headers to remove (if not redefined):
  227. // Remove_Headers := ''; //null means don't remove any header by default
  228. // Remove_Headers := 'User-Agent: ,Message-ID: '; //string means remove these headers
  229. // 4. This string syntax sets the default headers to add (if not redefined):
  230. // Add_Headers := ''; //null means don't add any header by default
  231. // Add_Headers := 'X-Comment: John Doe was here'; //string means add these header strings
  232. ForEmail := false; //false means don't do email message by default
  233. ForNewsgroup := true; //true means do newsgroup messages
  234. Remove_Headers := ''; //null means don't remove any header by default
  235. Add_Headers := ''; //null means don't add any header by default
  236.  
  237. {The main decision.
  238.  
  239. For FromIdentity, comparison must match against string returned by From2Identity() function.
  240. Same applies to NewsgroupIdentity and ServerIdentity.
  241. Note that identities may be an empty string.
  242.  
  243. Set Remove_Header to remove header(s).
  244. Set Add_Header to add header(s).
  245. Set ForEmail and/or ForNewsgroup to `true` to add/remove header for email/newsgroup messages.
  246. }
  247. // Remove_Headers := 'User-Agent: ,Message-ID: ,Date: ,Mime-Version: ,Content-Type: ,Content-Transfer-Encoding: ';
  248. if FromIdentity = 'id1' then
  249. begin
  250. ForNewsgroup := true;
  251. Remove_Headers := 'User-Agent: ,Message-ID: ';
  252. Remove_Headers := 'User-Agent: ,Message-ID: ,Date: ,Mime-Version: ,Content-Type: ,Content-Transfer-Encoding: ';
  253. Add_Headers := 'X-Comment: JJ is a veritable genius!'#13#10;
  254. end
  255. else if (FromIdentity = 'id2') and (NewsgroupIdentity = 'id1') then
  256. begin
  257. ForNewsgroup := true;
  258. Remove_Headers := 'User-Agent: ,Content-Transfer-Encoding: '
  259. Add_Headers := 'X-Comment: John Doe was here'#13#10;
  260. end
  261. else if (FromIdentity = 'id3') and (ServerIdentity = 'id2') then
  262. begin
  263. ForEmail := true;
  264. ForNewsgroup := true;
  265. Remove_Headers := 'User-Agent: ,Mime-Version: ';
  266. Add_Headers := 'X-Comment: Jane Doe was here'#13#10 +
  267. 'X-Greeting: Hello there!'#13#10;
  268. end;
  269.  
  270. if (IsEmail and ForEmail) or ((not IsEmail) and ForNewsgroup) then
  271. begin
  272. if Remove_Headers <> '' then RemoveHeaders(Message, Remove_Headers);
  273. if Add_Headers <> '' then AddHeaders(Message, Add_Headers);
  274. end;
  275.  
  276. result := true;
  277. // result := false; //uncomment this line for testing purposes (doesn't send the message)
  278. end;
  279. // ----------------------------------------------------------------------
  280. begin
  281. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement