Windows 使用C通过SMTP发送电子邮件时出现问题#

Windows 使用C通过SMTP发送电子邮件时出现问题#,windows,web-services,c#-4.0,smtp,Windows,Web Services,C# 4.0,Smtp,我正在向我的网络发送批量电子邮件通知,我使用的SMTP有问题 问题是我使用的任何电子邮件帐户都会发送大约30-40封电子邮件,然后我会收到以下错误: …邮箱不可用。服务器响应为:此电子邮件不被接受,请与您的电子邮件托管提供商联系 有什么想法吗 谢谢 Windows服务代码: public SMTP() { client = new SmtpClient(host); client.UseDefaultCredentials = false;

我正在向我的网络发送批量电子邮件通知,我使用的SMTP有问题

问题是我使用的任何电子邮件帐户都会发送大约30-40封电子邮件,然后我会收到以下错误:

…邮箱不可用。服务器响应为:此电子邮件不被接受,请与您的电子邮件托管提供商联系

有什么想法吗

谢谢

Windows服务代码:

    public SMTP()
    {
        client = new SmtpClient(host);

        client.UseDefaultCredentials = false;
        client.Credentials = new NetworkCredential(_username, _password);

    }

    public void Send()
    {
        using (EmailEntities ent = new EmailEntities())
        {
            var res = ent.wdj_tbl_EmailQueue.Take(50);
            if (res != null)
            {
                foreach (wdj_tbl_EmailQueue r in res)
                {
                    try
                    {
                        Int32 id = r.ID;
                        eml = new MailMessage();
                        try
                        {
                            AddTo((r.emailTo.Replace("\n", "").Trim() ?? ""));
                            AddCc((r.emailCC.Replace("\n", "").Trim() ?? ""));
                            AddBcc((r.emailBCC.Replace("\n", "").Trim() ?? ""));
                        }
                        catch
                        {
                            ent.wdj_tbl_EmailQueue.DeleteObject(r);
                            continue;
                        }

                        eml.From = new MailAddress(r.emailFrom);
                        eml.IsBodyHtml = (r.emailIsHTML ?? true);
                        eml.Subject = r.emailSubject;

                        fixHeaders("To", eml.To);
                        fixHeaders("Cc", eml.CC);

                        if (!eml.IsBodyHtml)
                        {
                            eml.Body = (r.emailTextBody ?? "");
                        }
                        else
                        {
                            eml.AlternateViews.Add(AlternateView.CreateAlternateViewFromString((r.emailHTMLBody ?? ""), new ContentType("text/html")));
                            eml.Body = (r.emailTextBody ?? "");
                            eml.IsBodyHtml = false;
                        }
                        try
                        {
                            client.Send(eml);
                        }
                        catch (Exception ex)
                        {
                            if (!EventLog.SourceExists("WadjaEmailService"))
                                EventLog.CreateEventSource("EmailService", "EmailLog");
                            EventLog.WriteEntry("EmailService", "The email with id " + id.ToString() + " (" + eml.To + ") was not sent: " + ex.Message, EventLogEntryType.Error);

                            continue;
                        }
                    }
                    catch
                    {
                        ent.wdj_tbl_EmailQueue.DeleteObject(r);
                        continue;
                    }
                    ent.wdj_tbl_EmailQueue.DeleteObject(r);
                }
                ent.SaveChanges();
            }
        }
    }

    public void AddTo(String email)
    {
        //network = GetNetworkName();
        string[] emailArray = email.Split(',');
        if (emailArray.Length > 1)
        {
            for (int i = 0; i < emailArray.Length; i++)
            {
                eml.To.Add(new MailAddress(emailArray[i]));
            }
        }
        else
        {
            eml.To.Add(new MailAddress(email));
        }

    }

    public void AddTo(String email, String displayName)
    {
        eml.To.Add(new MailAddress(email, displayName));
    }

    public void AddCc(String email)
    {
        if (String.IsNullOrEmpty(email))
            return;
        string[] emailArray = email.Split(',');
        if (emailArray.Length > 1)
        {
            for (int i = 0; i < emailArray.Length; i++)
            {
                eml.CC.Add(new MailAddress(emailArray[i]));
            }
        }
        else
        {
            eml.CC.Add(new MailAddress(email));
        }
    }

    public void AddCc(String email, String displayName)
    {
        if (String.IsNullOrEmpty(email))
            return;
        eml.CC.Add(new MailAddress(email, displayName));
    }

    public void AddBcc(String email)
    {
        if (String.IsNullOrEmpty(email))
            return;
        string[] emailArray = email.Split(',');
        if (emailArray.Length > 1)
        {
            for (int i = 0; i < emailArray.Length; i++)
            {
                eml.Bcc.Add(new MailAddress(emailArray[i]));
            }
        }
        else
        {
            eml.Bcc.Add(new MailAddress(email));
        }
    }

    public void AddBcc(String email, String displayName)
    {
        if (String.IsNullOrEmpty(email))
            return;
        eml.Bcc.Add(new MailAddress(email, displayName));
    }

    private void fixHeaders(String hName, MailAddressCollection mac)
    {
        String hTmp = "";

        foreach (MailAddress ma in mac)
        {
            if (!String.IsNullOrEmpty(ma.DisplayName))
                hTmp += (", " + ma.DisplayName + "<" + ma.Address + ">");
            else
                hTmp += (", " + ma.Address);
        }

        while (hTmp.StartsWith(","))
            hTmp = hTmp.Substring(1).Trim();

        if (!String.IsNullOrEmpty(hTmp))
        {

            eml.Headers.Add(hName, hTmp);

        }
    }
公共SMTP()
{
客户端=新的SmtpClient(主机);
client.UseDefaultCredentials=false;
client.Credentials=新的网络凭据(\u用户名,\u密码);
}
公共无效发送()
{
使用(EmailEntities ent=new EmailEntities())
{
var res=ent.wdj\u tbl\u EmailQueue.Take(50);
如果(res!=null)
{
foreach(wdj_tbl_电子邮件队列,以res格式)
{
尝试
{
int32id=r.id;
eml=新邮件消息();
尝试
{
AddTo((r.emailTo.Replace(“\n”和“).Trim()??”);
AddCc((r.emailCC.Replace(“\n”和“).Trim()??”);
AddBcc((r.emailBCC.Replace(“\n”和“).Trim()??”);
}
抓住
{
ent.wdj_tbl_EmailQueue.DeleteObject(r);
继续;
}
eml.From=新邮件地址(r.emailFrom);
eml.IsBodyHtml=(r.emailIsHTML??true);
eml.Subject=r.emailSubject;
固定标题(“至”,eml.To);
固定标题(“Cc”,eml.Cc);
如果(!eml.IsBodyHtml)
{
eml.Body=(r.emailTextBody??);
}
其他的
{
eml.AlternateViews.Add(AlternateView.CreateAlternateViewFromString((r.emailHTMLBody??)、新内容类型(“text/html”);
eml.Body=(r.emailTextBody??);
eml.IsBodyHtml=false;
}
尝试
{
client.Send(eml);
}
捕获(例外情况除外)
{
如果(!EventLog.SourceExists(“WadjaEmailService”))
CreateEventSource(“EmailService”、“EmailLog”);
EventLog.WriteEntry(“EmailService”,“id为“+id.ToString()+”(“+eml.To+”)的电子邮件未发送:“+ex.Message,EventLogEntryType.Error”);
继续;
}
}
抓住
{
ent.wdj_tbl_EmailQueue.DeleteObject(r);
继续;
}
ent.wdj_tbl_EmailQueue.DeleteObject(r);
}
SaveChanges();
}
}
}
公共无效添加到(字符串电子邮件)
{
//network=GetNetworkName();
字符串[]emailArray=email.Split(',');
如果(emailArray.Length>1)
{
for(int i=0;i1)
{
for(int i=0;i1)
{
for(int i=0;i
如果您的代码能够发送30-40封电子邮件,但失败了,我会首先查看应用程序生成的所有日志,以确保失败的电子邮件地址在应用程序外部有效且可用

然后我会查看服务器日志(如果可能的话),试图找出它拒绝稍后邮件的原因

您发送这些消息的速度有多快?可能吗