PDA

Vollständige Version anzeigen : EMail aus VB.net


Clarke Griswold
22.03.2004, 14:43
Hallöchen,

ich möchte eine Mail samt Anlage versenden.

Dies soll möglichst ohne Mailprogramm geschehen.

Dazu habe ich aus der Hilfe diesen Code:


Imports System.Web.Mail


Dim oMail As New MailMessage

SmtpMail.SmtpServer = "mail.gmx.net"
System.

With oMail
' Absender
.From = "xxxx659"
' Empfänger
.To = "irgendwer@freenet.de"
' Betreff
.Subject = "Test-Nachricht"

' Nachricht
.Body = "Dies ist eine Test-Nachricht"

' Anlagen?
' .Attachments.Add(New MailAttachment("Dateiname"))
End With

Try
SmtpMail.Send(oMail)
MsgBox("Nachricht wurde versandt.")

Catch oEx As Exception
MsgBox("Fehler: " & oEx.Message.ToString)

End Try

Ich bekomme dabei eine Fehlermeldung.
Weiß jemand ob das funktioniert, wenn ja wie und wie ich das Problem mit dem Passwort für den Mailaccount löse?
Ich habe noch unter System.web.security gefahndet, bin aber auch dort nicht fündig geworden. :-/

Gruß

hotny
23.03.2004, 06:57
Das Problem liegt wohl eher woanders.

Also, bei fast allen Mail-Accounts muss man sich vor dem Senden einer Mail am Posteingang (POP3) mit seinem Account anmelden, was aus deinem Quelltext nicht hervorgeht.

Beim versenden über SMTP braucht man, zu mindestens bei GMX und Web.de kein Passwort, kann mich auch irren, aber bei meinen Accounts ist das nicht notwendig.

Hotny

Clarke Griswold
23.03.2004, 08:00
Moin Hotny,

ich gehe davon aus, dass man sich mit mit der Zeile " .From = "xxxx659"" zumindest benuntzernamentechnisch identifiziert. Der Mailserver wird unter smtpserver eingetragen. Fehlt 'nur' noch das Passwort zur Anmeldung.

Aber wie?

hotny
23.03.2004, 12:07
Moin Clarke!

Richtig, aber deswegen hast du dich immer noch nicht am Posteingang angemeldet, sondern nur dem Postausgang gesagt wer du bist.

Das Passwort spielt im Regelfall doch nur eine Rolle, wenn du deine Post abholen willst und nicht wenn du sie verschicken tust.

Hotny

Clarke Griswold
23.03.2004, 12:21
Hi,

meine beiden Probanden (freenet und gmx) fordern auch beim Versenden Kennwortauthetidingsda.

Mails lesen aus diesem Programm heraus möchte ich nicht, also erübrigt sich Posteingang etc.

Was ich mir eher vorstellen kann, dass ich eine speparate Routine brauche, mit der ich mich am Server anmelde und in der auch der smtpserver angesprochen wird.

Nachdem dies geschehen erfolgreich geschehen ist, kann ich die Nachricht so wie in der 'with' oben versenden.

hotny
23.03.2004, 16:02
Vielleicht kannst du ja auch im String SmtpMail.SmtpServer = "mail.gmx.net"
dort noch user und passwort dranhängen, halte ich für wahrscheinlicher, weil das ja deine eigentliche Verbindung zum SmtpServer definiert!

Hotny

Clarke Griswold
24.03.2004, 11:28
Nee, leider nicht. Die Eigenschaft .smtpserver bekommt nur einen String.
Als weitere Eigenschaft zu smtpmail gibts noch .send. Aber dort kann ich lediglich den Absender, Empfänger, Betreff und Nachricht als mit Komma geteilter Strings reinkloppen.

Unter System.Web gibt es diverse Eigenschaften, aber irgendwie kann ich keine mit System.web.mail und einem Logon mit Passwort in Verbindung bringen. :(

hotny
24.03.2004, 13:06
Naja ich dachte eigentlich eher an die folgende Möglichkeit, weiß halt nur nicht ob es geht:

SmtpMail.SmtpServer = "mail.gmx.net;USER=xxx;Passwort=xxx"

Ich schätze mal nur das es wohl eher nicht gehen wird.

Hotny

Clarke Griswold
24.03.2004, 15:19
Nein, auch das funktioniert nicht.

hotny
25.03.2004, 06:44
Sorry aber dann weiß ich auch nicht weiter!

Hotny

Clarke Griswold
07.04.2004, 09:36
Hallo,

ich habe mir nun etwas nach einer Vorlage für pop zurechtgebastelt. Die pop-Abfrage funktioniert auch auch einwandfrei.

Beim versenden erhalte ich Fehler, wenn es an das senden der eigentlichen Nachricht geht.

Hier der Code:
Imports System
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports System.io
Imports System.Threading



Public Class Form1
Inherits System.Windows.Forms.Form
Friend WithEvents MainMenu1 As System.Windows.Forms.MainMenu

Dim src As StreamWriter
Public stream As NetworkStream
Public sr As StreamReader

Private Sub cmdPOPen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdPOPen.Click
Dim server As String = "mail.gmx.net"
Dim message As String
Dim send As String
Dim client As New TcpClient(server, 25)
stream = client.GetStream()

sr = New StreamReader(stream)

'SMTP Mail senden
txtresponse.Text += sendCommand("helo gmx")
txtresponse.Text += sendCommand("mail from:<xxxxxxxx@gmx.de>")
txtresponse.Text += sendCommand("RCPT TO: <xxxxxxxxr@freenet.de>")
txtresponse.Text += sendCommand("data")
txtresponse.Text += sendCommand("from: <xxxxxxxx@gmx.de>")
txtresponse.Text += sendCommand("to: <xxxxxxxx@freenet.de>")
txtresponse.Text += sendCommand("subject: TelnetTestsend")
txtresponse.Text += sendCommand(vbCrLf)
txtresponse.Text += sendCommand(vbCrLf)
txtresponse.Text += sendCommand("Hallo VBNET Test")
txtresponse.Text += sendCommand(vbCrLf)
txtresponse.Text += sendCommand(".")
txtresponse.Text += sendCommand("quit")

End Sub
Private Function sendCommand(ByVal send As String) As String
send += vbCrLf
Dim data As [Byte]() = Encoding.ASCII.GetBytes(send)
stream.Write(data, 0, data.Length)
sr = New StreamReader(stream)
Dim buffer As New StringBuilder
Do While sr.Peek() > 0
Thread.Sleep(100)
buffer.Append(sr.ReadLine + vbCrLf)
Loop
Return buffer.ToString
End Function

Private Sub cmdClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdClear.Click
txtresponse.Text = ""
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim server As String = "pop.gmx.net"
Dim user As String = "xxxxxxxx"
Dim password As String = "xxxxxxxx"
Dim message As String
Dim send As String
Dim client As New TcpClient(server, 110)
stream = client.GetStream()

sr = New StreamReader(stream)

'POP3 Anmeldung
txtresponse.Text += sendCommand("user " + user)
txtresponse.Text += sendCommand("PASS " + password)
txtresponse.Text += sendCommand("list")
txtresponse.Text += sendCommand("quit")
End Sub
End Class

Hat jemand eine Idee wo der Fehler liegt?