webForumDet fria alternativet

Mail

.NET

25 svar · 1 043 visningar · startad av smileenergy · sida 2 av 2

Frågan, av smileenergy

Hej! Jag skulle vilja ha hjälp med ett enkelt mailutskick... Den ska ha en textbox där man skriver meddelandet och sen ska den hämta mailadresserna som den ska skicka till från en databas.. SELECT FROM \[member\]... Jag vet att man kan använda sig utav System.Web.Mail men hur man löser så att det som står i min textbox "txtMessage" skickas till alla de epostadresser som man hämtat vet jag inte.

Läs frågan i sin helhet →
Medlem sedan jan. 200781 inlägg
#21

hmm, nu får jag inga fel längre men den verkar inte vilja "binda" några epostadresser för varken i label1 visas det några epostadresser eller i om jag väljer att skicka det så det verkar inte riktigt som att det blev rätt ändå.

using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Net.Mail;

public partial class Admin_Newsletter : System.Web.UI.Page
{

    //databaskoppling
    private string strCon = @"....";
    private DataTable dtEmail = new DataTable();
    

    protected void Page_Load(object sender, EventArgs e)
    {
        GetEmail();
        Label1.Text = Convert.ToString(dtEmail);
    }
    protected void btnSend_Click(object sender, EventArgs e)
    {
        if (txtMail.Text == "")
        {
            lblStatus.Text = "Du måste skriva ett mail innan du kan skicka det!";
        }
        else
        {
            
            SendMail();
        }
    }

    protected void GetEmail()
    {
        SqlConnection cnn = new SqlConnection();
        try
        {
            cnn.ConnectionString = strCon;
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = "SELECT email FROM Member WHERE inactive = 0 AND newsletter=1";
            //lagra i commadoject
            cmd.Connection = cnn;
            //skapa en data adapter
            SqlDataAdapter da = new SqlDataAdapter();
            //Koppla dataadaptern till commando objektet
            da.SelectCommand = cmd;
            da.Fill(dtEmail);
        }
        catch (System.Exception ex)
        {
            lblStatus.Text = "Något gick fel (" + ex.Message + ")";
        }
    }

    protected void SendMail()
    {
        //create the mail message
        MailMessage mail = new MailMessage();

        //set the addresses
        mail.From = new MailAddress("info@minsida.se");
        foreach (DataRow row in dtEmail.Rows)
        {
            mail.Bcc.Add(row["email"].ToString());
        }

        //set the content
        mail.Subject = "Nyhetsbrev.";
        mail.Body = txtMail.Text;

        //send the message
        try
        {
            SmtpClient smtp = new SmtpClient("smtprelay1.telia.com");
            smtp.Send(mail);
        }
        catch (System.Exception ex)
        {
            lblStatus.Text = "Något gick fel (" + ex.Message + ")";
        }
        finally
        {
            lblStatus.Text = "Ditt mail har skickats!";
        }
    }
}
Medlem sedan dec. 19996 721 inlägg
#22

En DataTable innehåller många rader, så du kan inte binda den till en Label och hoppas att få ut något vettigt.

Gör om GetEmail till en metod som returnerar tabellen och anropa den inne i SendMail.

protected void SendMail()
{
   DataTable dtEmails=GetEmails();
   if (dtEmails.Rows.Count>0)
   { 
       MailMessage mail = new MailMessage();
Medlem sedan jan. 200781 inlägg
#23

Vad har jag missat nu ? får upp att dtEmail är en variabel men används som en metod?

using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Net.Mail;

public partial class Admin_Newsletter : System.Web.UI.Page
{

    //databaskoppling
    private string strCon = @"....";

    

    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void btnSend_Click(object sender, EventArgs e)
    {
        if (txtMail.Text == "")
        {
            lblStatus.Text = "Du måste skriva ett mail innan du kan skicka det!";
        }
        else
        { 
            SendMail();
        }
    }

    protected void GetEmail(DataTable dtEmail)
    {
        SqlConnection cnn = new SqlConnection();
        try
        {
            cnn.ConnectionString = strCon;
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = "SELECT email FROM Member WHERE inactive = 0 AND newsletter=1";
            //lagra i commadoject
            cmd.Connection = cnn;
            //skapa en data adapter
            SqlDataAdapter da = new SqlDataAdapter();
            //Koppla dataadaptern till commando objektet
            da.SelectCommand = cmd;
            da.Fill(dtEmail);
            return dtEmail;
        }
        catch (System.Exception ex)
        {
            lblStatus.Text = "Något gick fel (" + ex.Message + ")";
        }
    }

    protected void SendMail()
    {
        DataTable dtEmails=GetEmails();
        if (dtEmails.Rows.Count > 0)
        {
            //create the mail message
            MailMessage mail = new MailMessage();

            //set the addresses
            mail.From = new MailAddress("info@minsida.se");
            foreach (DataRow row in dtEmail.Rows)
            {
                mail.Bcc.Add(row["email"].ToString());
            }

            //set the content
            mail.Subject = "Nyhetsbrev.";
            mail.Body = txtMail.Text;

            //send the message
            try
            {
                SmtpClient smtp = new SmtpClient("smtprelay1.telia.com");
                smtp.Send(mail);
            }
            catch (System.Exception ex)
            {
                lblStatus.Text = "Något gick fel (" + ex.Message + ")";
            }
            finally
            {
                lblStatus.Text = "Ditt mail har skickats!";
            }
        }
    }
}
Medlem sedan dec. 19996 721 inlägg
#24
[b]private DataTable[/b] GetEmail[b]s[/b](
[b]DataTable dtEmail=new DataTable();[/b]
da.Fill(dtEmail);

Och rent designmässigt bör inte en funktion hantera exceptions genom att sätta lblStatus.Text. Lägg den try-catchen i SendMail i stället.

Medlem sedan jan. 200781 inlägg
#25

ursäkta om jag är lite dum just nu men jag får inte det här att fungera :(

using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Net.Mail;

public partial class Admin_Newsletter : System.Web.UI.Page
{

    //databaskoppling
    private string strCon = @".....";

    

    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void btnSend_Click(object sender, EventArgs e)
    {
        if (txtMail.Text == "")
        {
            lblStatus.Text = "Du måste skriva ett mail innan du kan skicka det!";
        }
        else
        { 
            SendMail();
        }
    }

    private DataTable GetEmails()
    {
        SqlConnection cnn = new SqlConnection();
        try
        {
            cnn.ConnectionString = strCon;
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = "SELECT email FROM Member WHERE inactive = 0 AND newsletter=1";
            //lagra i commadoject
            cmd.Connection = cnn;
            //skapa en data adapter
            SqlDataAdapter da = new SqlDataAdapter();
            //Koppla dataadaptern till commando objektet
            da.SelectCommand = cmd;
            return dtEmail;
        }
        catch (System.Exception ex)
        {
            lblStatus.Text = "Något gick fel (" + ex.Message + ")";
        }
    }

    protected void SendMail()
    {
        DataTable dtEmail = new DataTable();
        da.Fill(dtEmail);
        if (dtEmail.Rows.Count > 0)
        {
            //create the mail message
            MailMessage mail = new MailMessage();

            //set the addresses
            mail.From = new MailAddress("info@minsida.se");
            foreach (DataRow row in dtEmail.Rows)
            {
                mail.Bcc.Add(row["email"].ToString());
            }

            //set the content
            mail.Subject = "Nyhetsbrev.";
            mail.Body = txtMail.Text;

            //send the message
            try
            {
                SmtpClient smtp = new SmtpClient("smtprelay1.telia.com");
                smtp.Send(mail);
            }
            catch (System.Exception ex)
            {
                lblStatus.Text = "Något gick fel (" + ex.Message + ")";
            }
            finally
            {
                lblStatus.Text = "Ditt mail har skickats!";
            }
        }
    }
}
Medlem sedan dec. 19996 721 inlägg
#26

Nej, du skulle inte ändra den nedre delen, utan bara se till att DataTable-instansen skapades inne i GetEmails, före Fill-metoden.

258 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)