Получить значение из списка и работать с ним

Я пытаюсь создать приложение, отправляющее электронные письма через носки, сообщения будут отправляться за сообщение, если первое сообщение отправляется через носки, второе должно использовать другие носки, что я делаю в своем приложении, если я, когда я получаю информацию из TXT-файл, и я добавляю в список:

try
{
    SmtpServer oServer = new SmtpServer("");

    var list = new List<string>();
    var input = File.ReadAllText(@"C:\New folder\SendMail6\socks-list.txt");
    var r = new Regex(@"(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(\d{1,5})");
    foreach (Match match in r.Matches(input))
    {
         string ip = match.Groups[1].Value;
         string port = match.Groups[2].Value;
         list.Add(ip);
         list.Add(port);
    }
    foreach (string ip in list)
    {

    }
}
catch(Exception)
{
}

что я хочу этого

oServer.SocksProxyServer = "37.187.118.174";
oServer.SocksProxyPort = 14115;

берет значения из списка, который я заполнил значениями ip и портом, и

если первое письмо отправлено с помощью ip, то второе письмо использует другой ip в списке, не отправлять буксируемое электронное письмо, за которым следует тот же ip

Спасибо

1 ответ

Решение

Вам нужно создать класс для IP и порта

public class IpAndPort
{
    public string IpAddress { get; set; }
    public string Port { get; set; }
}

Теперь используйте ConcurrentBag

using System.Collections.Concurrent;

//------
var ips =  new ConcurrentBag<IpAndPort>();
var input = File.ReadAllText(@"C:\New folder\SendMail6\socks-list.txt");
var r = new Regex(@"(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(\d{1,5})");
foreach (Match match in r.Matches(input))
{
     string ip = match.Groups[1].Value;
     string port = match.Groups[2].Value;
     if(ips.Any(x => x.IpAddress.Trim() == ip.Trim()))
         continue; 
     ips.Add(new IpAndPort { IpAddress = ip, Port = port});
}

Теперь отправьте сообщение, взяв значения из ConcurrentBag

while (!ips.IsEmpty)
{
     IpAndPort ipAndPort;
     if (!ips.TryTake(out ipAndPort)) continue;
     try
     {
           //code here to send message using below IP and Port
           var ip = ipAndPort.IpAddress;
           var port = ipAndPort.Port;
           /----
           oServer = new SmtpServer("");
           oServer.SocksProxyServer = ip;
           oServer.SocksProxyPort = port;
     }
     catch (Exception ex)
     {
           Console.WriteLine(ex.Message);
     }
}
Другие вопросы по тегам