最近试着写了一个用SmtpClient发送邮件的小程序,本想可以达到快速批量发送的目的。但是测试后并不是这样,其中遇到 很多问题:
1.发送过于频繁IP会被封,这个只要重新播号就可以解决。
2.发送内容一样会被当垃圾邮件,换个内容也可以解决。
3.第三个问题在这里贴出希望高手帮忙解决一下。看看能不能找到原因。
问题如下:
1.163的邮箱发给QQ邮箱
2.使用程序循环100次发送后,前几十次还可以收到邮件,到了后面就收不到了,但是发送的状态并没有报错。本来我以为这个邮箱账号因为发送过于频繁让QQ邮箱封了。
3.我用Foxmail又用同一个账号发送同一个邮箱试了一下,但是收到了。
4.后面再用我写的程序发,一直发不出去,但是我换一个163的发件箱,发给同一个QQ邮箱还是收到了,之前的5.那个163的发件箱就一直是发出去,收不到的状态。
实在不知道是什么原因。郁闷很久。希望高手帮忙解决!!
用的代码如下:
SmtpClient smtp = new SmtpClient();
smtp.Host = mailServer.Host;
smtp.Port = 25;
smtp.EnableSsl = false;
smtp.UseDefaultCredentials = false;
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;smtp.Credentials = new NetworkCredential(mailServer.Email,mailServer.Pwd);
smtp.EnableSsl = true;
smtp.SendCompleted += new SendCompletedEventHandler(smtp_SendCompleted);
MailAddress from = new MailAddress(mailServer.Email,"小王");
MailAddress to = new MailAddress(toMail,toMail.Substring(0,toMail.IndexOf("@")));
MailMessage mail = new MailMessage(from, to);
mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
mail.IsBodyHtml = true;
mail.Priority = MailPriority.High;
mail.ReplyTo = from;
mail.Sender = from;
mail.Subject = title;
mail.Body = content;
mail.BodyEncoding = Encoding.Default;
smtp.SendAsync(mail, toMail);下面是SendAsync函数的回调函数:
void smtp_SendCompleted(object sender, AsyncCompletedEventArgs e)
        {            
            string msg = e.UserState.ToString();
            SmtpClient smtp = (SmtpClient)sender;
            if (e.Error == null)//问题出现后,这里的Error并没有错误
            {
                msg+= ",1";//发送成功
            }
            else
            {
                msg += ",0";
                smtp.SendAsyncCancel();
            }
            if (lvMailTo.InvokeRequired)
            {
                lvMailTo.BeginInvoke(new UpdateListDelegate(UpdateList), msg);
            }
            smtp.Dispose();
            _event.Set();
        }邮件SMTP