windows - Problem med afsendelse af e-mails via SMTP ved hjælp af C #

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg sender massemeddelelser via e-mail til mit netværk, og jeg har problemer med den SMTP, jeg bruger.


Problemet er for enhver e-mail-konto, jeg bruger den, sender ca. 30-40 e-mails, og så får jeg følgende fejl:


...Postkasse er utilgængelig. Serverresponsen var: Denne email accepteres ikke, kontakt din e-mail-udbyder.


Nogle ideer?


Tak


kode-Windows-tjeneste:


    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("
", "").Trim() ?? ""));
                            AddCc((r.emailCC.Replace("
", "").Trim() ?? ""));
                            AddBcc((r.emailBCC.Replace("
", "").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);

        }
    }

Bedste reference


Hvis din kode er i stand til at sende 30-40 e-mails og derefter fejler, vil jeg først se på logfiler, der genereres af appen, for at sikre, at e-mail-adresserne (e), som den fejler, er gyldige og anvendelige uden for appen .


Så ville jeg se på sever logs (hvis muligt) for at forsøge at isolere hvorfor det afviser den senere mail.


Hvor hurtigt sender du disse meddelelser? Er det muligt, at du løber ind i en slags gasning på serveren?