Vorgegeben ist es, dass User sich einloggen können, Profile von Freunden ansehen und denen
auch Nachrichten (in der Form einer Email) schicken können.
später im Quellcode wird ja festgelegt, an wen die email geschickt werden soll. In der Aufgabengstellung
der Hausarbeit heißt es, dass der Name des Empfängers ausgewählt und die Email dann als Variable
ausgelesen werden soll. Anhand der Datenbankabfrage soll eine Variable (ausgabeemail) mit der
Email gefüllt werden.)
<%@ Page Language="VB" Debug="true"%>
<%@ Import Namespace="System.Net.Mail" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<script runat="server">
Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim nachricht As New System.Net.Mail.MailMessage
Dim inhalt As String
Dim fehlermeldung As String
fehlermeldung = ""
If anliegen.Text = "" Then
fehlermeldung = fehlermeldung & "Was ist dein Anliegen? <br/>"
End If
If name.Text = "" Then
fehlermeldung = fehlermeldung & "Wie heißt du denn? <br/>"
End If
If email.Text = "" Then
fehlermeldung = fehlermeldung & "Wie lautet deine E-Mail-Adresse? <br/>"
End If
If text.Text = "" Then
fehlermeldung = fehlermeldung & "Wie soll deine Nachricht lauten? <br/>"
End If
Dim db As String
db = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("profile.mdb") & ";"
Dim conn As New OleDbConnection(db)
conn.Open()
Dim sql As String
'hier wird der sql-Befehl zusammengestellt. Der User klickt auf dem Profil des „Freundes“
auf einen Link und kommt dann auf diese Kontaktseite. In der Adresszeile der Seite ist dann festgehalten,
an wen die Nachricht geschickt werden soll. Die Adresse der Kontaktseite lautet damit:
…kontakt.aspx?Name=… (name) Also wird im Folgenden gesagt: suche mir die emailadresse aus der
Spalte email aus der Datenbank „profile“ wo der name dem entspricht, der oben in der Seitenadresse steht.
sql = "SELECT email FROM profile WHERE name='" & Request.QueryString("Name") & "'"
Dim cmd As New OleDbCommand(sql, conn)
Dim myReader As OleDbDataReader
myReader = cmd.ExecuteReader()
'in Übungen haben wir immer eine Datenbankabfrage so vorgenommen, dass eine Variable als
StringBuilder festgelegt und dann später mti den Daten gefüllt wurde. Da aber ein Stringbuilder nicht
in dem Feld, in dem der Empfänger steht, erlaubt ist, habe ich es mit einem normalen String probiert.
Da die Emailadresse auch immer mit „“ angegeben werden soll, füge ich die „’“ einzelnd um die
Emailadresse hinzu…
Dim ausgabeemail As String
ausgabeemail = "'" & myReader.Item("email") & "'"
myReader.Close()
conn.Close()
If fehlermeldung = "" Then
inhalt = "Du hast folgende Nachricht bekommen:" & Chr(10)
inhalt = inhalt & "Name:" & name.Text & Chr(10)
inhalt = inhalt & "E-Mail: " & email.Text & Chr(10)
inhalt = inhalt & "Betreff: " & anliegen.Text & Chr(10)
inhalt = inhalt & text.Text & Chr(10)
nachricht.From = New MailAddress(email.Text, name.Text)
nachricht.To.Add(ausgabeemail)
nachricht.Subject = anliegen.Text
nachricht.Body = inhalt
Dim smtp As New SmtpClient("renoir.nordakademie.de")
'das ist der einzige Client, den wir ausprobieren können. Den wüsste ich also nicht, wie man den variabel
gestalten kann, da mri von anderen emailadressen (als Absender) die smtpclients nicht bekannt sind
smtp.Send(nachricht)
' Hinweis für den Nutzer/Absender ausgeben
ausgabe.InnerText = "Deine Nachricht wurde verschickt!"
Else
'wenn es Fehler gab, dann wie folgt ausgeben
ausgabe.InnerHtml = "<b> Fehler:</b><br/>" & fehlermeldung
End If
End Sub
</script>
<!-- #include file="headerintern.tpl" -->
<div class="inhalt">
<h1>Das Kontaktformular</h1>
<form id="form2" runat="server">
Hier kannst du deine Email schreiben:<br />
<br />
<table>
<tr>
<td style="width: 164px; height: 18px;">
Was ist dein Anliegen?</td>
<td style="width: 379px; height: 18px;">
<asp:TextBox id="anliegen" runat="server" width="149px"></asp:TextBox></td>
<td style="width: 423px; height: 18px;"> </td>
</tr>
<tr>
<td style="width: 164px; height: 14px;">
dein Name:</td>
<td style="width: 379px; height: 14px;">
<asp:TextBox id="name" runat="server" width="149px"></asp:TextBox></td>
<td style="width: 423px; height: 14px;">
</td>
</tr>
<tr>
<td style="width: 164px; height: 14px;">
deine E-M@il:</td>
<td style="width: 379px; height: 14px;">
<asp:TextBox id="email" runat="server" width="149px"></asp:TextBox></td>
<td style="width: 423px; height: 14px;">
</td>
</tr>
<tr>
<td style="width: 164px; height: 38px;">
Deine Nachricht:</td>
<td style="width: 379px; height: 38px;">
<asp:TextBox id="text" runat="server" height="130px" width="341px"></asp:TextBox></td>
<td style="width: 423px; height: 38px"><span id="ausgabe" runat="server"></span>
</td>
</tr>
<tr>
<td style="width: 164px">
</td>
<td style="width: 379px">
<asp:Button id="senden" onclick="Button1_Click" runat="server" text="senden" />
<input id="zuruecksetzen" type="reset" value="zurücksetzen" /></td>
<td style="width: 423px">
</td>
</tr>
<tr></tr>
</table>
<br />
<br />
</form>
</div>
<!-- #include file="footerintern.tpl" -->
Die Seite um eine Email/Nachricht zu schicken kann bis jetzt ganz normal geöfftnet und ausgefüllt
werden. Wenn man dann aber auf "Senden" klickt, kommt eine Fehlermeldung:
Ausnahmedetails: System.InvalidOperationException: Keine Daten für die Zeile/Spalte.
Quellfehler:
Zeile 57:
Zeile 58:
Zeile 59: ausgabeemail = "'" & myReader.Item("email") & "'"
Zeile 60: myReader.Close()
Zeile 61: conn.Close()
Quelldatei: C:\28-08-08\intern\kontakt.aspx Zeile: 59
Stapelüberwachung:
[InvalidOperationException: Keine Daten für die Zeile/Spalte.]
System.Data.OleDb.OleDbDataReader.DoValueCheck(Int
32 ordinal) +1043511
System.Data.OleDb.OleDbDataReader.GetValue(Int32 ordinal) +12
System.Data.OleDb.OleDbDataReader.get_Item(String name) +27
ASP.intern_kontakt_aspx.Button1_Click(Object sender, EventArgs e) in C:\28-08-08\intern\kontakt.aspx:59
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +111
System.Web.UI.WebControls.Button.RaisePostBackEven
t(String eventArgument) +110
System.Web.UI.WebControls.Button.System.Web.UI.IPo
stBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEve
ntHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCol
lection postData) +36
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565
Ich hoffe, jemand kann mir helfen. Vielen Dank schonmal für eventuelle Antworten!
GLG,
Sandra
Dieser Beitrag wurde von *sunny nightmare* bearbeitet: 30. August 2008 - 14:37