我有一个数组 里面有好多类型的邮件地址 我现在想通过循环来发送邮件 给这些数组里的EMAIL 因为我们是害怕如果对一个邮箱的服务器 发送间隔距离短的话 会被对方的服务屏蔽,比如不要一直给126的邮箱发邮件。可以进行交换的来换 发一个yahoo的然后发一个126的 然后在发一个msn的 然后在发126的 
我想重新排列一下这个数组 尽量相邻的邮箱类型不同 我现在有想法了 但是就是程序写不出来 本人程序基础较差 最好贴出来你的程序 或者直接与我联系 MSN:[email protected] 或QQ 34214015、谢谢了  在线等候

解决方案 »

  1.   

    把各个类型的邮箱分组,如:126的一组,yahoo的一组
    public class SendEmail
    {
        public SendEmail()
        {
        }
        public string[] emails;
        private void Send()
        {
            for (int i = 0; i < emails.Length; i++)
            {
                Thread.Sleep(5000);//隔五秒
                //发送emails[i]
            }
        }
        public void RunSend()
        {
            Thread thr = new Thread(new ThreadStart(Send));
            thr.Start();
        }
    }
    //调
            SendEmail se = new SendEmail();
            se.emails = ...//126的数组
            se.RunSend();
      

  2.   

     ArrayList list = new ArrayList();
            ArrayList list2 = new ArrayList();        string[] s = new string[] { "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]" };
            if (s.Length > 0)
            {
                for (int i = 0; i < s.Length; i++)
                {
                    list2.Add(s[i]);
                }
                //
                string prious = string.Empty;
                string current = string.Empty;
                prious = list2[0].ToString();
                
                int j =0;
                for (;j<list2.Count;)
                {
                    current = list2[j].ToString();
                    if (current.Substring(current.IndexOf('@')).Equals(prious.Substring(prious.IndexOf('@'))))
                    {
                        j++;
                    }
                    else
                    {
                        list.Add(current);
                        prious = current;
                        list2.Remove(current);
                        j = 0;
                    }
                }
               
            }
    list 就是 交错排列的 邮件地址列表
      

  3.   

    for(int i=0;i<(所有数组类型个数);i++)
    { if(i==0)
    {
    for(循环发送163的邮箱)
    {
    } //可以定义一个方法调用,把数组名传过去就可以了
    }
    if(i==1)
    {
    for(循环发送126邮箱)
    {
    } //可以定义一个方法调用,把数组名传过去就可以了
    }
    if(i==类型个数时)
    {
    i==0;又重新循环
    }}
      

  4.   

    建议:先进行一个类似冒泡的排序,遇到三个相邻,就交换位置,使你的邮件序列能均匀分布,
    每个发送线程,都进行Sleep
      

  5.   

    可以利用正则进行分组,列出几个常用的组,比如:163、126、qq、gmail、其他......
    然后按一定的比例,一个组取出若干个。。
      

  6.   


        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        string[] Emails = { "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]"};
            private void Form1_Load(object sender, EventArgs e)
            {
                Dictionary<string, ArrayList> EmailGroup = new Dictionary<string, ArrayList>();
                foreach (string var in Emails)
                {
                    string emailType = var.Substring(var.LastIndexOf('@'), var.Length - var.LastIndexOf('@'));
                    bool bHave = EmailGroup.ContainsKey(emailType);
                    if (bHave)
                    {
                        EmailGroup[emailType].Add(var);
                    }
                    else
                    {
                        ArrayList list = new ArrayList();
                        list.Add(var);
                        EmailGroup.Add(emailType, list);
                    }
                }            IList<SendEmail> emailList = new List<SendEmail>();            foreach (KeyValuePair<String,ArrayList> de in EmailGroup)
                {
                    emailList.Add(new SendEmail(de.Key.ToString(), (ArrayList)de.Value));
                }            for (int i = 0; i < Emails.Length; i++)
                {
                    foreach (SendEmail var in emailList)
                    {
                        string sendEmailName = var.GetSendEmail();
                        if(sendEmailName != String.Empty)
                        {
                        //发送Email的方法。
                        }
                    }
                    Thread.Sleep(5000);
                }
            }
        }    public class SendEmail
        {
            private string _EmailType = String.Empty;public string EmailType
    {
      get { return _EmailType; }
      set { _EmailType = value; }
    }
            ArrayList _Emails = new ArrayList();        public ArrayList Emails
            {
                get { return _Emails; }
                set { _Emails = value; }
            }        private int _Index = 0;        public int Index
            {
                get { return _Index; }
                set { _Index = value; }
            }        public string GetSendEmail()
            {
                if (Index >= Emails.Count)
                {
                    return "";
                }
                 return Emails[Index++].ToString();            
            }        public SendEmail(string emailType,ArrayList emails)
            {
                this.EmailType = emailType;
                this.Emails = emails;
            }
        }
    你自己看下吧,可以解决你的问题。
      

  7.   

       public static void getDT()
            {
                ArrayList t126 = new ArrayList();
                t126.Add("126");
                ArrayList t163 = new ArrayList();
                t163.Add("163");
                t163.Add("163");
                ArrayList thot = new ArrayList();
                thot.Add("hotmail");
                thot.Add("hotmail");
                thot.Add("hotmail");            ArrayList tsina = new ArrayList();
                tsina.Add("sina");
                tsina.Add("sina");
                tsina.Add("sina");
                tsina.Add("sina");            ArrayList tlive = new ArrayList();
                tlive.Add("live");
                tlive.Add("live");
                tlive.Add("live");
             //   tlive.Add("live"); ArrayList tmsn = new ArrayList();
                tlive.Add("msn");
                tlive.Add("msn");
                tlive.Add("msn");
                tlive.Add("msn");
                ArrayList all = new ArrayList();
                all.Add(t126);
                all.Add(t163);
                all.Add(thot);
                all.Add(tsina);
                all.Add(tlive);
             //   all.Add(tmsn);            //string[] m ={ t126, t163, thot, tsina, tyahoo };
                ArrayList AL = new ArrayList();
                ArrayList newal = new ArrayList();
                ArrayList newal1 = new ArrayList();
                StringBuilder sb = new StringBuilder();
                ArrayList str1 = null;
                ArrayList str2 = null;
                if (all.Count % 2 != 0)
                {
                    for (int i = 0; i < all.Count; i++)
                    {
                        // i = i + 1;
                        //string [] str1= m[i].ToString().Substring(m[i].ToString().IndexOf('.'));
                        str1 = (ArrayList)all[i];
                        if (i == all.Count - 1)
                        {
                            str2 = (ArrayList)all[all.Count - 1];
                        }
                        else
                        {
                            str2 = (ArrayList)all[++i];
                            str2 = mergeArry(str1, str2);
                        }
                        newal.Add(str2);
                    }
                }
                else
                {
                    for (int i = 0; i < all.Count; i++)
                    {
                        str1 = (ArrayList)all[i];
                        if (i == all.Count - 1)
                        {
                            str2 = (ArrayList)all[all.Count - 1];
                        }
                        else
                        {
                            str2 = (ArrayList)all[++i];
                            str2 = mergeArry(str1, str2);
                        }
                        newal.Add(str2);
                    }
                }
                for (int i = 0; i < newal.Count; i++)
                {
                    //出现问题 如果是多次循环 则应该去递归调用循环 不能这样一个个声明NEWAL
                    //到这里又应该判断是偶数还是基数
                    if (i == newal.Count)
                    {
                        break;
                    }
                    else
                    {
                        newal1.Add(mergeArry((ArrayList)newal[i], (ArrayList)newal[++i]));
                    }
                }            for (int i = 0; i < newal1.Count; i++)
                {
                    for (int j = 0; j < ((ArrayList)newal1[i]).Count; j++)
                    {                    sb.Append(((ArrayList)newal1[i])[j].ToString() + " ");
                    }            }
                Console.Write(sb.ToString());
                Console.Read();        }
      

  8.   

    跟12楼的逻辑差不多,不过觉着使用sortedList<string, Queue<string>>要来的好一些
        public class MailSender
        {
            //从一批email中构造对应的MailSender
            public MailSender(ArrayList mailCollection)
            {
                string tempServerPartStr = string.Empty;
                fMailCount = mailCollection.Count;
                fSortedMailList = new SortedList<string, Queue<string>>();
                foreach (string mail in mailCollection)
                {
                    tempServerPartStr = GetServerPart(mail);
                    if (!string.IsNullOrEmpty(tempServerPartStr))
                    {
                        if (!fSortedMailList.ContainsKey(tempServerPartStr))
                            fSortedMailList.Add(tempServerPartStr, new Queue<string>());
                        fSortedMailList[tempServerPartStr].Enqueue(mail);
                    }
                }
            }        /// <summary>
            /// 这种方式呢适合每个线程持有一个MailSender来进行一次性的发送工作
            /// 相对的线程间的共享问题就可以避免
            /// 这个方法较简单,但是对应的外部调用者(即每个发送线程)都要持有该对象的不重复实例
            /// </summary>
            public void Send()
            {
                string mail = null;
                while (fMailCount > 0)
                {
                    foreach (KeyValuePair<string, Queue<string>> pair in fSortedMailList)
                        if (pair.Value.Count > 0)
                        {
                            mail = pair.Value.Dequeue();
                            fMailCount--;
                            //to-do
                            //这边调用函数来做实际的发送
                        }
                }
            }        /// <summary>
            /// 这个呢可以考虑多个线程共享一个MailSender对象的
            /// 每个线程都从这个对象里头取email,但是这种方式是要考虑共享问题
            /// 比较麻烦,但外部相对就简单了
            /// </summary>
            public string GetAMail()
            {
                //to-do
            }
            private string GetServerPart(string mail)
            {
                throw new NotImplementedException();//这个自己实现好了
            }        private SortedList<string, Queue<string>> fSortedMailList;
            private int fMailCount;
        }
      

  9.   

    实际上完全可以不分组嘛如果我说你可以用一个类似与web里的session缓存一下不就成了比如session["sina"]表示sina的已经发送,而且这个session还没过期,自然不可以用ok,照我看自己做一个类似session的机制也不是啥很困难滴事情