webForumDet fria alternativet

Mail

25 svar · 1 043 visningar · startad av smileenergy

smileenergyMedlem sedan jan. 200781 inlägg
#1

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. så om någon har en liten kodsnutt att dela med sig av så skulle det vara guld värt! använder C#

cokMedlem sedan dec. 2005664 inlägg
#2
MailMessage m = new MailMessage();
m.From = new MailAdress("dinmailadress");
m.To.Add(new MailAdress("användarensmailadress1", anändarens namn1));
m.To.Add(new MailAdress("användarensmailadress2", anändarens namn2));
m.Subejct = "valfri text";
m.Body = "valfri text";
emissionMedlem sedan dec. 19996 721 inlägg
#3

Om du kör i 2.0 ska du använda System.Net.Mail i stället. Mycket bättre.

http://www.systemnetmail.com/ är en bra startpunkt.

smileenergyMedlem sedan jan. 200781 inlägg
#4

emission skrev:

Om du kör i 2.0 ska du använda System.Net.Mail i stället. Mycket bättre.

http://www.systemnetmail.com/ är en bra startpunkt.

Hur vet jag vilken SmtpClient jag ska använda?
på sidan står det:
SmtpClient smtp = new SmtpClient("127.0.0.1");
smtp.Send(mail);

koden kommer från http://www.systemnetmail.com/faq/3.1.1.aspx
jag har testat att provköra det men bytt ut till några egna epostadresser, jag fick dock fel redan direkt.
Compiler Error Message: CS0246: The type or namespace name 'MailAddress' could not be found (are you missing a using directive or an assembly reference?)
vad menar den med att den inte kunde hittas? Kan jag inte använda vilken epost jag vill som avsändare?

ZaimanMedlem sedan dec. 20014 239 inlägg
#5

Använder du överst på din sida?

using System.Net.Mail;
smileenergyMedlem sedan jan. 200781 inlägg
#6

oj, hade råkat skriva web istället för net...
men vad ska jag använda för smtp client? för den som stod som standard fungerar ju inte.
SmtpClient smtp = new SmtpClient("127.0.0.1");
smtp.Send(mail);

inspiroMedlem sedan sep. 2005673 inlägg
#7

127.0.0.1 är samma sak som localhost... dvs du försöker använda en smtp-server som finns på samma dator som din applikation körs på. Ska du bara skicka ut några enstaka mail så kan du ju alltid låna din mail-providers smtp...

smileenergyMedlem sedan jan. 200781 inlägg
#8

hmm, jag har en smtp adress på mitt loopia konto som jag försökte byta ut 127.0.0.1 mot men det verkar inte ha fungerat SmtpClient smtp = new SmtpClient("smtp.minadress.se"); jag har åtminstone inte fått några mail. så hur löser man det?
jag har även testat med bbb:s som är min operatörs, smtp.bredband.net
jag gjorde en try sats och fick fram Failure sending mail, så antar att han inte kan connecta till smtp servern på något sätt.

emissionMedlem sedan dec. 19996 721 inlägg
#9

Om du har webbplatsen hos Loopia så borde de kunna svara på vilken smtp-server du ska använda. Kort sagt, du måste ange en smtp-server som tillåter att din webbserver skickar mail.

smileenergyMedlem sedan jan. 200781 inlägg
#10

emission skrev:

Om du har webbplatsen hos Loopia så borde de kunna svara på vilken smtp-server du ska använda. Kort sagt, du måste ange en smtp-server som tillåter att din webbserver skickar mail.

Innebär detta att jag inte kan använda mig utav min smtp server hos loopia om jag testar koden på någon annan server?
Skickat ett mail till loopia nu, vi får se vad de svarar på att man ska använda för något på deras server.

ZaimanMedlem sedan dec. 20014 239 inlägg
#11

Har du din webplats hos loopia? Vissa operatörer tillåter bara smtp-ut om man sitter på samma när. En del behöver authentisering vid utgående smtp, då måste du ange vilka cridentials du skickar med.

mail.Credentials = new NetworkCredential("minlogin","mittlösenord");
smileenergyMedlem sedan jan. 200781 inlägg
#12

Zaiman skrev:

Har du din webplats hos loopia? Vissa operatörer tillåter bara smtp-ut om man sitter på samma när. En del behöver authentisering vid utgående smtp, då måste du ange vilka cridentials du skickar med.

mail.Credentials = new NetworkCredential("minlogin","mittlösenord");

tack, fått det att fungera nu.

Dock har jag en annan fråga, hur sparar jag variabler ur en databas?
jag vill hämta ut alla epost adresser hur en databas som har newsletter == 1 och INTE har inactive == 1... hur gör jag detta på ett smart sätt?
kan skicka med den kod som jag försökte med... läser ni den så förstår ni nog vad jag är ute efter. mailet ska skickas ut till alla användare som går vidare ned i funktionen SendMail()

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 string email = "";
    private string inactive = "";
    

    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
        {
            GetEmail();
            if (inactive == 1)
            {
            }
            else
            {
                SendMail();
            }
            
        }
    }

    protected void GetEmail()
    {
        SqlConnection cnn = new SqlConnection();
        try
        {
            cnn.ConnectionString = strCon;
            SqlParameter prmEmail = new SqlParameter("Email", email);
            SqlParameter prmInactive = new SqlParameter("Inactive", inactive);
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = "SELECT * FROM Member WHERE newsletter==1";
            //lagra i commadoject
            cmd.Connection = cnn;
            cmd.Parameters.Add(prmEmail);
            cmd.Parameters.Add(prmInactive);
            //öppna connection
            cnn.Open();
            //kör queryn och lagra i datareader
            SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            dr.Read();
            email = dr.GetString(3);
            inactive = dr.GetInt32(6);
        }
        catch (System.Exception ex)
        {
            lblStatus.Text = "Något gick fel (" + ex.Message + ")";
        }
        finally
        {
            cnn.Close();
        }
    }

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

        //set the addresses
        mail.From = new MailAddress("epost@minsida.se");
        mail.To.Add("email");

        //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!";
        }
    }
}
emissionMedlem sedan dec. 19996 721 inlägg
#13

Det låter som att du har adresserna i en databastabell, med en kolumn som heter "inactive". I så fall frågar du databasen om rätt adresser på en gång (SELECT .... WHERE inactive=0).

smileenergyMedlem sedan jan. 200781 inlägg
#14

nja.... riktigt så enkelt är det inte...
Jag har en tabell som heter member i den finns det olika kolumner men de vi behöver koncentrera oss på är följande: email, inactive och newsletter
så att vi inte skickar ut mail till personer som är inaktiverade och personer som har tackat nej till nyhetsbrevet. så vi måste kolla om inactive == 1 då ska man inte få ett mail för då är personens konto inaktiverat, sen måste vi kolla ha personen godkänt att få ett mail newsletter == 1 då ska han få ett mail, är newsletter däremot == null så ska inget mail skickas ut. hoppas att du förstår lite bättre nu.

ZaimanMedlem sedan dec. 20014 239 inlägg
#15

Nu blandar du C# kod och SQL syntax.

Som emmsion skriver ska du ha i den SQL sats. Alltså ("SELECT ... WHERE inactive = 0)
Om du skriver == så blir det fel.

smileenergyMedlem sedan jan. 200781 inlägg
#16

okej... då har vi en SQL sats som är rätt men hur löser jag resten? kört fast som ni förstår om ni kollar på min kod så kommer jag inte längre med en sql sats som är rätt... jag vill ju hämta alla epost adresser som är aktiva och godkänt mail som sagt men hur gör jag det :S det är säkert rätt enkelt men just nu har jag fastnat i en tankebana som inte fungerar... Så hur blir nästa kontroll för att se om om newsletter är satt till 1 och hur lagrar jag sedan alla epostadresser så att jag kan använda dem i funktionen SendMail() ?

emissionMedlem sedan dec. 19996 721 inlägg
#17

smileenergy skrev:

nja.... riktigt så enkelt är det inte

Precis så enkelt var det ju.

SELECT email FROM member WHERE inactive = 0 AND newsletter=1

emissionMedlem sedan dec. 19996 721 inlägg
#18

Hämta ut adresserna i en DataTable, loopa igenom denna och skicka ett mail per rad, alternativt lägg till en mottagare (BCC) per rad.

smileenergyMedlem sedan jan. 200781 inlägg
#19

känner mig dum men har kört fast igen :/

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 = "";
    

    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;
            SqlParameter prmEmail = new SqlParameter("Email", dtEmail);
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = "SELECT email FROM Member WHERE inactive = 0 AND newsletter=1";
            //lagra i commadoject
            cmd.Connection = cnn;
            cmd.Parameters.Add(prmEmail);
            //öppna connection
            cnn.Open();
            //kör queryn och lagra i datareader
            dtEmail = cmd.ExecuteReader(CommandBehavior.CloseConnection);
        }
        catch (System.Exception ex)
        {
            lblStatus.Text = "Något gick fel (" + ex.Message + ")";
        }
        finally
        {
            cnn.Close();
        }
    }

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

        //set the addresses
        mail.From = new MailAddress("info@minsida.se");
        mail.To.Add(dtEmail);

        //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!";
        }
    }
}

får följande error dtEmail = cmd.ExecuteReader(CommandBehavior.CloseConnection);

emissionMedlem sedan dec. 19996 721 inlägg
#20

Ja, nu blev det lite hoprört.

En DataTable hämtar man med en DataAdapter.

http://samples.gotdotnet.com/quickstart/howto/doc/adoplus/GetDataFromDB.aspx

Sedan loopar du igenom raderna i tabellen.

foreach (DataRow row in dtEmail.Rows)
   mail.Bcc.Add(row["email"].ToString());
next
138 ms totalt · 3 externa anrop · v20260731065814-full.86db40fa
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)