2016-06-19 6 views
0

Ich war Absender von E-Mails in vb.net codiert und es gibt Syntaxfehler. Code unten:Syntax Fehler in 'Neu'

Try 
     Dim message As New MailMessage With { 
     .Subject = Me.SubjectTxt.Text 
    } 
     message.To.Add(Me.ReceiverTxt.Text) 
     message.From = New MailAddress(Me.EmailTxt.Text) 
     message.Body = Me.BodyTxt.Text 
     Dim num2 As Integer = (Me.AttachmentListbox.Items.Count - 1) 
     Dim i As Integer = 0 
     Do While (i <= num2) 
      Dim item As New Attachment(Conversions.ToString(Me.AttachmentListbox.Items.Item(i))) 
      message.Attachments.Add(item) 
      i += 1 
     Loop 
    New SmtpClient(Me.ClientBox.Text) With { _ 
     .EnableSsl = True, _ 
     .Credentials = New NetworkCredential(Me.EmailTxt.Text, Me.PasswordTxt.Text), _ 
     .Port = Conversions.ToInteger(Me.PortTxt.Text) _ 
    }.Send(message) 
    Interaction.MsgBox(("Message sent to " & Me.ReceiverTxt.Text), MsgBoxStyle.Information, "SMTP Email Sender") 
    Catch exception1 As Exception 
     ProjectData.SetProjectError(exception1) 
     Dim exception As Exception = exception1 
     If (Me.ReceiverTxt.Text = Nothing) Then 
      Interaction.MsgBox("Please fill up the Receiver.", MsgBoxStyle.Exclamation, "You missed something!") 
     ElseIf (Me.SubjectTxt.Text = Nothing) Then 
      Interaction.MsgBox("Please fill up Subject.", MsgBoxStyle.Exclamation, "You missed something!") 
     ElseIf (Me.BodyTxt.Text = Nothing) Then 
      Interaction.MsgBox("Please fill up the Message Body.", MsgBoxStyle.Exclamation, "You missed something!") 
     ElseIf (Me.EmailTxt.Text = Nothing) Then 
      Interaction.MsgBox("Please fill up the Email for Account Log In.", MsgBoxStyle.Exclamation, "You missed something!") 
     ElseIf (Me.PasswordTxt.Text = Nothing) Then 
      Interaction.MsgBox("Please fill up the Password for Account Log In.", MsgBoxStyle.Exclamation, "You missed something!") 
     ElseIf (Me.ClientBox.Text = Nothing) Then 
      Interaction.MsgBox("Please fill up the Server for basis of SMTP Server.", MsgBoxStyle.Exclamation, "You missed something!") 
     ElseIf (Me.PortTxt.Text = Nothing) Then 
      Interaction.MsgBox("Please fill up the Port to successfully send the email.", MsgBoxStyle.Exclamation, "You missed something!") 
     Else 
      Interaction.MsgBox("Sending Failed", DirectCast(Conversions.ToInteger("SMTP Email Sender"), MsgBoxStyle), Nothing) 
     End If 
     ProjectData.ClearProjectError() 
    End Try 

Der Fehler ist in New SmtpClient

Antwort

0

Problem von initializers - Sie wissen nicht, welche Linie ein Problem ist. Zerlegen Sie zuerst Ihren Code in viele Zeilen.

Dim smtp As New SmtpClient(Me.ClientBox.Text) With { .EnableSsl = True } 
smtp.Credentials = New NetworkCredential(Me.EmailTxt.Text, Me.PasswordTxt.Text) 
smtp.Port = Conversions.ToInteger(Me.PortTxt.Text) 
smtp.Send(message) 

Im Allgemeinen war Ihr Problem in der Linie beginnend mit neuen. Ich habe es gerade getestet, es funktioniert nicht in Vb. So etwas - (new class()).DoSomething funktioniert in C#. Aber nicht in vb. Aber auch hier können komplexe Initialisierer bei Debugging-Problemen nachteilig sein. Jetzt werden Sie in der Lage sein, welche Zeile genau den Fehler verursacht.

Außerdem sollten Sie .Trim() überall

Me.PortTxt.Text.Trim() 
+0

@PloxorPB Gern geschehen. Im Allgemeinen war Ihr Problem in der Reihe, beginnend mit "neu". Ich habe es gerade getestet, es funktioniert nicht in Vb. So etwas wie - ('new class()). DoSomething funktioniert in C#. Aber nicht in vb. Aber auch hier können komplexe Initialisierer bei Debugging-Problemen nachteilig sein. –

0

hinzufügen Dieses gearbeitet haben sollte:

With New SmtpClient(Me.ClientBox.Text.Trim) With { 
     .EnableSsl = True, 
     .Credentials = New NetworkCredential(Me.EmailTxt.Text.Trim, Me.PasswordTxt.Text.Trim), 
     .Port = Conversions.ToInteger(Me.PortTxt.Text.Trim) } 
    .Send(message) 
End With 

Beachten Sie, dass die .Send ist gegen die Außen Mit Block und die Unterstreichungen werden nicht benötigt. Auch hinzugefügt. Trim als die andere Antwort vorgeschlagen.

+0

Ok, das ist gut, dass Sie Objekt mit 'With' initiieren können. Aber bei komplexen Initialisierern bleibt das Problem - Sie werden nicht wissen, welche Zeile ein Problem ist. Wenn Sie 'new Class() Mit {.a = true, .b = 10, .c =" string1 "}' haben - ist das in Ordnung. Wenn Eigenschaften jedoch komplexem Code zugewiesen werden, ist dies ** schlecht ** für die Pflege und das Debuggen von Code –