VB.NET中的Sendmail附件问题

VB.NET中的Sendmail附件问题,vb.net,sendmail,Vb.net,Sendmail,我在vb.net中有一个sendmail程序。我的附件发送得很好。问题是当没有附件时,程序会出错。我如何处理无附件绕过和发送无附件?下面的方法很好用 是的,是的,我知道,我的命名习惯很可怕。一旦逻辑100%完成,我将进行更改 Imports System.Net.Mail Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

我在vb.net中有一个sendmail程序。我的附件发送得很好。问题是当没有附件时,程序会出错。我如何处理无附件绕过和发送无附件?下面的方法很好用

是的,是的,我知道,我的命名习惯很可怕。一旦逻辑100%完成,我将进行更改

Imports System.Net.Mail
Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If TextBox1.Text = "" Then
            MsgBox("Please describe the issue you're having Bender, I'm not a mindreader!")
            Exit Sub
        Else
            lblpleasewait.Visible = True
            Delay(2000)
            Dim Recipients As New List(Of String)
            Recipients.Add("emtnap6@yahoo.com")
            Dim FromEmailAddress As String = Recipients(0)
            Dim Subject As String = "IT Help!"
            Dim Body As String = TextBox1.Text
            Dim UserName As String = "fakeout"
            Dim Password As String = "fakeout"
            Dim Port As Integer = 587
            Dim Server As String = "smtp.gmail.com"
            Dim Attachments As New List(Of String)
            MsgBox(SendEmail(Recipients, FromEmailAddress, Subject, Body, UserName, Password, Server, Port, Attachments))
            TextBox2.Text = "Attach Screenshot:"
            TextBox2.TextAlign = HorizontalAlignment.Right
            lblpleasewait.Visible = False
            TextBox1.Text = ""
            TextBox1.Focus()
        End If
    End Sub
    Sub delay(ByVal delay_ms As Integer)
        Dim tspan As New TimeSpan
        Dim tstart = Now
        While tspan.TotalMilliseconds < delay_ms
            tspan = Now - tstart
            Application.DoEvents()
        End While
    End Sub


    Function SendEmail(ByVal Recipients As List(Of String), _
                      ByVal FromAddress As String, _
                      ByVal Subject As String, _
                      ByVal Body As String, _
                      ByVal UserName As String, _
                      ByVal Password As String, _
                      Optional ByVal Server As String = "smtp.gmail.com", _
                      Optional ByVal Port As Integer = 587, _
                      Optional ByVal Attachments As List(Of String) = Nothing) As String
        Dim Email As New MailMessage()
        Try
            Dim SMTPServer As New SmtpClient
            ''For Each Attachment As String In Attachments
            ''    Email.Attachments.Add(New Attachment(Attachment))
            'Next
            Dim mailattach As String = TextBox2.Text
            Dim attachment As System.Net.Mail.Attachment
            attachment = New System.Net.Mail.Attachment(mailattach)
            Email.Attachments.Add(attachment)

            Email.From = New MailAddress(FromAddress)
            For Each Recipient As String In Recipients
                Email.Bcc.Add(Recipient)
            Next
            Email.Subject = Subject
            Email.Body = Body
            SMTPServer.Host = Server
            SMTPServer.Port = Port
            SMTPServer.Credentials = New System.Net.NetworkCredential(UserName, Password)
            SMTPServer.EnableSsl = True
            SMTPServer.Send(Email)
            Email.Dispose()
            Return "Email to Derek was successfully sent."
        Catch ex As SmtpException
            Email.Dispose()
            Return "Sending Email Failed. Smtp Error."
        Catch ex As ArgumentOutOfRangeException
            Email.Dispose()
            Return "Sending Email Failed. Check Port Number."
        Catch Ex As InvalidOperationException
            Email.Dispose()
            Return "Sending Email Failed. Check Port Number."
        End Try
    End Function

    Private Sub FolderBrowserDialog1_HelpRequest(sender As Object, e As EventArgs)
        If (FolderBrowserDialog1.ShowDialog() = Windows.Forms.DialogResult.OK) Then
            TextBox2.Text = FolderBrowserDialog1.SelectedPath
        End If
    End Sub

    Private Sub Button2_Click(sender As Object, e As System.EventArgs) Handles Button2.Click
        OpenFileDialog1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
        If (OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK) Then
            TextBox2.Text = OpenFileDialog1.FileName
        End If
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        TextBox1.Focus()
    End Sub

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        If Not Environment.Is64BitProcess Then
            Process.Start("C:\Windows\sysnative\SnippingTool.exe")
        Else
            Process.Start("C:\Windows\system32\SnippingTool.exe")
        End If

    End Sub

    Private Sub OpenFileDialog1_FileOk(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk
        OpenFileDialog1.InitialDirectory = Environment.SpecialFolder.MyComputer
    End Sub
End Class
导入System.Net.Mail
公开课表格1
私有子按钮1\u单击(发送者作为对象,e作为事件参数)处理按钮1。单击
如果TextBox1.Text=”“,则
MsgBox(“请描述一下你遇到的问题,我不是读心术的人!”)
出口接头
其他的
lblpleasewait.Visible=True
延迟(2000年)
将收件人设置为新列表(字符串)
收件人。添加(“emtnap6@yahoo.com")
Dim FromEmailAddress As String=收件人(0)
将主题暗显为String=“IT Help!”
将主体尺寸标注为字符串=TextBox1.Text
用户名为String=“fakeout”
将密码设置为String=“fakeout”
Dim端口为整数=587
将服务器设置为String=“smtp.gmail.com”
将附件调整为新列表(字符串)
MsgBox(发送电子邮件(收件人、发件人电子邮件地址、主题、正文、用户名、密码、服务器、端口、附件))
TextBox2.Text=“附加屏幕截图:”
TextBox2.TextAlign=水平对齐。右
lblpleasewait.Visible=False
TextBox1.Text=“”
TextBox1.Focus()
如果结束
端接头
子延迟(ByVal delay_ms为整数)
将tspan变暗为新的时间跨度
Dim tstart=现在
而tspan.total毫秒<延迟毫秒
tspan=Now-tstart
Application.DoEvents()
结束时
端接头
函数SendEmail(ByVal收件人作为列表(字符串)_
ByVal FromAddress作为字符串_
ByVal主语作为字符串_
ByVal主体作为字符串_
ByVal用户名作为字符串_
ByVal密码作为字符串_
可选的ByVal服务器为String=“smtp.gmail.com”_
可选的ByVal端口,整数=587_
可选的ByVal附件作为列表(字符串的)=无)作为字符串
将电子邮件变暗为新邮件消息()
尝试
Dim SMTPServer作为新的SmtpClient
''对于每个附件,作为附件中的字符串
“”电子邮件。附件。添加(新附件(附件))
”“接着呢
Dim mailattach As String=TextBox2.Text
Dim附件作为System.Net.Mail.attachment
附件=新系统.Net.Mail.attachment(mailattach)
Email.Attachments.Add(附件)
Email.From=新邮件地址(FromAddress)
将每个收件人作为收件人中的字符串
Email.Bcc.Add(收件人)
下一个
Email.Subject=主题
Email.Body=Body
SMTPServer.Host=Server
SMTPServer.Port=端口
SMTPServer.Credentials=新系统.Net.NetworkCredential(用户名、密码)
SMTPServer.EnableSsl=True
SMTPServer.Send(电子邮件)
Email.Dispose()
Return“发送给Derek的电子邮件已成功。”
捕获ex作为SmtpException
Email.Dispose()
Return“发送电子邮件失败。Smtp错误”
捕获ex作为ArgumentOutOfRangeException
Email.Dispose()
Return“发送电子邮件失败,请检查端口号”
捕获Ex作为无效操作异常
Email.Dispose()
Return“发送电子邮件失败,请检查端口号”
结束尝试
端函数
私有子文件夹浏览器对话框1_HelpRequest(发送者作为对象,e作为事件参数)
如果(FolderBrowserDialog1.ShowDialog()=Windows.Forms.DialogResult.OK),则
TextBox2.Text=FolderBrowserDialog1.SelectedPath
如果结束
端接头
私有子按钮2\u单击(发送者作为对象,e作为System.EventArgs)处理按钮2。单击
OpenFileDialog1.InitialDirectory=Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
如果(OpenFileDialog1.ShowDialog()=Windows.Forms.DialogResult.OK),则
TextBox2.Text=OpenFileDialog1.FileName
如果结束
端接头
私有子表单1_Load(发送方作为对象,e作为事件参数)处理MyBase.Load
TextBox1.Focus()
端接头
私有子按钮3\u单击(发送者作为对象,e作为事件参数)处理按钮3。单击
如果不是Environment.is64位进程,则
Process.Start(“C:\Windows\sysnative\SnippingTool.exe”)
其他的
Process.Start(“C:\Windows\system32\SnippingTool.exe”)
如果结束
端接头
私有子OpenFileDialog1\u FileOk(发送方作为对象,e作为System.ComponentModel.CancelEventArgs)处理OpenFileDialog1.FileOk
OpenFileDialog1.InitialDirectory=Environment.SpecialFolder.MyComputer
端接头
末级

这应该可以解决问题

If TextBox2.text <> "" then
    Dim mailattach As String = TextBox2.Text
    Dim attachment As System.Net.Mail.Attachment
    attachment = New System.Net.Mail.Attachment(mailattach)
    Email.Attachments.Add(attachment)
End if
如果TextBox2.text为“”,则
Dim mailattach As String=TextBox2.Text
Dim附件作为System.Net.Mail.attachment
附件=新系统.Net.Mail.attachment(mailattach)
Email.Attachments.Add(附件)
如果结束

另外,显示代码的其余部分。。。只是邮件部分。什么条件决定了这一点。。。这将是一个开始。如果你根据你的其他问题制作一个列表,循环列表,如果没有,跳过添加附件。Mr CoDeXeR只是一个文件打开按钮,将选择的文件路径放入文本框,然后发生上述事件。如何循环函数,如果没有,则跳过它?如果你需要的话,我可以发布我剩余的代码。请发布你剩余的代码。我会试试这个然后给你回复。非常感谢。不客气。既然我的回答对你有帮助,请记下来