Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.68 KB | None | 0 0
  1. unit MainForm;
  2.  
  3. interface
  4.  
  5. uses
  6. Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  7. Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus, ShellApi, Vcl.StdCtrls,imapsend, ssl_openssl, synachar, smtpsend, mimemess, mimepart,
  8. Vcl.OleCtrls, SHDocVw, ActiveX, ComCtrls;
  9.  
  10. procedure CollectEmailData;
  11. procedure IMAPConnection;
  12. function CheckIMAPConnect:boolean;
  13. procedure GetMessageList;
  14. procedure GetParts(const part: TMimepart);
  15. function EncryptStringList(this:TStringList):TStringList;
  16. function DencryptStringList(this:TStringList):TStringList;
  17. procedure GetCryptoMessageList;
  18. function GetPartsModify(const part: TMimepart):TStringList;
  19.  
  20. type
  21. TMaForm = class(TForm)
  22. MainMenu1: TMainMenu;
  23. N1: TMenuItem;
  24. N4: TMenuItem;
  25. N5: TMenuItem;
  26. ListBox1: TListBox;
  27. Label1: TLabel;
  28. Label2: TLabel;
  29. Label3: TLabel;
  30. Label4: TLabel;
  31. Button1: TButton;
  32. Memo1: TMemo;
  33. WebBrowser1: TWebBrowser;
  34. Label5: TLabel;
  35. Label6: TLabel;
  36. Button2: TButton;
  37. Label7: TLabel;
  38. edKey: TEdit;
  39. Button3: TButton;
  40. Button4: TButton;
  41. procedure N4Click(Sender: TObject);
  42. procedure FormClose(Sender: TObject; var Action: TCloseAction);
  43. procedure Button1Click(Sender: TObject);
  44. procedure N3Click(Sender: TObject);
  45. procedure N5Click(Sender: TObject);
  46. procedure FormCreate(Sender: TObject);
  47. procedure FormShow(Sender: TObject);
  48. procedure ListBox1Click(Sender: TObject);
  49. procedure Button2Click(Sender: TObject);
  50. procedure Button3Click(Sender: TObject);
  51. procedure Button4Click(Sender: TObject);
  52. private
  53. { Private declarations }
  54. public
  55. { Public declarations }
  56. end;
  57.  
  58. var
  59. MaForm: TMaForm;
  60. MainEmailLogin, MainEmailPassword, MainMasterPassword, MainSMTPServer, MainIMAPServer: ansistring;
  61. IMAP : TImapsend;
  62. messagelist, CopyMessage : TStringList;
  63. IdMes:TMimeMess;
  64. CountOfMessage : longint;
  65. ResultStringList : TStringList;
  66. kekas : tstringlist;
  67.  
  68. implementation
  69.  
  70. {$R *.dfm}
  71.  
  72. uses EmailLogAuth, Entrance, AllSetting, RequestsToSetting, AES_2, AES_1, SendMail, OpenMail;
  73.  
  74. procedure CollectEmailData;
  75. begin
  76. MainEmailLogin:=EMailLogAuth.ELogAuth.ELogin.Text;
  77. MainEmailPassword:=EMailLogAuth.ELogAuth.EPassword.Text;
  78. MainMasterPassword:=Entrance.Enter.EMasterPassword.Text;
  79. MainSMTPServer:=EMailLogAuth.ELogAuth.eSMTP.Text;
  80. MainIMAPServer:=EMailLogAuth.ELogAuth.eIMAP.Text;
  81. end;
  82.  
  83. function EncryptStringList(this:TStringList):TStringList;
  84. var buffer:TStringList;
  85. I : longint;
  86. begin
  87. buffer:=TStringList.Create;
  88. buffer.Clear;
  89. for I:=0 to this.Count - 1 do
  90. buffer.Add(EncryptString(this[i], MainMasterPassword));
  91. EncryptStringList:=buffer;
  92. end;
  93.  
  94. function DencryptStringList(this:TStringList):TStringList;
  95. var I, CountOfZero, J : longint;
  96. begin
  97. for I := 0 to this.Count - 1 do
  98. begin
  99. CountOfZero:=0;
  100. for J := 1 to length(this[i]) do
  101. if (this[I][J] = '0') then inc(CountOfZero);
  102. if (CountOfZero = length(this[i])) then this[i] := '' else
  103. this[i] := DecryptString(this[i], MainMasterPassword);
  104. end;
  105. DencryptStringList:=this;
  106. end;
  107.  
  108.  
  109.  
  110.  
  111.  
  112. function CheckIMAPConnect:boolean;
  113. begin
  114. if (EmailLogAuth.LocalConnect) then
  115. begin
  116. IMAP.TargetPort := '143';
  117. IMAP.UserName := MainEmailLogin;
  118. IMAP.Password := MainEmailPassword;
  119. IMAP.FullSSL := false;
  120. end else
  121. begin
  122. IMAP.TargetHost := MainIMAPServer;
  123. IMAP.TargetPort := '993';
  124. IMAP.UserName := MainEmailLogin;
  125. IMAP.Password := MainEmailPassword;
  126. IMAP.FullSSL := true;
  127. end;
  128.  
  129.  
  130. if (IMAP.Login) then
  131. begin
  132. CheckIMAPConnect:=TRUE;
  133. IMAP.LogOut;
  134. end else
  135. begin
  136. CheckIMAPConnect:=FALSE;
  137. end;
  138. end;
  139.  
  140.  
  141.  
  142. procedure IMAPConnection;
  143. begin
  144. if (EmailLogAuth.LocalConnect) then
  145. begin
  146. IMAP.TargetPort := '143';
  147. IMAP.UserName := MainEmailLogin;
  148. IMAP.Password := MainEmailPassword;
  149. IMAP.FullSSL := false;
  150. end else
  151. begin
  152. IMAP.TargetHost := MainIMAPServer;
  153. IMAP.TargetPort := '993';
  154. IMAP.UserName := MainEmailLogin;
  155. IMAP.Password := MainEmailPassword;
  156. IMAP.FullSSL := true;
  157. end;
  158.  
  159. if (IMAP.Login) then
  160. begin
  161. MaForm.Label2.Caption:=MainEmailLogin;
  162. MaForm.Label4.Caption:='Connected';
  163. MaForm.Label4.Font.Color:=clgreen;
  164. IMAP.NoOp;
  165. end else
  166. begin
  167. MaForm.Label4.Caption:='ERORR';
  168. MaForm.Label4.Font.Color:=clred;
  169. end;
  170. end;
  171.  
  172. procedure GetMessageList;
  173. var
  174. I : longint;
  175. c : longint;
  176. CountBuffer : TStringList;
  177. begin
  178. IMAP.SelectFolder('INBOX');
  179. CountBuffer:=TSTringList.Create;
  180. CountofMessage:=0;
  181. I:=1;
  182. while (true) do
  183. begin
  184. CountBuffer.Clear;
  185. IMAP.FetchMess(i, CountBuffer);
  186. if (CountBuffer.Count <> 0) then inc(CountofMessage) else break;
  187. inc(I);
  188. end;
  189. IdMes:=TMimeMess.Create;
  190. c := 0;
  191. for I := CountOfMessage downto 1 do
  192. begin
  193. inc(c);
  194. messagelist.Clear;
  195. IMAP.FetchMess(I, messagelist);
  196. IdMes.Clear;
  197. IdMes.Lines.AddStrings(messagelist);
  198. //FetchOfMessage[c - 1] := messagelist;
  199. IdMes.DecodeMessage;
  200. //showmessage(DateToStr(IdMes.Header.Date));
  201. MaForm.ListBox1.Items.Add(inttostr(c) + ' ' + IdMes.Header.From + ' ' + IdMes.Header.Subject);
  202. end;
  203.  
  204. {IMAP.FetchMess(1530, messagelist);
  205. IdMes.Lines.AddStrings(messagelist);
  206. IdMes.DecodeMessage;
  207. showmessage(IdMes.Header.From + ' ' + IdMes.Header.Subject);}
  208. end;
  209.  
  210. function GetPartsModify(const part: TMimepart):TStringList;
  211. var
  212. s: string;
  213. i: integer;
  214. begin
  215. if (LowerCase(part.Primary)='text') and (LowerCase(part.FileName)='') then
  216. begin
  217. part.DecodePart;
  218. ResultStringList.LoadFromStream(part.DecodedLines);
  219. end;
  220. { if LowerCase(part.FileName)<>'' then begin
  221. part.DecodePart;
  222. part.DecodedLines.SaveToFile('С:\'+part.FileName) ;
  223. Memo3.Lines.Add('Cохранено в '+'c:\'+part.FileName)
  224. end; }
  225. for i := 0 to part.GetSubPartCount - 1 do
  226. GetPartsModify( part.getsubpart(i));
  227. GetPartsModify := ResultStringList;
  228. end;
  229.  
  230.  
  231. procedure GetCryptoMessageList;
  232. var
  233. I : longint;
  234. c : longint;
  235. CountBuffer : TStringList;
  236. BodyOfMess : TStringList;
  237. Mes, MesCopy : TMimeMess;
  238. begin
  239. IMAP.SelectFolder('CryptoMail');
  240. CountBuffer:=TSTringList.Create;
  241. ResultStringList:=TStringList.Create;
  242. BodyOfMess:=TStringList.Create;
  243. CountofMessage:=0;
  244. I:=1;
  245. while (true) do
  246. begin
  247. CountBuffer.Clear;
  248. IMAP.FetchMess(i, CountBuffer);
  249. if (CountBuffer.Count <> 0) then inc(CountofMessage) else break;
  250. inc(I);
  251. end;
  252. Mes:=TMimeMess.Create;
  253. MesCopy:=TMimeMess.Create;
  254. c := 0;
  255. for I := CountOfMessage downto 1 do // CountOfMessage
  256. begin
  257. inc(c);
  258. messagelist.Clear;
  259. BodyOfMess.Clear;
  260. IMAP.FetchMess(I, messagelist);
  261. Mes.Clear;
  262. Mes.Lines.AddStrings(messagelist);
  263. Mes.DecodeMessage;
  264. ResultStringList.Clear;
  265. GetPartsModify(Mes.MessagePart);
  266. ResultStringList:=DencryptStringList(ResultStringList);
  267. //showmessage(ResultStringList.Text);
  268. MesCopy.Clear;
  269. MesCopy.Lines.AddStrings(ResultStringList);
  270. MesCopy.DecodeMessage;
  271. //showmessage(datetostr(MesCopy.Header.Date));
  272. MaForm.ListBox1.Items.Add(inttostr(c) + ' ' + MesCopy.Header.From + ' ' + MesCopy.Header.Subject);
  273. end;
  274.  
  275. end;
  276.  
  277.  
  278.  
  279.  
  280.  
  281. procedure TMaForm.Button1Click(Sender: TObject);
  282. begin
  283. MaForm.ListBox1.clear;
  284. GetCryptoMessageList;
  285. //GetMessageList;
  286. //openm.Show;
  287. end;
  288.  
  289. procedure TMaForm.Button2Click(Sender: TObject);
  290. var I, CountOfMess : longint;
  291. buffer : TStringList;
  292. Current : TDateTime;
  293. theme : string;
  294. Messages:array of TStringList;
  295. folder_list : TStringList;
  296. need_create_folder : boolean;
  297. begin
  298. folder_list := TStringList.Create;
  299. need_create_folder := TRUE;
  300. IMAP.List('', folder_list);
  301. //showmessage(folder_list.Text);
  302. for i := 0 to folder_list.count - 1 do
  303. begin
  304. if (folder_list[i] = 'CryptoMail') then need_create_folder := FALSE;
  305. end;
  306.  
  307. if (need_create_folder = TRUE) then
  308. begin
  309. IMAP.CreateFolder('CryptoMail');
  310. end;
  311.  
  312. IMAP.SelectFolder('INBOX');
  313. buffer:=TStringList.Create;
  314. I := 0;
  315. CountOfMess := 0;
  316. while (true) do
  317. begin
  318. Inc(I);
  319. Buffer.Clear;
  320. IMAP.FetchMess(I, Buffer);
  321. if (Buffer.Count <> 0) then Inc(CountOfMess) else break;
  322.  
  323. end;
  324. showmessage(inttostr(countofmess));
  325. for I := 1 to CountOfMess do
  326. begin
  327. Buffer.Clear;
  328. IMAP.FetchMess(I, Buffer);
  329. SendTechMail(EncryptStringList(buffer), 'CryptoMail');
  330. end;
  331. for I := 1 to CountOfMess do
  332. begin
  333. IMAP.DeleteMess(1);
  334. IMAP.ExpungeFolder;
  335. sleep(500);
  336. end;
  337. for I := 1 to CountOfMess do
  338. IMAP.CopyMess(I, 'CryptoMail');
  339. for I := 1 to CountOfMess do
  340. begin
  341. IMAP.DeleteMess(1);
  342. IMAP.ExpungeFolder;
  343. sleep(500);
  344. end;
  345.  
  346.  
  347. {while (true) do
  348. begin
  349. Inc(I);
  350. Buffer.Clear;
  351. IMAP.FetchMess(I, Buffer);
  352. Messages[I] := Buffer;
  353. if (Buffer.Count <> 0) then Inc(CountOfMess) else break;
  354. showmessage(inttostr(i));
  355. showmessage(Messages[I - 1].Text);
  356. end;
  357. for I := 1 to CountOfMess do
  358. begin
  359. IMAP.DeleteMess(1);
  360. IMAP.ExpungeFolder;
  361. end;
  362. showmessage(inttostr(countofmess));
  363. for I := 1 to CountOfMess do
  364. begin
  365. showmessage(messages[i].Text);
  366. Messages[i] := EncryptStringList(Messages[i]);
  367. showmessage(messages[i].Text);
  368. end;
  369. for I := 1 to CountofMess do
  370. begin
  371. theme:='';
  372. theme:=DateToStr(time) + DateTostr(now);
  373. showmessage(Messages[i].text);
  374. SendTechMail(Messages[i], theme);
  375. end;
  376. for I := 1 to CountOfMess do
  377. begin
  378. IMAP.CopyMess(1, 'CryptoMail');
  379. IMAP.DeleteMess(1);
  380. end;
  381. }
  382.  
  383. end;
  384.  
  385. procedure TMaForm.Button3Click(Sender: TObject);
  386. var buf:TStringList;
  387. I : longint;
  388. begin
  389. //showmessage(inttostr(length(copymessage[0])));
  390. buf := TStringList.Create;
  391. for i := 0 to kekas.Count - 1 do
  392. begin
  393. buf.Add(DecryptString(kekas[i], MaForm.edKey.Text));
  394. end;
  395.  
  396. MaForm.Memo1.Clear;
  397. MaForm.Memo1.Lines.AddStrings(buf);
  398. {
  399. for I := 0 to MaForm.Memo1.lines.Count - 1 do
  400. MaForm.Memo1.Lines[i] := DecryptString(MaForm.Memo1.Lines[i], MaForm.edKey.Text);
  401. }
  402. end;
  403.  
  404. procedure TMaForm.Button4Click(Sender: TObject);
  405. begin
  406. MaForm.Memo1.Clear;
  407. Maform.Memo1.Lines.AddStrings(CopyMessage);
  408. end;
  409.  
  410. procedure TMaForm.FormClose(Sender: TObject; var Action: TCloseAction);
  411. begin
  412. application.Terminate;
  413. end;
  414.  
  415.  
  416.  
  417. procedure TMaForm.FormCreate(Sender: TObject);
  418. var I : longint;
  419. begin
  420. IMAP := TImapsend.Create;
  421. messagelist := Tstringlist.Create;
  422. kekas := TStringList.Create;
  423. end;
  424.  
  425. procedure TMaForm.FormShow(Sender: TObject);
  426. begin
  427. IMAPConnection;
  428. end;
  429.  
  430. procedure GetParts(const part: TMimepart);
  431. var
  432. s: string;
  433. i: integer;
  434. buffer : TMemoryStream;
  435. begin
  436. if (LowerCase(part.Primary)='text') and (LowerCase(part.FileName)='') then
  437. begin
  438. part.DecodePart;
  439. if LowerCase(part.Secondary)='plain' then
  440. begin
  441.  
  442.  
  443. kekas := TStringList.Create;
  444. kekas.LoadFromStream(part.DecodedLines);
  445.  
  446. Maform.Memo1.Lines.AddStrings(kekas);
  447.  
  448.  
  449. end
  450. else
  451. begin
  452. MaForm.WebBrowser1.Navigate('html.htm');
  453. while MaForm.WebBrowser1.ReadyState < READYSTATE_INTERACTIVE do
  454. Application.ProcessMessages;
  455. (MaForm.WebBrowser1.Document as
  456. IPersistStreamInit).Load(TStreamAdapter.Create(part.DecodedLines));
  457. end;
  458. end;
  459. { if LowerCase(part.FileName)<>'' then begin
  460. part.DecodePart;
  461. part.DecodedLines.SaveToFile('С:\'+part.FileName) ;
  462. Memo3.Lines.Add('Cохранено в '+'c:\'+part.FileName)
  463. end; }
  464. for i := 0 to part.GetSubPartCount - 1 do
  465. GetParts( part.getsubpart(i));
  466. end;
  467.  
  468. procedure TMaForm.ListBox1Click(Sender: TObject);
  469. var buffer:TStringList;
  470. index:longint;
  471. Mes, MesCopy : TMimeMess;
  472. BodyOfMess : TStringList;
  473. I, CountOfmessage : longint;
  474. buf:TStringList;
  475.  
  476. begin
  477. IMAP.SelectFolder('CryptoMail');
  478. i:=0;
  479. countofmessage:=0;
  480. buf:=TStringList.Create;
  481. while (true) do
  482. begin
  483. inc(i);
  484. IMAP.FetchMess(i, buf);
  485. if (buf.Count <> 0) then inc(countofmessage) else break;
  486. end;
  487. buffer:=TStringList.Create;
  488. BodyOfMess:=TStringList.Create;
  489. Mes:=TMimeMess.Create;
  490. MesCopy:=TMimeMess.Create;
  491. index:= COuntOfMessage - listbox1.ItemIndex;
  492. IMAP.FetchMess(index, buffer);
  493. ResultStringList.Create;
  494. Mes.Clear;
  495. Mes.Lines.AddStrings(buffer);
  496. Mes.DecodeMessage;
  497. GetPartsModify(Mes.MessagePart);
  498. ResultStringList:=DencryptStringList(ResultStringList);
  499. //showmessage(inttostr(listbox1.ItemIndex));
  500. MaForm.Memo1.Clear;
  501. MesCopy.Clear;
  502. //showmessage(buffer.Text);
  503. //showmessage(ResultStringList.Text);
  504. MesCopy.Lines.AddStrings(ResultStringList);
  505. MesCopy.DecodeMessage;
  506. GetParts(MesCopy.MessagePart);
  507. CopyMessage:=TStringList.Create;
  508. CopyMessage.Clear;
  509. for I := 0 to Memo1.Lines.Count - 1 do
  510. CopyMessage.Add(Memo1.Lines[i]);
  511. end;
  512.  
  513. procedure TMaForm.N3Click(Sender: TObject);
  514. begin
  515. Settings.show;
  516. UpdateSettingData;
  517. maform.Hide;
  518. //continue;
  519. end;
  520.  
  521. procedure TMaForm.N4Click(Sender: TObject);
  522. begin
  523. ShellExecute(Handle, 'open', 'c:\windows\notepad.exe', 'manual.txt', nil, SW_SHOWNORMAL);
  524. end;
  525.  
  526. procedure TMaForm.N5Click(Sender: TObject);
  527. begin
  528. form2.show;
  529. MaForm.Hide;
  530. end;
  531.  
  532. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement