Ejemplo n.º 1
0
        public List <MD_GRUPPOModel> CreaNuovoGruppo(string Gruppo)
        {
            List <MD_GRUPPOModel> gruppi = new List <MD_GRUPPOModel>();
            MailDispatcherDS      ds     = new MailDispatcherDS();

            using (MailDispatcherBusiness bMD = new MailDispatcherBusiness())
            {
                bMD.FillMD_GRUPPI(ds);
                if (!ds.MD_GRUPPI.Any(x => x.NOME.Trim() == Gruppo.Trim()))
                {
                    MailDispatcherDS.MD_GRUPPIRow gruppoRow = ds.MD_GRUPPI.NewMD_GRUPPIRow();
                    gruppoRow.NOME = Gruppo;
                    ds.MD_GRUPPI.AddMD_GRUPPIRow(gruppoRow);
                    bMD.UpdateMailDispatcherDSTable(ds.MD_GRUPPI.TableName, ds);
                }

                ds.Clear();
                bMD.FillMD_GRUPPI(ds);
                bMD.FillMD_GRUPPI_DESTINATARI(ds);
                bMD.FillMD_GRUPPI_RICHIEDENTI(ds);
                bMD.FillMD_RICHIEDENTI(ds);

                foreach (MailDispatcherDS.MD_GRUPPIRow gruppo in ds.MD_GRUPPI)
                {
                    MD_GRUPPOModel gr = CreaGruppoModel(ds, gruppo.IDGRUPPO);
                    gruppi.Add(gr);
                }
            }

            return(gruppi);
        }
Ejemplo n.º 2
0
        public List <MD_LOGModel> LeggiLog(decimal IDMAIL)
        {
            List <MD_LOGModel> model = new List <MD_LOGModel>();
            MailDispatcherDS   ds    = new MailDispatcherDS();

            using (MailDispatcherBusiness bMD = new MailDispatcherBusiness())
            {
                if (IDMAIL < 0)
                {
                    return(new List <MD_LOGModel>());
                }

                bMD.FillMD_LOG(ds, IDMAIL);
                foreach (MailDispatcherDS.MD_LOGRow log in ds.MD_LOG.OrderBy(x => x.IDMAIL_LOG))
                {
                    MD_LOGModel lm = new MD_LOGModel();
                    lm.DataOperazione = log.DATAOPERAZIONE;
                    lm.IDMAIL         = log.IDMAIL;
                    lm.Nota           = log.IsNOTANull() ? string.Empty : log.NOTA;
                    lm.TipoOperazione = log.TIPOOPERAZIONE;

                    model.Add(lm);
                }
                return(model);
            }
        }
Ejemplo n.º 3
0
        public List <MD_GRUPPO_DESTINATARIOModel> AggiungiDestinatario(decimal IDGRUPPO, string Destinatario)
        {
            MailDispatcherDS ds = new MailDispatcherDS();

            using (MailDispatcherBusiness bMD = new MailDispatcherBusiness())
            {
                bMD.FillMD_GRUPPI_DESTINATARI(ds);
                if (!ds.MD_GRUPPI_DESTINATARI.Any(x => x.IDGRUPPO == IDGRUPPO && x.DESTINATARIO == Destinatario.Trim()))
                {
                    MailDispatcherDS.MD_GRUPPI_DESTINATARIRow destinatario = ds.MD_GRUPPI_DESTINATARI.NewMD_GRUPPI_DESTINATARIRow();
                    destinatario.IDGRUPPO     = IDGRUPPO;
                    destinatario.DESTINATARIO = Destinatario;
                    ds.MD_GRUPPI_DESTINATARI.AddMD_GRUPPI_DESTINATARIRow(destinatario);

                    bMD.UpdateMailDispatcherDSTable(ds.MD_GRUPPI_DESTINATARI.TableName, ds);
                }

                ds.Clear();
                bMD.FillMD_GRUPPI(ds);
                bMD.FillMD_GRUPPI_DESTINATARI(ds);
                bMD.FillMD_GRUPPI_RICHIEDENTI(ds);
                bMD.FillMD_RICHIEDENTI(ds);

                bMD.UpdateMailDispatcherDSTable(ds.MD_GRUPPI_DESTINATARI.TableName, ds);
                ds.MD_GRUPPI_DESTINATARI.AcceptChanges();

                MailDispatcherDS.MD_GRUPPIRow gruppo = ds.MD_GRUPPI.Where(x => x.IDGRUPPO == IDGRUPPO).FirstOrDefault();
                MD_GRUPPOModel gr = CreaGruppoModel(ds, IDGRUPPO);

                return(gr.Destinatari);
            }
        }
Ejemplo n.º 4
0
        public List <MD_RICHIEDENTEModel> AggiungiGruppoRichiedente(decimal IDRICHIEDENTE, decimal IDGRUPPO, bool CC)
        {
            List <MD_RICHIEDENTEModel> richiedenti = new List <MD_RICHIEDENTEModel>();
            MailDispatcherDS           ds          = new MailDispatcherDS();

            using (MailDispatcherBusiness bMD = new MailDispatcherBusiness())
            {
                bMD.FillMD_GRUPPI_RICHIEDENTI(ds);
                if (!ds.MD_GRUPPI_RICHIEDENTI.Any(x => x.IDRICHIEDENTE == IDRICHIEDENTE && x.IDGRUPPO == IDGRUPPO))
                {
                    MailDispatcherDS.MD_GRUPPI_RICHIEDENTIRow grRow = ds.MD_GRUPPI_RICHIEDENTI.NewMD_GRUPPI_RICHIEDENTIRow();
                    grRow.IDGRUPPO      = IDGRUPPO;
                    grRow.IDRICHIEDENTE = IDRICHIEDENTE;
                    grRow.A_CC          = CC ? "1" : "0";
                    ds.MD_GRUPPI_RICHIEDENTI.AddMD_GRUPPI_RICHIEDENTIRow(grRow);
                }

                bMD.UpdateMailDispatcherDSTable(ds.MD_GRUPPI_RICHIEDENTI.TableName, ds);
                ds.MD_GRUPPI_RICHIEDENTI.Clear();

                bMD.FillMD_GRUPPI(ds);
                bMD.FillMD_GRUPPI_DESTINATARI(ds);
                bMD.FillMD_GRUPPI_RICHIEDENTI(ds);
                bMD.FillMD_RICHIEDENTI(ds);

                foreach (MailDispatcherDS.MD_RICHIEDENTIRow richiedente in ds.MD_RICHIEDENTI)
                {
                    MD_RICHIEDENTEModel ri = CreaRichiedenteModel(ds, richiedente.IDRICHIEDENTE);
                    richiedenti.Add(ri);
                }
            }

            return(richiedenti);
        }
Ejemplo n.º 5
0
        public List <MD_EMAILModel> LeggiMailAppese()
        {
            List <MD_EMAILModel> model = new List <MD_EMAILModel>();
            MailDispatcherDS     ds    = new MailDispatcherDS();

            using (MailDispatcherBusiness bMD = new MailDispatcherBusiness())
            {
                bMD.FillMD_RICHIEDENTI(ds);
                bMD.FillMD_EMAIL_APPESE(ds);
                foreach (MailDispatcherDS.MD_EMAILRow email in ds.MD_EMAIL.OrderByDescending(x => x.DATACREAZIONE))
                {
                    MD_EMAILModel em = new MD_EMAILModel();
                    em.IDMAIL        = email.IDMAIL;
                    em.Tentativo     = email.TENTATIVO;
                    em.IdRichiedente = email.IDRICHIEDENTE;
                    MailDispatcherDS.MD_RICHIEDENTIRow richiedente = ds.MD_RICHIEDENTI.Where(x => x.IDRICHIEDENTE == email.IDRICHIEDENTE).FirstOrDefault();
                    em.Richiedente   = richiedente == null ? string.Empty : richiedente.RICHIEDENTE;
                    em.DataCreazione = email.DATACREAZIONE;
                    em.Stato         = email.STATO;
                    em.Oggetto       = email.OGGETTO;

                    model.Add(em);
                }
                return(model);
            }
        }
Ejemplo n.º 6
0
        public List <MD_RICHIEDENTEModel> RimuoviGruppoRichiedente(decimal IDGRRICH)
        {
            List <MD_RICHIEDENTEModel> richiedenti = new List <MD_RICHIEDENTEModel>();
            MailDispatcherDS           ds          = new MailDispatcherDS();

            using (MailDispatcherBusiness bMD = new MailDispatcherBusiness())
            {
                bMD.FillMD_GRUPPI_RICHIEDENTI(ds);
                foreach (MailDispatcherDS.MD_GRUPPI_RICHIEDENTIRow row in ds.MD_GRUPPI_RICHIEDENTI.Where(x => x.IDGRRICH == IDGRRICH))
                {
                    row.Delete();
                }

                bMD.UpdateMailDispatcherDSTable(ds.MD_GRUPPI_RICHIEDENTI.TableName, ds);
                ds.MD_GRUPPI_RICHIEDENTI.Clear();

                bMD.FillMD_GRUPPI(ds);
                bMD.FillMD_GRUPPI_DESTINATARI(ds);
                bMD.FillMD_GRUPPI_RICHIEDENTI(ds);
                bMD.FillMD_RICHIEDENTI(ds);

                foreach (MailDispatcherDS.MD_RICHIEDENTIRow richiedente in ds.MD_RICHIEDENTI)
                {
                    MD_RICHIEDENTEModel ri = CreaRichiedenteModel(ds, richiedente.IDRICHIEDENTE);
                    richiedenti.Add(ri);
                }
            }

            return(richiedenti);
        }
Ejemplo n.º 7
0
        private MD_RICHIEDENTEModel CreaRichiedenteModel(MailDispatcherDS ds, decimal IDRICHIEDENTE)
        {
            MailDispatcherDS.MD_RICHIEDENTIRow richiedente = ds.MD_RICHIEDENTI.Where(x => x.IDRICHIEDENTE == IDRICHIEDENTE).FirstOrDefault();

            if (richiedente == null)
            {
                return(new MD_RICHIEDENTEModel());
            }

            MD_RICHIEDENTEModel rm = new MD_RICHIEDENTEModel();

            rm.IDRICHIEDENTE = richiedente.IDRICHIEDENTE;
            rm.Richiedente   = richiedente.RICHIEDENTE;

            rm.GRUPPI = new List <MD_GRUPPO_RICHIEDENTEModel>();
            foreach (MailDispatcherDS.MD_GRUPPI_RICHIEDENTIRow grRich in ds.MD_GRUPPI_RICHIEDENTI.Where(x => x.IDRICHIEDENTE == richiedente.IDRICHIEDENTE))
            {
                MD_GRUPPO_RICHIEDENTEModel gra = new MD_GRUPPO_RICHIEDENTEModel();
                gra.CC            = (grRich.A_CC == "1") ? true : false;
                gra.Gruppo        = CreaGruppoModel(ds, grRich.IDGRUPPO);
                gra.IDRICHIEDENTE = richiedente.IDRICHIEDENTE;
                gra.IDGRRICH      = grRich.IDGRRICH;
                rm.GRUPPI.Add(gra);
            }
            return(rm);
        }
Ejemplo n.º 8
0
        public List <MD_RICHIEDENTEModel> CreaNuovoRichiedente(string Richiedente)
        {
            List <MD_RICHIEDENTEModel> richiedenti = new List <MD_RICHIEDENTEModel>();
            MailDispatcherDS           ds          = new MailDispatcherDS();

            using (MailDispatcherBusiness bMD = new MailDispatcherBusiness())
            {
                bMD.FillMD_RICHIEDENTI(ds);
                if (!ds.MD_RICHIEDENTI.Any(x => x.RICHIEDENTE.Trim() == Richiedente.Trim()))
                {
                    MailDispatcherDS.MD_RICHIEDENTIRow row = ds.MD_RICHIEDENTI.NewMD_RICHIEDENTIRow();
                    row.RICHIEDENTE = Richiedente;
                    ds.MD_RICHIEDENTI.AddMD_RICHIEDENTIRow(row);
                    bMD.UpdateMailDispatcherDSTable(ds.MD_RICHIEDENTI.TableName, ds);
                }

                ds.Clear();
                bMD.FillMD_GRUPPI(ds);
                bMD.FillMD_GRUPPI_DESTINATARI(ds);
                bMD.FillMD_GRUPPI_RICHIEDENTI(ds);
                bMD.FillMD_RICHIEDENTI(ds);

                foreach (MailDispatcherDS.MD_RICHIEDENTIRow richiedente in ds.MD_RICHIEDENTI)
                {
                    MD_RICHIEDENTEModel ri = CreaRichiedenteModel(ds, richiedente.IDRICHIEDENTE);
                    richiedenti.Add(ri);
                }
            }

            return(richiedenti);
        }
        public void FillMD_EMAIL_APPESE(MailDispatcherDS ds)
        {
            string select = @"SELECT * FROM MD_EMAIL WHERE STATO IN ('ERR','DIN','BLK') ";

            using (DbDataAdapter da = BuildDataAdapter(select))
            {
                da.Fill(ds.MD_EMAIL);
            }
        }
Ejemplo n.º 10
0
        public void FillMD_GRUPPI_RICHIEDENTI(MailDispatcherDS ds)
        {
            string select = @"SELECT * FROM MD_GRUPPI_RICHIEDENTI ";

            using (DbDataAdapter da = BuildDataAdapter(select))
            {
                da.Fill(ds.MD_GRUPPI_RICHIEDENTI);
            }
        }
Ejemplo n.º 11
0
        public void FillMD_ALLEGATI(MailDispatcherDS ds, decimal IDMAIL)
        {
            string select = @"SELECT * FROM MD_ALLEGATI WHERE IDMAIL = $P{IDMAIL}";

            ParamSet ps = new ParamSet();

            ps.AddParam("IDMAIL", DbType.Decimal, IDMAIL);

            using (DbDataAdapter da = BuildDataAdapter(select, ps))
            {
                da.Fill(ds.MD_ALLEGATI);
            }
        }
Ejemplo n.º 12
0
        public void FillMD_EMAILByStato(string Stato, MailDispatcherDS ds)
        {
            string select = @"select * from MD_EMAIL where STATO=$P{Stato}";

            ParamSet ps = new ParamSet();

            ps.AddParam("Stato", DbType.String, Stato);

            using (DbDataAdapter da = BuildDataAdapter(select, ps))
            {
                da.Fill(ds.MD_EMAIL);
            }
        }
Ejemplo n.º 13
0
        public void UpdateMailDispatcherDSTable(string tablename, MailDispatcherDS ds)
        {
            string query = string.Format(CultureInfo.InvariantCulture, "SELECT * FROM {0}", tablename);

            using (DbDataAdapter a = BuildDataAdapter(query))
            {
                a.ContinueUpdateOnError = false;
                DataTable        dt  = ds.Tables[tablename];
                DbCommandBuilder cmd = BuildCommandBuilder(a);
                a.UpdateCommand = cmd.GetUpdateCommand();
                a.DeleteCommand = cmd.GetDeleteCommand();
                a.InsertCommand = cmd.GetInsertCommand();
                a.Update(dt);
            }
        }
Ejemplo n.º 14
0
        public void FillMD_ALLEGATI(MailDispatcherDS ds, List <decimal> IDMAIL)
        {
            if (IDMAIL.Count == 0)
            {
                return;
            }

            string selezione = ConvertToStringForInCondition(IDMAIL);
            string select    = @"SELECT * FROM MD_ALLEGATI WHERE IDMAIL IN ({0})";

            select = string.Format(select, selezione);

            using (DbDataAdapter da = BuildDataAdapter(select))
            {
                da.Fill(ds.MD_ALLEGATI);
            }
        }
Ejemplo n.º 15
0
        public List <MD_GRUPPOModel> RimuoviGruppo(decimal IDGRUPPO)
        {
            List <MD_GRUPPOModel> gruppi = new List <MD_GRUPPOModel>();
            MailDispatcherDS      ds     = new MailDispatcherDS();

            using (MailDispatcherBusiness bMD = new MailDispatcherBusiness())
            {
                bMD.FillMD_GRUPPI(ds);
                bMD.FillMD_GRUPPI_DESTINATARI(ds);
                bMD.FillMD_GRUPPI_RICHIEDENTI(ds);
                bMD.FillMD_RICHIEDENTI(ds);

                foreach (MailDispatcherDS.MD_GRUPPI_RICHIEDENTIRow gra in ds.MD_GRUPPI_RICHIEDENTI.Where(x => x.IDGRUPPO == IDGRUPPO))
                {
                    gra.Delete();
                }

                foreach (MailDispatcherDS.MD_GRUPPI_DESTINATARIRow grd in ds.MD_GRUPPI_DESTINATARI.Where(x => x.IDGRUPPO == IDGRUPPO))
                {
                    grd.Delete();
                }

                foreach (MailDispatcherDS.MD_GRUPPIRow gr in ds.MD_GRUPPI.Where(x => x.IDGRUPPO == IDGRUPPO))
                {
                    gr.Delete();
                }

                bMD.UpdateMailDispatcherDSTable(ds.MD_GRUPPI_RICHIEDENTI.TableName, ds);
                bMD.UpdateMailDispatcherDSTable(ds.MD_GRUPPI_DESTINATARI.TableName, ds);
                bMD.UpdateMailDispatcherDSTable(ds.MD_GRUPPI.TableName, ds);

                ds.Clear();
                bMD.FillMD_GRUPPI(ds);
                bMD.FillMD_GRUPPI_DESTINATARI(ds);
                bMD.FillMD_GRUPPI_RICHIEDENTI(ds);
                bMD.FillMD_RICHIEDENTI(ds);

                foreach (MailDispatcherDS.MD_GRUPPIRow gruppo in ds.MD_GRUPPI)
                {
                    MD_GRUPPOModel gr = CreaGruppoModel(ds, gruppo.IDGRUPPO);
                    gruppi.Add(gr);
                }
            }

            return(gruppi);
        }
Ejemplo n.º 16
0
        public decimal CreaEmail(string Richiedente, string oggetto, string corpo)
        {
            MailDispatcherDS ds = new MailDispatcherDS();

            using (MailDispatcherBusiness bMD = new MailDispatcherBusiness())
            {
                bMD.FillMD_RICHIEDENTI(ds);
                MailDispatcherDS.MD_RICHIEDENTIRow richiedente = ds.MD_RICHIEDENTI.Where(x => x.RICHIEDENTE.Trim().ToUpper() == Richiedente.Trim().ToUpper()).FirstOrDefault();
                if (richiedente == null)
                {
                    return(-1);
                }

                decimal IDMAIL = bMD.CreaMail(richiedente.IDRICHIEDENTE, oggetto, corpo);

                return(IDMAIL);
            }
        }
Ejemplo n.º 17
0
        public List <MD_RICHIEDENTEModel> LeggiRichiedenti()
        {
            List <MD_RICHIEDENTEModel> richiedenti = new List <MD_RICHIEDENTEModel>();
            MailDispatcherDS           ds          = new MailDispatcherDS();

            using (MailDispatcherBusiness bMD = new MailDispatcherBusiness())
            {
                bMD.FillMD_GRUPPI(ds);
                bMD.FillMD_GRUPPI_DESTINATARI(ds);
                bMD.FillMD_GRUPPI_RICHIEDENTI(ds);
                bMD.FillMD_RICHIEDENTI(ds);

                foreach (MailDispatcherDS.MD_RICHIEDENTIRow richiedente in ds.MD_RICHIEDENTI)
                {
                    MD_RICHIEDENTEModel r = CreaRichiedenteModel(ds, richiedente.IDRICHIEDENTE);
                    richiedenti.Add(r);
                }
            }

            return(richiedenti);
        }
Ejemplo n.º 18
0
        public List <MD_GRUPPOModel> LeggiGruppi()
        {
            List <MD_GRUPPOModel> gruppi = new List <MD_GRUPPOModel>();
            MailDispatcherDS      ds     = new MailDispatcherDS();

            using (MailDispatcherBusiness bMD = new MailDispatcherBusiness())
            {
                bMD.FillMD_GRUPPI(ds);
                bMD.FillMD_GRUPPI_DESTINATARI(ds);
                bMD.FillMD_GRUPPI_RICHIEDENTI(ds);
                bMD.FillMD_RICHIEDENTI(ds);

                foreach (MailDispatcherDS.MD_GRUPPIRow gruppo in ds.MD_GRUPPI)
                {
                    MD_GRUPPOModel gr = CreaGruppoModel(ds, gruppo.IDGRUPPO);
                    gruppi.Add(gr);
                }
            }

            return(gruppi);
        }
Ejemplo n.º 19
0
        private MD_GRUPPOModel CreaGruppoModel(MailDispatcherDS ds, decimal IdGruppo)
        {
            MD_GRUPPOModel gr = new MD_GRUPPOModel();

            MailDispatcherDS.MD_GRUPPIRow gruppo = ds.MD_GRUPPI.Where(x => x.IDGRUPPO == IdGruppo).FirstOrDefault();
            if (gruppo == null)
            {
                return(gr);
            }

            gr.IDGRUPPO    = gruppo.IDGRUPPO;
            gr.Nome        = gruppo.NOME.ToUpper();
            gr.Destinatari = new List <MD_GRUPPO_DESTINATARIOModel>();
            foreach (MailDispatcherDS.MD_GRUPPI_DESTINATARIRow destinatario in ds.MD_GRUPPI_DESTINATARI.Where(x => x.RowState != System.Data.DataRowState.Deleted && x.IDGRUPPO == gruppo.IDGRUPPO))
            {
                MD_GRUPPO_DESTINATARIOModel des = new MD_GRUPPO_DESTINATARIOModel();
                des.Destinatario   = destinatario.DESTINATARIO;
                des.IDDESTINATARIO = destinatario.IDDESTINATARIO;
                des.IDGRUPPO       = destinatario.IDGRUPPO;

                gr.Destinatari.Add(des);
            }
            return(gr);
        }
Ejemplo n.º 20
0
        public List <MD_GRUPPO_DESTINATARIOModel> RimuoviDestinatario(decimal IDDESTINATARIO)
        {
            MailDispatcherDS ds = new MailDispatcherDS();

            using (MailDispatcherBusiness bMD = new MailDispatcherBusiness())
            {
                bMD.FillMD_GRUPPI(ds);
                bMD.FillMD_GRUPPI_DESTINATARI(ds);
                bMD.FillMD_GRUPPI_RICHIEDENTI(ds);
                bMD.FillMD_RICHIEDENTI(ds);

                MailDispatcherDS.MD_GRUPPI_DESTINATARIRow grd = ds.MD_GRUPPI_DESTINATARI.Where(x => x.IDDESTINATARIO == IDDESTINATARIO).FirstOrDefault();
                decimal IDGRUPPO = grd.IDGRUPPO;
                grd.Delete();

                bMD.UpdateMailDispatcherDSTable(ds.MD_GRUPPI_DESTINATARI.TableName, ds);
                ds.MD_GRUPPI_DESTINATARI.AcceptChanges();

                MailDispatcherDS.MD_GRUPPIRow gruppo = ds.MD_GRUPPI.Where(x => x.IDGRUPPO == IDGRUPPO).FirstOrDefault();
                MD_GRUPPOModel gr = CreaGruppoModel(ds, IDGRUPPO);

                return(gr.Destinatari);
            }
        }
        public void FillMD_RICHIEDENTI(MailDispatcherDS ds)
        {
            MailDispatcherAdapter a = new MailDispatcherAdapter(DbConnection, DbTransaction);

            a.FillMD_RICHIEDENTI(ds);
        }
        public void FillMD_EMAIL_APPESE(MailDispatcherDS ds)
        {
            MailDispatcherAdapter a = new MailDispatcherAdapter(DbConnection, DbTransaction);

            a.FillMD_EMAIL_APPESE(ds);
        }
        public void UpdateMailDispatcherDSTable(string Tablename, MailDispatcherDS ds)
        {
            MailDispatcherAdapter a = new MailDispatcherAdapter(DbConnection, DbTransaction);

            a.UpdateMailDispatcherDSTable(Tablename, ds);
        }
        public void FillMD_EMAILByStato(string Stato, MailDispatcherDS ds)
        {
            MailDispatcherAdapter a = new MailDispatcherAdapter(DbConnection, DbTransaction);

            a.FillMD_EMAILByStato(Stato, ds);
        }
        public void FillMD_ALLEGATI(MailDispatcherDS ds, decimal IDMAIL)
        {
            MailDispatcherAdapter a = new MailDispatcherAdapter(DbConnection, DbTransaction);

            a.FillMD_ALLEGATI(ds, IDMAIL);
        }
        public void FillMD_GRUPPI_DESTINATARI(MailDispatcherDS ds)
        {
            MailDispatcherAdapter a = new MailDispatcherAdapter(DbConnection, DbTransaction);

            a.FillMD_GRUPPI_DESTINATARI(ds);
        }
Ejemplo n.º 27
0
        public void SendMail()
        {
            MailDispatcherDS ds = new MailDispatcherDS();

            using (MailDispatcherBusiness bMD = new MailDispatcherBusiness())
            {
                bMD.FillMD_EMAILByStato(MD_EMAIL_STATO.DA_INVIARE, ds);
                bMD.InsertMD_LOG(string.Format("Ci sono {0} mail da inviare", ds.MD_EMAIL.Rows.Count));

                if (ds.MD_EMAIL.Rows.Count == 0)
                {
                    return;
                }

                bMD.FillMD_GRUPPI(ds);
                bMD.FillMD_RICHIEDENTI(ds);
                bMD.FillMD_GRUPPI_RICHIEDENTI(ds);
                bMD.FillMD_GRUPPI_DESTINATARI(ds);

                List <decimal> idmail = ds.MD_EMAIL.Select(x => x.IDMAIL).Distinct().ToList();

                foreach (MailDispatcherDS.MD_EMAILRow mail in ds.MD_EMAIL)
                {
                    try
                    {
                        ds.MD_ALLEGATI.Clear();
                        bMD.FillMD_ALLEGATI(ds, mail.IDMAIL);
                        decimal idRichiedente = mail.IDRICHIEDENTE;

                        if (mail.TENTATIVO == 3)
                        {
                            bMD.InsertMD_LOG(mail.IDMAIL, "MAIL BLOCCATA", "SUPERATO IL NUMERO DI TENTATIVI AMMESSI");
                            mail.STATO = MD_EMAIL_STATO.BLOCCATA;
                            bMD.UpdateMailDispatcherDSTable(ds.MD_EMAIL.TableName, ds);
                            continue;
                        }

                        MailDispatcherDS.MD_RICHIEDENTIRow richiedente = ds.MD_RICHIEDENTI.Where(x => x.IDRICHIEDENTE == idRichiedente).FirstOrDefault();
                        if (richiedente == null)
                        {
                            bMD.InsertMD_LOG(mail.IDMAIL, "RICERCA RICHIEDENTE", string.Format("RICHIEDENTE {0} INESISTENTE", idRichiedente));
                            mail.STATO     = MD_EMAIL_STATO.DA_INVIARE;
                            mail.TENTATIVO = mail.TENTATIVO + 1;
                            bMD.UpdateMailDispatcherDSTable(ds.MD_EMAIL.TableName, ds);
                            continue;
                        }

                        List <string> destintinatariMail = (from destinatari in ds.MD_GRUPPI_DESTINATARI
                                                            join richiedenti in ds.MD_GRUPPI_RICHIEDENTI on destinatari.IDGRUPPO equals richiedenti.IDGRUPPO
                                                            where richiedenti.IDRICHIEDENTE == idRichiedente
                                                            select destinatari.DESTINATARIO).ToList();
                        if (destintinatariMail.Count == 0)
                        {
                            bMD.InsertMD_LOG(mail.IDMAIL, "RICERCA DESTINATARI", string.Format("NESSUN DESTINATARIO PER RICHIEDENTE {0}", idRichiedente));
                            mail.STATO     = MD_EMAIL_STATO.DA_INVIARE;
                            mail.TENTATIVO = mail.TENTATIVO + 1;
                            bMD.UpdateMailDispatcherDSTable(ds.MD_EMAIL.TableName, ds);
                            continue;
                        }

                        MailSender sender  = new MailSender();
                        string     oggetto = string.Format("MAIL:{0} - {1}", mail.IDMAIL, mail.OGGETTO);
                        sender.CreaEmail(destintinatariMail, oggetto);

                        StringBuilder sb = new StringBuilder();
                        sb.AppendLine("MAIL AUTOMATICA DA MAIL DISPATCHER - NON RISPONDERE");
                        sb.AppendLine(string.Format("MAIL: {0}", mail.IDMAIL));
                        sb.AppendLine();
                        sb.AppendLine(mail.CORPO);

                        sender.AggiungiCorpoAllaMail(sb.ToString());

                        foreach (MailDispatcherDS.MD_ALLEGATIRow allegato in ds.MD_ALLEGATI)
                        {
                            MemoryStream ms = new MemoryStream(allegato.FILECONTENT);
                            sender.AggiungiAllegato(ms, allegato.FILENAME);
                        }


                        sender.InviaMail();

                        mail.STATO     = MD_EMAIL_STATO.INVIATA;
                        mail.DATAINVIO = DateTime.Now;
                        bMD.UpdateMailDispatcherDSTable(ds.MD_EMAIL.TableName, ds);
                        bMD.InsertMD_LOG(mail.IDMAIL, "INVIATA", string.Empty);
                    }
                    catch (Exception ex)
                    {
                        decimal tentativo = mail.IsTENTATIVONull() ? 0 : mail.TENTATIVO;
                        if (tentativo < 3)
                        {
                            mail.STATO     = MD_EMAIL_STATO.DA_INVIARE;
                            mail.TENTATIVO = tentativo + 1;
                            bMD.UpdateMailDispatcherDSTable(ds.MD_EMAIL.TableName, ds);
                        }
                        else
                        {
                            mail.STATO     = MD_EMAIL_STATO.DA_INVIARE;
                            mail.TENTATIVO = tentativo + 1;
                            bMD.UpdateMailDispatcherDSTable(ds.MD_EMAIL.TableName, ds);
                        }

                        StringBuilder exstr = new StringBuilder();
                        exstr.AppendLine(string.Format("Eccezione {0}", ex.Message));
                        exstr.AppendLine(string.Format("Stack {0}", ex.StackTrace));
                        while (ex.InnerException != null)
                        {
                            exstr.AppendLine(string.Format("Eccezione {0}", ex.InnerException.Message));
                            exstr.AppendLine(string.Format("Stack {0}", ex.InnerException.StackTrace));
                            ex = ex.InnerException;
                        }
                        if (exstr.Length > 200)
                        {
                            exstr.Remove(199, (exstr.Length - 200));
                        }

                        bMD.InsertMD_LOG(mail.IDMAIL, "ERRORE", exstr.ToString());
                    }
                }
            }
        }