Avatar billede mema Nybegynder
27. december 2011 - 12:20 Der er 2 kommentarer

Sende e-mail til brugere, hvis brugernavn står i en gridview på siden og bruges også af en SP

Hej - Jeg har et problem hvor jeg efterhånden i 2 uger prøver at løse og kan ikke.
På en webform har jeg en ListBox (lbBrugernavn), der viser et antal UserNames. Når man vælge nogle af disse UserNames bliver dannet et gridview, der viser disse UserNames:
Kode:
-----
...
else
{
  DataTable dt = new DataTable();
  dt.Columns.Add("Selected");
  for (int i = 0; i < lbBrugernavn.Items.Count; i++)
  {
      if (lbBrugernavn.Items[i].Selected)
      {
        DataRow dr = dt.NewRow();
        dr["Selected"] += lbBrugernavn.Items[i].Text;
        dt.Rows.Add(dr);
      }
        gridUserNames.DataSource = dt;
      gridUserNames.DataBind();
  }
...

Nu at jeg har et gridview med alle valgte UserNames, så vil jeg sende en e-mail til alle disse. Jeg har en stored procedure, der henter e-mails (kun en e-mail), når man passer UserName som parameter:
SP:
---
...
ALTER PROCEDURE [dbo].[GetUsersEmail]
@UserName nvarchar(256)
As
Begin
SELECT    Distinct aspnet_Membership.Email
FROM      aspnet_Users INNER JOIN
          aspnet_Membership ON aspnet_Users.UserId = aspnet_Membership.UserId CROSS JOIN FilerMinSide
WHERE      aspnet_Users.UserName = @UserName AND aspnet_Users.UserName <> 'admin'
End
----

Så her er min kode, der ikke virker:
---------------
public void SendMailTilUsers()
    {
        for (int i = 0; i < gridUserNames.Rows.Count; i++)
        {
            string username = gridUserNames.Rows[0].Cells[0].Text;
            DataTable usersEmails = new DataTable();
            usersEmails = DataAccess.GetUsersEmail(username);
            gridEmails.DataSource = usersEmails;
            gridEmails.DataBind();
            emailLabel.Text = gridEmails.Rows[i].Cells[0].Text;
            MailMessage myMail = new MailMessage();
            myMail.From = new MailAddress("noreply@mmm.dk");

            myMail.To.Add(new MailAddress(emailLabel.Text));
            myMail.SubjectEncoding = System.Text.Encoding.UTF8;
            myMail.IsBodyHtml = false;
            myMail.Subject = "bla bli....";

            myMail.Body = "Hej" + "\n\n" +
                "Du har modtaget et nyt dokument." + "\n\n" +
                "Med venlig hilsen" + "\n";
            SmtpClient smtp = new SmtpClient(ConfigurationManager.AppSettings["MailServer"]);
            myMail.BodyEncoding = System.Text.Encoding.UTF8;
            smtp.Send(myMail);
        }   
    }
------

Og min GetUsersEmail metode:
-----
public static DataTable GetUsersEmail(string username)
    {
        DbCommand comm = GenericDataAccess.CreateCommand();
        comm.CommandText = "GetUsersEmail";
        DbParameter param = comm.CreateParameter();
        param.ParameterName = "@UserName";
        param.Value = username;
        param.DbType = DbType.String;
        comm.Parameters.Add(param);
        DataTable table = GenericDataAccess.ExecuteSelectCommand(comm);
        return table;
    }
-----

Please help på engelsk. Og tak på forhånd.
Avatar billede mema Nybegynder
27. december 2011 - 18:24 #1
Nu har jeg fundet ud af at sende mail. Men denne sender flere gange (hver gang til en bruger). Jeg skal have et måde at sende e-mail kun en gang til aller valgte brugere. Her er nuværende kode:
----
public void SendMailTilUsers()
{
  for (int i = 0; i < lbBrugernavn.Items.Count; i++)
  {
    if (lbBrugernavn.Items[i].Selected)
    {
    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
    SqlCommand cmd = new SqlCommand("GetUsersEmail", conn);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("@UserName", lbBrugernavn.Items[i].Text);
    conn.Open();
    SqlDataReader reader = cmd.ExecuteReader();
    if (reader.Read())
    {
      emailLabel.Text = reader.GetString(0);
    }        }
    MailMessage myMail = new MailMessage();
            myMail.From = new MailAddress("noreply@xxxx.dk");

    myMail.To.Add(new MailAddress(emailLabel.Text));
    myMail.SubjectEncoding = System.Text.Encoding.UTF8;
    myMail.IsBodyHtml = false;
    myMail.Subject = "subjekt kommer her...";

    myMail.Body = "Hej" + "\n\n" +
    "Du har modtaget et nyt dokument." + "\n\n" +
    "Med venlig hilsen";
    SmtpClient smtp = new SmtpClient(ConfigurationManager.AppSettings["MailServer"]);
    myMail.BodyEncoding = System.Text.Encoding.UTF8;
    smtp.Send(myMail);
    conn.Close();
    reader.Dispose();
      }
    }
}
Avatar billede karsten_larsen Praktikant
28. december 2011 - 05:56 #2
What about this


for (int i = 0; i <= lbBrugernavn.Items.Count - 1; i++) {
    if (lbBrugernavn.Items(i).Selected) {
        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString);
        SqlCommand cmd = new SqlCommand("GetUsersEmail", conn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@UserName", lbBrugernavn.Items(i).Text);
        conn.Open();
        SqlDataReader reader = cmd.ExecuteReader();
        if (reader.Read()) {
            emailLabel.Text = reader.GetString(0);
        }

        MailMessage myMail = new MailMessage();
        myMail.From = new MailAddress("noreply@xxxx.dk");

        myMail.To.Add(new MailAddress(emailLabel.Text));
        myMail.SubjectEncoding = System.Text.Encoding.UTF8;
        myMail.IsBodyHtml = false;
        myMail.Subject = "subjekt kommer her...";

        myMail.Body = "Hej" + Constants.vbLf + Constants.vbLf + "Du har modtaget et nyt dokument." + Constants.vbLf + Constants.vbLf + "Med venlig hilsen";
        SmtpClient smtp = new SmtpClient(ConfigurationManager.AppSettings("MailServer"));
        myMail.BodyEncoding = System.Text.Encoding.UTF8;
        smtp.Send(myMail);
        conn.Close();
        reader.Dispose();
    }
}

:o)karsten_larsen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester