public List <string> Send() { List <string> Result = new List <string>(); Encryption enc = new Encryption(); //links encrpytion Campaign campaign = new Campaign(Artisan); //int c_seed = 0; dynamic cdata = campaign.Campaign_info(Id); //get info campaign if (cdata != null) { string raw_rp = Convert.ToString(cdata.return_path); string[] seed_emails = Campaign.Convert_emails(Convert.ToString(cdata.email_test)); string raw_hd = Text.Base64Decode(Convert.ToString(cdata.header)); string raw_bd = Text.Base64Decode(Convert.ToString(cdata.body)); var servers = Campaign.Bulk_split(Convert.ToString(cdata.ips)); string file = Storage + "/" + Convert.ToString(cdata.send_file); string platform = Convert.ToString(cdata.platform); string redirect_link = Convert.ToString(cdata.redirect_link); string unsubscribe_link = Convert.ToString(cdata.unsubscribe_link); int countIps = servers.Count; List <Task> tasks = new List <Task>(); for (int i = 0; i < Loop; i++) { var info_send = campaign.Campaign_send_info(Id); if (info_send != null) { int dataToSend = countIps * Fraction; int total_sended = int.Parse((string)info_send.send_progress); int file_count = int.Parse((string)info_send.send_count); int value_to_send; if (total_sended + dataToSend >= file_count) { if (total_sended - file_count <= 0) { campaign.Campaign_update_progress(Id, "finish", true, 0); Result.Add("Campaign Ended" + Id); return(Result); } else { value_to_send = file_count - total_sended; } } else { value_to_send = dataToSend; } List <int> ipLimit = Campaign.DistributeInteger(value_to_send, countIps).ToList(); for (int j = 0; j < countIps; j++) { int current = j; tasks.Add( Task.Factory.StartNew(() => { try { if (ipLimit[current] > 0) { var details_server = campaign.Server_info(int.Parse(servers[current][4])); if (details_server != null) { int skip = (current == 0 ? 0 : ipLimit.Take(current).Sum()) + total_sended; List <string[]> emails = File.ReadLines(file).Skip(skip).Take(ipLimit[current]) .Select(t => t.Trim().Split(',')) .Where(item => item.Length == 2) .ToList(); if (emails.Count > 0) { PickupFile helper = new PickupFile(); } } } } catch (Exception ex) { logger.Error($"ERR {ex.Message} -- {ex.StackTrace}"); Console.WriteLine($"ERR {ex.Message} -- {ex.StackTrace}"); } }) ); } Task.WaitAll(tasks.ToArray()); campaign.Campaign_update_send(Id, value_to_send + total_sended); campaign.Campaign_update_progress(Id, "start", true, 0); } else { Result.Add("Cant get Send progress campaign" + Id); logger.Error("Cant get Send progress campaign" + Id); campaign.Campaign_update_progress(Id, "start", true, 0); } } } return(Result); }
public List <string> Send() { List <string> Result = new List <string>(); Encryption enc = new Encryption(); //links encrpytion Campaign campaign = new Campaign(Artisan); int c_seed = 0; dynamic cdata = campaign.Campaign_info(Id); //get info campaign if (cdata != null) { string raw_rp = Convert.ToString(cdata.return_path); string[] seed_emails = Campaign.Convert_emails(Convert.ToString(cdata.email_test)); string raw_hd = Text.Base64Decode(Convert.ToString(cdata.header)); string raw_bd = Text.Base64Decode(Convert.ToString(cdata.body)); var servers = Campaign.Bulk_split(Convert.ToString(cdata.ips)); string file = Storage + "/" + Convert.ToString(cdata.send_file); string platform = Convert.ToString(cdata.platform); string redirect_link = Convert.ToString(cdata.redirect_link); string unsubscribe_link = Convert.ToString(cdata.unsubscribe_link); int countlines = int.Parse(Convert.ToString(cdata.send_count)); int countIps = servers.Count; List <int> ipLimit = Campaign.DistributeInteger(countlines, countIps).ToList(); List <Task> tasks = new List <Task>(); for (int i = 0; i < countIps; i++) { int current = i; tasks.Add( Task.Factory.StartNew(() => { try { if (ipLimit[current] > 0) { var details_server = campaign.Server_info(int.Parse(servers[current][4])); if (details_server != null) { Pmta p = new Pmta(Convert.ToString(details_server.ip), Password); //load pmta int skip = current == 0 ? 0 : ipLimit.Take(current).Sum(); Console.WriteLine("skip " + skip); List <string[]> emails = File.ReadLines(file).Skip(skip).Take(ipLimit[current]) .Select(t => t.Trim().Split(',')) .Where(item => item.Length == 2) .ToList(); if (emails.Count > 0) { string email_ip = servers[current][0]; string domain = servers[current][1]; string rdns = Text.Rdns(email_ip, domain); string vmta_ip = email_ip.Replace(':', '.'); string vmta = Mta.ToLower() == "none" ? $"mta-{vmta_ip}" : (Mta == "vmta" ? $"vmta-{vmta_ip}-{Username}" : $"smtp-{vmta_ip}-{Username}"); string job = $"{Id}"; string rp = Text.Build_rp(raw_rp, domain, rdns, "reply"); Message message = new Message(rp); string header = Text.Header_normal(raw_hd); message.AddMergeData(Text.Generate(header + "\n" + raw_bd)); message.VirtualMTA = vmta; message.JobID = Id.ToString(); message.Verp = false; message.Encoding = Encoding.EightBit; foreach (string[] email in emails) { Recipient r = new Recipient(email[1]); //links r["red"] = enc.Encrypt($"r!!{Id}!!{servers[current][2]}!!{servers[current][3]}!!{email[0]}!!{redirect_link}!!{platform}"); r["unsub"] = enc.Encrypt($"u!!{Id}!!{servers[current][2]}!!{servers[current][3]}!!{email[0]}!!{unsubscribe_link}"); r["opn"] = enc.Encrypt($"o!!{Id}!!{servers[current][2]}!!{servers[current][3]}!!{email[0]}"); r["out"] = enc.Encrypt($"out!!{new Random().Next(5, 15)}"); r["short"] = enc.Encrypt(email[0]); //shortlink //header body r["pe"] = $"n,{Id},{Username},{servers[current][2]},{servers[current][3]},{email[0]}"; r["ip"] = email_ip; r["domain"] = domain; r["rdns"] = rdns; r["name"] = email[1].Split('@')[0]; r["to"] = email[1]; r["date"] = Text.GetRFC822Date(); r["boundary"] = Text.Random("[rndlu/30]"); r["*parts"] = "1"; message.AddRecipient(r); Interlocked.Increment(ref c_seed); if (Seed != 0 && c_seed % Seed == 0) { if (seed_emails.Length > 0) { foreach (string test_email in seed_emails) { Recipient t = new Recipient(test_email); //links t["red"] = enc.Encrypt($"r!!{Id}!!{servers[current][2]}!!{servers[current][3]}!!0!!{redirect_link}!!{platform}"); t["unsub"] = enc.Encrypt($"u!!{Id}!!{servers[current][2]}!!{servers[current][3]}!!0!!{unsubscribe_link}"); t["opn"] = enc.Encrypt($"o!!{Id}!!{servers[current][2]}!!{servers[current][3]}!!0"); t["out"] = enc.Encrypt($"out!!{new Random().Next(5, 10)}"); t["short"] = enc.Encrypt("0"); //shortlink //header body t["pe"] = $"t,{Id},{Username},!!{servers[current][2]}!!{servers[current][3]}!!,0"; t["ip"] = email_ip; t["domain"] = domain; t["rdns"] = rdns; t["name"] = test_email.Split('@')[0]; t["to"] = email[1]; t["date"] = Text.GetRFC822Date(); t["boundary"] = Text.Random("[rndlu/30]"); t["*parts"] = "1"; message.AddRecipient(t); } } } } p.Send(message); p.Close(); //Task.Run(() => campaign.Campaign_update_send(Id, skip + ipLimit[current])); return; } else { logger.Error("Emails Empty" + Id); p.Close(); return; } } } } catch (Exception ex) { logger.Error($"ERR {ex.Message} -- {ex.StackTrace}"); Console.WriteLine($"ERR {ex.Message} -- {ex.StackTrace}"); } }) ); } Task.WaitAll(tasks.ToArray()); campaign.Campaign_update_send(Id, countlines); campaign.Campaign_update_progress(Id, "start", true, 0); return(Result); } else { Result.Add("Campaign Not Found " + Id); logger.Debug("Campaign Not Found " + Id); campaign.Campaign_update_progress(Id, "start", true, 0); return(Result); } }
public List <string> Send() { List <string> Result = new List <string>(); Campaign campaign = new Campaign(Artisan); List <Task> tasks = new List <Task>(); Random random = new Random(); int c_seed = 0; int placeholder_counter = 1; for (int l = 0; l < Loop; l++) //loop { Console.WriteLine("Loop : " + l); try { dynamic cdata = campaign.Campaign_info(Id); if (cdata != null) { string raw_rp = Convert.ToString(cdata.return_path) ?? ""; string[] seed_emails = Campaign.Convert_emails(Convert.ToString(cdata.email_test)); string raw_hd = Text.Base64Decode(Convert.ToString(cdata.header)); string raw_bd = Text.Base64Decode(Convert.ToString(cdata.body)); var servers = Campaign.Bulk_split(Convert.ToString(cdata.ips)); if (servers.Count == 0) { Result.Add("No Servers To Process"); logger.Error("No Servers To Process"); campaign.Campaign_update_progress(Id, "start", true, 0); return(Result); } string file = "/" + Convert.ToString(cdata.send_file); string platform = Convert.ToString(cdata.platform); string redirect_link = Convert.ToString(cdata.redirect_link); string unsubscribe_link = Convert.ToString(cdata.unsubscribe_link); bool IsPlaceholder = Convert.ToString(cdata.is_placeholder) == "1"; if (IsPlaceholder) { Placeholder = new Placeholder(cdata.placeholder_data, (int)cdata.placeholder_every); } bool IsAutoReply = Convert.ToString(cdata.is_auto_reply) == "1"; if (IsAutoReply) { Reply = new Rotation(cdata.auto_reply_data, (int)cdata.auto_reply_every); } bool IsNegative = Convert.ToString(cdata.is_negative) == "1"; if (IsNegative && string.IsNullOrEmpty(Negative)) { Negative = campaign.Campaign_negative(Convert.ToString(cdata.negative)); } if (IsNegative) { raw_bd = Text.Build_negative(raw_bd, Negative); } string mta = Convert.ToString(cdata.option); int progress = int.Parse(Convert.ToString(cdata.send_progress)); int total = int.Parse(Convert.ToString(cdata.send_count)); int countIps = servers.Count; if (total - progress <= 0) { campaign.Campaign_update_progress(Id, "finish", true, 0); return(Result); } int toSend = countIps * Fraction; if (total - (progress + (countIps * Fraction)) < 0) { toSend = total - progress; } List <int> ipLimit = Campaign.DistributeInteger(toSend, countIps).ToList(); for (int i = 0; i < countIps; i++) { int current = i; tasks.Add( Task.Factory.StartNew(() => { try { if (ipLimit[current] > 0) { var details_server = campaign.Server_info(int.Parse(servers[current][4])); if (details_server != null) { Pmta p = new Pmta(Convert.ToString(details_server.ip), Password); //load pmta int skip = (current == 0 ? 0 : ipLimit.Take(current).Sum()) + progress; Console.WriteLine("skip " + skip); List <string[]> emails = File.ReadLines(Storage + file).Skip(skip).Take(ipLimit[current]) .Select(t => t.Trim().Split(',')) .Where(item => item.Length == 2) .ToList(); if (emails.Count > 0) { string vmta = "mta-" + servers[current][0].Replace(":", "."); if (servers[current].Length == 6) { vmta = $"{mta}-{servers[current][0].Replace(":", ".")}-{servers[current][5]}"; } string rdns = Text.Rdns(servers[current][0], servers[current][1]); string rp = Text.Build_rp(raw_rp, servers[current][1], rdns, "info"); rp = IsPlaceholder ? Placeholder.ReplaceRotate(rp, placeholder_counter, true) : rp; Message message = new Message(rp); string header = Text.Header_normal(raw_hd); string genB = Text.ReplaceBoundary(header + "\n" + raw_bd + "\n\n"); message.AddMergeData(Text.Generate(genB)); message.VirtualMTA = vmta; message.JobID = Id.ToString(); message.EnvID = Id.ToString(); message.Verp = false; message.Encoding = Encoding.EightBit; foreach (string[] email in emails) { string currentEmail = IsAutoReply ? Reply.ThreadGetAndRotate() : email[1]; Recipient r = new Recipient(currentEmail); //links string key = Text.Adler32($"{Id}{email[0]}"); r["red"] = Text.Base64Encode($"{Id}-{email[0]}-{key}-{SendId}-{random.Next(1000, 999999)}"); r["unsub"] = Text.Base64Encode($"{Id}-{email[0]}-{key}-{SendId}-{random.Next(1000, 999999)}"); r["opn"] = Text.Base64Encode($"{Id}-{email[0]}-{key}-{SendId}-{random.Next(1000, 999999)}"); //header body r["pe"] = $"b,{Id},{Username},{servers[current][0]},{servers[current][3]},{email[0]}"; r["ip"] = servers[current][0]; r["server"] = (string)details_server.name + servers[current][4]; r["domain"] = servers[current][1]; r["idi"] = servers[current][2]; r["idd"] = servers[current][3]; r["ids"] = servers[current][4]; r["ide"] = email[0]; r["rdns"] = rdns; r["name"] = currentEmail.Split('@')[0]; r["to"] = email[1]; r["reply"] = currentEmail; r["date"] = Text.GetRFC822Date(); r["boundary"] = Text.Random("[rndlu/30]"); r["bnd"] = Text.Boundary(header); r["*parts"] = "1"; if (IsPlaceholder) { r = Placeholder.ReplaceRotateReciption(r, placeholder_counter, true); } message.AddRecipient(r); Interlocked.Increment(ref c_seed); Interlocked.Increment(ref placeholder_counter); if (Seed != 0 && c_seed % Seed == 0 && seed_emails.Length > 0) { foreach (string test_email in seed_emails) { string currentTest = IsAutoReply ? Reply.GetCurrent() : test_email; Recipient t = new Recipient(currentTest); //links string tkey = Text.Adler32($"{Id}0"); t["red"] = Text.Base64Encode($"{Id}-0-{tkey}-{SendId}-{random.Next(1000, 999999)}"); t["unsub"] = Text.Base64Encode($"{Id}-0-{tkey}-{SendId}-{random.Next(1000, 999999)}"); t["opn"] = Text.Base64Encode($"{Id}-0-{tkey}-{SendId}-{random.Next(1000, 999999)}"); //header body t["pe"] = $"t,{Id},{Username},{servers[current][0]},{servers[current][3]},0"; t["ip"] = servers[current][0]; t["server"] = (string)details_server.name + servers[current][4]; t["domain"] = servers[current][1]; t["idi"] = servers[current][2]; t["idd"] = servers[current][3]; t["ids"] = servers[current][4]; t["ide"] = "0"; t["rdns"] = rdns; t["name"] = currentTest.Split('@')[0]; t["to"] = test_email; t["reply"] = currentTest; t["date"] = Text.GetRFC822Date(); t["boundary"] = Text.Random("[rndlu/30]"); t["bnd"] = Text.Boundary(header); t["*parts"] = "1"; if (IsPlaceholder) { t = Placeholder.ReplaceCurrentReciption(t); } message.AddRecipient(t); } } } p.Send(message); p.Close(); } } } } catch (Exception ex) { logger.Error($"ERR {ex.Message} -- {ex.StackTrace}"); Console.WriteLine($"ERR {ex.Message} -- {ex.StackTrace}"); } }) ); } Task.WaitAll(tasks.ToArray()); campaign.Campaign_update_send(Id, toSend + progress); } else { Result.Add("Campaign Not Found " + Id); logger.Debug("Campaign Not Found " + Id); campaign.Campaign_update_progress(Id, "start", true, 0); return(Result); } } catch (Exception ex) { Console.WriteLine($"ERR {ex.Message} -- {ex.StackTrace}"); logger.Error($"ERR {ex.Message} -- {ex.StackTrace}"); } Thread.Sleep(Sleep * 1000); } campaign.Campaign_update_progress(Id, "start", true, 0); return(Result); }