odesilani mailu, prirazeni mailů z databáze   otázka

ASP.NET WebForms

Dobrý den, mám vytvořený kód (viz.níže) pro odesílání mailů. jako příjemce bych potřeboval přiřadit maily, které mám v databázi v tabulce hraci, column Kontakt_mail a ještě je oddělit čárkou...Nevíte někdo ja kbych se to dalo udělat? Předem děkuji za jakoukoliv reakci.

protected void Odeslani()

{

var odesilatel = "[email protected]";

// Kam bude mail poslan

var prijemce = Email.Text.ToString();

// Heslo

const string heslo = "heslo";

// Zobrazeni mailu

string predmetmail = Predmet.Text.ToString();

string telo = "Od: " + Jmeno.Text + "\n";

telo += "Email: " + Email.Text + "\n";

telo += "Předmět: " + Predmet.Text + "\n";

telo += "Zpráva: \n" + Zprava.Text + "\n";

// smtp nastaveni gmail

var smtp = new System.Net.Mail.SmtpClient();

{

smtp.Host = "smtp.gmail.com";

smtp.Port = 587;

smtp.EnableSsl = true;

smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;

smtp.Credentials = new NetworkCredential(odesilatel, heslo);

smtp.Timeout = 20000;

}

smtp.Send(odesilatel, prijemce, predmetmail, telo);

}

protected void Button1_Click(object sender, EventArgs e)

{

try

{

Odeslani();

DisplayMessage.Text = "Zpráva byla odeslána...";

DisplayMessage.Visible = true;

Predmet.Text = "";

Email.Text = "";

Jmeno.Text = "";

Zprava.Text = "";

}

catch (Exception) { }

}

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vytáhněte si záznamy z DB (LINQ,EF,...) například do kolekce, s kterou následné můžete dělat doslova "psí kusy"

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jiným způsobem by to nešlo, třeba pomocí sqldatasource?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

moc nechápu co stím...mám vytvořený LINQ (adresati.dbml)...tady mám tabulku Hraci....pomoci LinqdataSource jsems ito nacetl...ale co dal?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

potom jsme napsal tohle:

IDataSource source = (IDataSource)LinqDataSource1;

// Kam bude mail poslan

var prijemce = source.GetView("Kontakt_mail").ToString();

ale nevím no...potřebovla bych nějak poradit...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

SqlDataSource se hodí pro menší weby nebo dejme tomu,pouze určité sekce,určitě ne celý web. Pokud něco takového aktuálně programujete a vytvářite,tak doporučuji přestat a naučit se například EntitityFramework či začít se snazším LINQ. Případně i základy OOP a práce s kolekcemi (bez těchto nutných základů se stejně dříve či později neobejdete).

Jinak ten kód,který jste vytvořil není zrovna ono - zkuste se více našprtat a pak to určitě dáte dohromady.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To by ani tak nevadilo, jeste jsem ot zkousel takhle, vytvoril jsem si datalist ktery vypisuje tu hodnotu s oddelovacem carkou:

<ItemTemplate>

<asp:Label ID="Kontakt_mailLabel" runat="server" Text='<%# Eval("Kontakt_mail") + "," %>' />

</ItemTemplate>

a potom jsme se ot snazil priradit...

var prijemce = ((Label)DataList1.FindControl("Kontakt_mailLabel")).ToString();

Ale pořád nic...Trošku mě tlačí čas, proto se to snažím dělat touhle jednodušší cestou...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tam je asi ale problém ten, že i za posledním záznamem(mailovou adresou) z tabulky to dava carku a diky ni se to neodesle, protoze to nema spravny format...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ted zkousim tohle:

protected void Odeslani()

{

using (System.Data.SqlClient.SqlConnection c = new System.Data.SqlClient.SqlConnection("Data Source=.\\SQLEXPRESS;Initial Catalog=fotbal;Integrated Security=True"))

{

using (System.Data.SqlClient.SqlDataReader r = new System.Data.SqlClient.SqlCommand("SELECT Kontakt_mail FROM Hraci", c).ExecuteReader())

{

var odesilatel = "[email protected]";

// Kam bude mail poslan

var prijemce = r.GetString(0);

// Heslo

const string heslo = "heslo";

// Zobrazeni mailu

string predmetmail = Predmet.Text.ToString();

string telo = "Od: " + Jmeno.Text + "\n";

telo += "Email: " + Email.Text + "\n";

telo += "Předmět: " + Predmet.Text + "\n";

telo += "Zpráva: \n" + Zprava.Text + "\n";

// smtp nastaveni gmail

var smtp = new System.Net.Mail.SmtpClient();

{

smtp.Host = "smtp.gmail.com";

smtp.Port = 587;

smtp.EnableSsl = true;

smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;

smtp.Credentials = new NetworkCredential(odesilatel, heslo);

smtp.Timeout = 20000;

}

smtp.Send(odesilatel, prijemce, predmetmail, telo);

}

}

}

protected void Button1_Click(object sender, EventArgs e)

{

try

{

Odeslani();

DisplayMessage.Text = "Zpráva byla odeslána...";

DisplayMessage.Visible = true;

Predmet.Text = "";

Email.Text = "";

Jmeno.Text = "";

Zprava.Text = "";

}

catch (Exception) { }

}

Bohuzel ani tohle nefunguje, ale myslim si ze by melo, nevite prosim kde by mohl byt problem?

nahlásit spamnahlásit spam -2 / 2 odpovědětodpovědět

Co nejde? Neodešle se to? Vyhodí to nějakou vyjímku? Jakou? Možná by to chtělo opravdu nejdříve něco o té problematice nastudovat, toto je snad již třicátý dotaz zde na fóru, kde chcete, aby za Vás někdo něco vymyslel...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vím kde je problém...bohužel ve Vašem přístupu...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jak vymyslel,hodil jsem sem cely kód a chci poradit proč nefunguje? Od čeho je jinak fórum...?

Nehází to žádnou chybu, ale nic se neodešle...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Mimochodem ty otázky co nejde a jestli se to neodešle mám hned nad tím, stačí si to přečíst místo toho, abyste nadávali. Bohužel většina z vás umí jenom napsat nastudujte si to, ale poradit ne. To můžete rovnou místo fóra dát nadpis nastudujte si to.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nedivte se, když je z Vašeho kódu patrné,že netušíte oč jde a že neznáte pořádně ani základy OOP. Neberte to jako výtku,ale spíše jako poukázání na správný směr - bez základů a zažitých procesů se v programování daleko nedostanete nebo budou vaše finální produkty nepoužitelné,a pro ostatní programátory jako špatný příklad. Pokud Vám už něco nejde,tak proveďte základní debugging,abyste byl schopen vložit relevantní údaje a ne větu typu "nefunguje to,co s tím?" - z toho nikdo nic nevyčte a nebude Vám tak schopen odpovědět,jinak než doposud.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Takže v tom kódu mám nějakou zásadní chybu jestli dobře chápu?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Takže vychytal jsem další chyby....ale teď se mi nechce připojit do databáze nepochopitelně...Tohle se mi vypise po odeslani...

System.InvalidOperationException: ExecuteReader vyžaduje otevřené a dostupný element Connection. Aktuální stav připojení je Zavřeno. v System.Data.SqlClient.SqlCommand.ValidateCommand(String method, Boolean async) v System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) v System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) v System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) v System.Data.SqlClient.SqlCommand.ExecuteReader() v mail.Odeslani() v c:\Users\Lukas\Documents\Visual Studio 2012\WebSites\WebSite5\Admin\mail.aspx.cs:řádek 22 v mail.Button1_Click(Object sender, EventArgs e)

tohle je muj kod:

protected void Odeslani()

{

using (System.Data.SqlClient.SqlConnection c = new System.Data.SqlClient.SqlConnection("Data Source=.\\SQLEXPRESS;Initial Catalog=fotbal;Integrated Security=True"))

{

using (System.Data.SqlClient.SqlDataReader r = new System.Data.SqlClient.SqlCommand("SELECT Kontakt_mail FROM Hraci", c).ExecuteReader())

{

List<string> prijemce = new List<string>();

while (r.Read()) { prijemce.Add(r.GetString(0)); };

var odesilatel = "[email protected]";

System.Diagnostics.Debug.WriteLine(r);

// Heslo

const string heslo = "heslo";

// Zobrazeni mailu

string predmetmail = Predmet.Text.ToString();

string telo = "Od: " + Jmeno.Text + "\n";

telo += "Email: " + Email.Text + "\n";

telo += "Předmět: " + Predmet.Text + "\n";

telo += "Zpráva: \n" + Zprava.Text + "\n";

// smtp nastaveni gmail

var smtp = new System.Net.Mail.SmtpClient();

{

smtp.Host = "smtp.gmail.com";

smtp.Port = 587;

smtp.EnableSsl = true;

smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;

smtp.Credentials = new NetworkCredential(odesilatel, heslo);

smtp.Timeout = 20000;

}

foreach (string odes in prijemce)

{

smtp.Send(odesilatel, odes.ToString(), predmetmail, telo);

}

}

}

}

protected void Button1_Click(object sender, EventArgs e)

{

try

{

Odeslani();

DisplayMessage.Text = "Zpráva byla odeslána...";

DisplayMessage.Visible = true;

Predmet.Text = "";

Email.Text = "";

Jmeno.Text = "";

Zprava.Text = "";

}

catch (Exception mojeskaredachyba)

{

Response.Write(mojeskaredachyba);

}

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Chba je ted v tom ze se to nespoji s databazi,

hlaska:

ExecuteReader requires an open and available Connection element. Current state of the connection is closed.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Hotove,chybelo c.Open();

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback