Odeslání emailu   zodpovězená otázka

VB.NET, WinForms

Dobrý den mám tento kód:

Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSendEmail.Click

Dim EmailMessage As MailMessage = New MailMessage
Dim Attachment As Attachment

EmailMessage.From = New MailAddress("[email protected]")
EmailMessage.To.Add("[email protected]")
EmailMessage.CC.Add("[email protected]")
EmailMessage.Bcc.Add("[email protected]")
EmailMessage.Subject = ("test")

Attachment = New Attachment("C:\test.txt")
EmailMessage.Attachments.Add(Attachment)

EmailMessage.Body = "This is just a test"
EmailMessage.Priority = MailPriority.High
EmailMessage.IsBodyHtml = True

Dim smtp As New SmtpClient("EMAIL_SERVER")
Dim basicAuthenticationInfo As New System.Net.NetworkCredential("USERNAME", "PASSWORD")

smtp.Credentials = basicAuthenticationInfo
smtp.Send(EmailMessage)

End Sub

Mohl by mi někdo prosím vysvětlit a co jde v posledních 5 řádcích?

Dim smtp As New SmtpClient("EMAIL_SERVER")

Emailový server čeho?

System.Net.NetworkCredential("USERNAME", "PASSWORD")

Uživatelské jméno a heslo čeho?

Moc dík za jakoukoli odpověď.

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

Dobrý den, pokud chcete odeslat e-mail, musíte znát adresu SMTP serveru, kterému mail odešlete a on už se o doručení postará. Pokud je váš e-mail [email protected] a z něj chcete odeslat zprávu, adresa SMTP serveru bude nejspíš smtp.xxx.cz.

Většina SMTP serverů chce ještě jméno a heslo, aby se přes ně nedal šířít spam, toto jméno a heslo bývá normálně to, se kterým se přihlašujete na mail. Všechny tyto údaje se vztahují k adrese, ze které mail odesíláte.

A ještě bych poprosil, abyste zdrojový kód uzavíral mezi příslušné znaky viz dole v pokynech (stačí použít tlačítko VB code). Je to přehlednější a kód se automaticky obarví.

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

Chci vytvořit formulář pro hlášení chyb. Všechny e-maily by se měli odeslat do mé schránky na (seznam.cz). Jak by to tedy mělo vypadat? Takhle?

    Private Sub btnOdeslat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOdeslat.Click

        Dim EmailMessage As MailMessage = New MailMessage

        EmailMessage.From = New MailAddress(txtOd.Text)
        EmailMessage.To.Add(txtKomu.Text)
        EmailMessage.Subject = (txtPredmet.Text)

        EmailMessage.Body = txtTelo.Text
        EmailMessage.Priority = MailPriority.High

        Dim smtp As New SmtpClient("smtp.seznam.cz")
        Dim basicAuthenticationInfo As New System.Net.NetworkCredential("[email protected]", "hesloDoMeSchranky")

        smtp.Credentials = basicAuthenticationInfo
        smtp.Send(EmailMessage)
    End Sub

Nebo nějak jinak?

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

Ne, to právě ne. Psal jsem, že jméno a heslo a server musí být pro adresu odesílatele. Kromě toho dávat do aplikace své heslo není příliš dobrý nápad - každý jej může přečíst.

Obecně se zprávy o chybách z aplikace neodesílají mailem, ale jiným způsobem.

Jediné, co mě teď napadá, je použít tuto fintu - otevřít e-mailového klienta, kterého má uživatel nainstalovaný, a odeslat e-mail přes něj. Navíc má uživatel možnost říci, že zprávu odesílat nechce a vidí, co se odesílá (programy odesílající data bez vědomí uživatele nejsou příliš ideální).

Pokud uděláte odkaz mailto:[email protected]?subject=Hlaseni+o+chybach&body=text+zpravy , měl by se otevřít e-mail s již vyplněnými poli ve výchozím mailovém klientovi. Texty se ale do této adresy musí zakódovat pomocí funkce UrlEncode, aby v adrese nebyly problematické znaky (háčky, čárky, mezery, speciální symboly atd.). Jak tedy na to?

Ve vlastnostech projektu si na záložce References přidejte do projektu novou knihovnu System.Web. Zavřete vlastnosti projektu a napište tento kód, který zprávu vytvoří:

Dim adresa As String = "cílová@adresa.cz"
Dim predmet As String = "Hlášení o chybách"
Dim text As String = "chybová hláška atd."
'zakódovat adresu
predmet = System.Web.HttpUtility.UrlEncode(predmet)
text = System.Web.HttpUtility.UrlEncode(text)
'spustit klienta
System.Diagnostics.Process.Start("mailto:" & adresa & "?subject=" & predmet & "&body=" & text)

Doufám, že jsem v tom nikde neudělal chybu.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Zdravím,

nemůže nastat problém, když nemá uživatel klienta nainstalovaného a nakonfigurovaného?

Přeji hezká den

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

Může. Ve skutečnosti se hlášení o chybách většinou odesílají na webovou službu, ale nevím, jestli umíte třeba HTML a PHP, abyste si takovou mohl napsat.

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

Tak mě napadlo, že by bylo efektní založit si freehosting a do něj php skript na odeslání mailu a aplikací spustit ten skript. To by mohlo být dobré, nemyslíte?

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

Pokud umíte PHP, je to super. Ale dejte pozor, aby se ze skriptu nestala otevřená brána do vaší e-mailové schránky pro rozesílače spamu. Není problém zahltit vám schránku stovkami mailů během minuty.

Spíš bych doporučil, aby skript chyby ukládal do nějakého souboru, který můžete pravidelně kontrolovat (případně aby Vám odeslal mail pouze v případě, že soubor neexistuje a musel být kvůli zápisu vytvořen, po zkontrolování chyb jej zase smažte, aby Vám přišel mail při dalším záznamu). Docela totiž naštve, když máte ve schránce desítky ticíc mailů vygenerované skriptem (vím, o čem mluvím).

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

Jistě, vím přesně co máte na mysli. Já to řeším tak, že si posílám jen výpis složky se soubory chyb) a to pouze v případě, že není prázdná. Mail se odesílá každý den a funguje to skvěle - bez práce (tedy kromě oprav těch chyb).

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

Dobrý den,

měl bych takový praktický dotaz, mail v VB.net chodí OK, ale chtěl bych poslat text i obrázek v nejjednodušším podání HTML.

To HTML vypadá OK, mail je doručen (text) ale obrázek není.

Samozřejmě používám :

Emil.IsBodyHtml = True

Už se stím mořím déle a ric-pic furt nic.

Díky za postrčení Sam.

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

Neporadil by mi někdo jak na to, když chci poslat např. textovou podobu vyjímky (výpisu) dle tohoto návodu:


Dim adresa As String = "cílová@adresa.cz"
Dim predmet As String = "Hlášení o chybách"
Dim text As String = "chybová hláška atd."
'zakódovat adresu
predmet = System.Web.HttpUtility.UrlEncode(predmet)
text = System.Web.HttpUtility.UrlEncode(text)
'spustit klienta
System.Diagnostics.Process.Start("mailto:" & adresa & "?subject=" & predmet & "&body=" & text)

S libovolným krátkým textem mi to funguje, ale konkrétně ten text vyjímky to nevezme.

Předem děkuji

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

To, co se snažíte sestavit, je URL adresa (začíná mailto:) a ta nemůže obsahovat jen tak ledajaké znaky, jako třeba písmena s háčky a čárky, mezery nebo konce řádků, které se do ní snažíte nacpat. Abyste v ní tyto znaky mohl použít, musíte hodnoty parametrů zakódovat funkcí URL Encode.

Do referencí si v projektu přidejte knihovnu System.Web a kód změňte takto:

System.Diagnostics.Process.Start("mailto:" & adresa & "?subject=" & HttpUtility.UrlEncode(predmet) & "&body=" & HttpUtility.UrlEncode(text))

Tím nebezpečné a nežádoucí znaky, které dělají v adrese problém, zakódujete, celá adresa bude na jeden řádek a bez mezer a klient by ji měl vzít.

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

Nejsem si 100% jistý jestli Vaše odpověď patřila k mému dotazu z 26.9. 2008 20:21.

Vámi uváděná úprava textu byla přeci v ukázkovém kódu provedena na 5 a 6 řádku.

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

Mam dotaz: Kdyz chci poslat mail a pouziju todle:

    Private Sub btnOdeslat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim EmailMessage As MailMessage = New MailMessage

        EmailMessage.From = New MailAddress("[email protected]")
        EmailMessage.To.Add("prijemce")
        EmailMessage.Subject = ("Ahoj...")

        EmailMessage.Body = "TEXT"
        EmailMessage.Priority = MailPriority.High

        Dim smtp As New SmtpClient("smtp.seznam.cz")
        Dim basicAuthenticationInfo As New System.Net.NetworkCredential("meno", "heslo")

        smtp.Credentials = basicAuthenticationInfo
        smtp.Send(EmailMessage)
    End Sub

Misto aby to poslalo mail vrati : Authentication failed a pritom jiny programy mi z moji schranky maily pres tendle smtp v klidu posilaj.

Nekde sem cet ze je to chyba v System.Net.Mail.SmtpClient.

Muze mi to nekdo potvrdit nebo delam chybu nekde ja?

Dik

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Dobrý den,

jak k tomu ještě přiložit soubor jako přílohu?

Moc děkuju.

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

pardon myslel jsem jak přiložit soubor (třeba pdf) k tomu to:



Dim adresa As String = "cílová@adresa.cz"
Dim predmet As String = "Hlášení o chybách"
Dim text As String = "chybová hláška atd."
'zakódovat adresu
predmet = System.Web.HttpUtility.UrlEncode(predmet)
text = System.Web.HttpUtility.UrlEncode(text)
'spustit klienta
System.Diagnostics.Process.Start("mailto:" & adresa & "?subject=" & predmet & "&body=" & text)


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