Avatar billede skovs Nybegynder
15. juni 2006 - 17:24 Der er 7 kommentarer og
1 løsning

Hvordan mailer man htmlside med indhold

Jeg har lavet en side med en formular bestående diverse tekstbokse. Brugeren udfylder disse felter og når de har gjort dette vil jeg gerne tilbyde dem muligheden for at modtage formularen pr. mail "med indhol".  Det er lykkedes at streame siden, men uden indholdet i felterne. Er der nogen der har en stump kode der kan håndtere dette?
Avatar billede thrytter Nybegynder
15. juni 2006 - 22:10 #1
Prøv om du kan bruge flg. til noget - er ikke testet af.

Omkrans formularfelterne med
  <div id="divFormData">

smid et hidden-felt på siden (uden for div'en)
  <input type="hidden" id="txtFormData" name="txtFormData">

læg en onsubmit på den oprindelige formular, eks
  <form id="frmTest" onsubmit="return validateForm(this);">

lav en javascript funktion
  <script type="text/javascript">
    function validateForm(theForm)
    {
      // Tilføj evt. validering
      document.getElementById('txtFormData').value = escape(document.getElementById('divFormData').innerHTML);
      return true;
    }
  </script>

Du kan så fange formulardataene i din onclick-handler på send-knappen
    HttpUtility.UrlDecode(Request.Form("txtFormData"), System.Text.Encoding.GetEncoding(1252))

Formdata bør indpakkes i <form> </form> tags i mailen, og det anbefales at mailen er html-valid - minimerer risikoen for at den fanges i et spamfilter.

Hidden-feltet burde kunne udskiftes med et .net textfelt.
Avatar billede skovs Nybegynder
17. juni 2006 - 18:34 #2
Det ser interessant ud, men jeg kan umiddelbart ikke få det til at virke....
Avatar billede thrytter Nybegynder
17. juni 2006 - 22:19 #3
Du får lige et eksempel som skulle virke i IE, men ikke i FF

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
  <HEAD>
  <title>Formulartest</title>
  <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
  <meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
  <meta name="vs_defaultClientScript" content="JavaScript">
  <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
  <script type="text/javascript">
    function validateForm()
    {               
      if (confirm("Vil du afsende formularen?"))
      {                   
        document.getElementById('txtMailData').value = escape(document.getElementById('divMailData').innerHTML);               
        return true;
      }
      else
        return false;               
    }
  </script>
</HEAD>
<body>
  <form id="Form1" method="post" runat="server">
    <div id="divMailData">
      <table cellpadding="0" cellspacing="0">
        <tr>
          <td>Fornavn:&nbsp;</td>
          <td><asp:TextBox ID="txtFirstName" Runat="server"></asp:TextBox></td>
        </tr>
        <tr>
          <td>Efternavn:&nbsp;</td>
          <td><asp:TextBox ID="txtLastName" Runat="server"></asp:TextBox></td>
        </tr>
        <tr>
          <td>Køn:</td>
          <td>
            <asp:DropDownList ID="ddlGender" Runat="server">
              <asp:ListItem Value="0">Vælg køn</asp:ListItem>
              <asp:ListItem Value="male">Mand</asp:ListItem>
              <asp:ListItem Value="female">Kvinde</asp:ListItem>
            </asp:DropDownList>
          </td>
        </tr>
      </table>
    </div>
    <asp:Button ID="btnSend" Runat="server" Text="Send"></asp:Button>
    <input type="hidden" id="txtMailData" name="txtMailData">
  </form>       
</body>
</HTML>

og de tilhørende codebehind funktioner

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  If Not IsPostBack Then     
    Me.btnSend.Attributes.Add("onclick", "java script:return validateForm();")
  End If
End Sub

Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click
  Dim oMail As New Mail.MailMessage

  oMail.Body = Me.MailData()
  oMail.From = "_afsender_"
  oMail.To = "_modtager_"
  oMail.Subject = "Afsendelse af formular"
  oMail.BodyFormat = System.Web.Mail.MailFormat.Html

  Mail.SmtpMail.SmtpServer = "_smtpserver_"

  Try
    Mail.SmtpMail.Send(oMail)
  Catch ex As Exception
    ' Skriv besked
  End Try
End Sub

Private Function MailData() As String
  Dim sb As New System.Text.StringBuilder

  Dim sMailData As String = HttpUtility.UrlDecode(Request.Form("txtMailData"), System.Text.Encoding.GetEncoding(1252))

  sb.Append("<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.0 Transitional//EN"">" & vbCrLf)
  sb.Append("<html>" & vbCrLf)
  sb.Append("<head>" & vbCrLf)
  sb.Append("<style type=""text/css"">" & vbCrLf)
  sb.Append("BODY, TABLE, SELECT, INPUT, TEXTAREA, TR, TD, TH" & vbCrLf)
  sb.Append("{" & vbCrLf)
  sb.Append("  font-family:verdana;" & vbCrLf)
  sb.Append("  font-size:8pt;" & vbCrLf)
  sb.Append("}" & vbCrLf)
  sb.Append("</style>" & vbCrLf)
  sb.Append("<title>Test</title>" & vbCrLf)
  sb.Append("</head>" & vbCrLf)
  sb.Append("<body>" & vbCrLf)
  sb.Append("<form id=""frmMail"">")
  sb.Append(sMailData)
  sb.Append("</form>")
  sb.Append("</body>")
  sb.Append("</html>")

  MailData = sb.ToString
End Function

vbCrLf kan udskiftes med System.Environment.NewLine
Avatar billede skovs Nybegynder
19. juni 2006 - 15:40 #4
Jamen det var jo lige det jeg kunne bruger. SMUK
Avatar billede thrytter Nybegynder
19. juni 2006 - 16:08 #5
Går ud fra du gerne vil have et svar
Avatar billede skovs Nybegynder
19. juni 2006 - 18:06 #6
Yeps... i min iver kom jeg, som du kan se til at svare mig selv ;-)
Avatar billede thrytter Nybegynder
19. juni 2006 - 19:36 #7
Sidste kommentar skulle ellers have været et svar
Avatar billede ihtezaz Praktikant
17. december 2007 - 17:33 #8
Yes.. det er bare super hr. thrytter. :)
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
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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