VB.NET mailto:运行时错误'91'

时间:2013-04-23 15:50:54

标签: asp.net vb.net visual-studio-2012 mailto visual-web-developer

任何人都可以查看下面的代码,并建议我如何停止接收可怕的错误91.错误:对象变量或未设置块变量。 我正在使用mailto:function使用本机电子邮件客户端发送电子邮件,并使用gridview中的数据填充电子邮件。弹出错误后,我只需单击“确定”,即可根据我想要的确切数据加载电子邮件!

Protected Sub GridView2_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView2.SelectedIndexChanged, GridView1.SelectedIndexChanged
    Dim MailFormat, Number, BodyOfEmail, FullName As String
    Dim RowValue As Double

    RowValue = GridView1.SelectedDataKey.Value - 1
    Number = GridView1.Rows(RowValue).Cells(5).Text.ToString
    FullName = GridView1.Rows(RowValue).Cells(25).Text.ToString
    BodyOfEmail = “SomeTextInTheBody”
    MailFormat = "mailto:" & Number & "?" & "subject= A subject here" & "&body=" & BodyOfEmail
    System.Diagnostics.Process.Start(MailFormat)
End Sub

我可以从.aspx页面执行以下代码:

a href="mailto:someone@example.com?Subject=Hello%20again"

并且展望开启没有问题。当执行顶部的aspx.vb代码时,它似乎只是一个问题...

由于

2 个答案:

答案 0 :(得分:4)

<a href="mailto:xxx"/>工作正常,因为它在用户的浏览器中执行,并将使用用户的本地安装的交互式电子邮件应用程序,无论它是什么。

Process.Start("mailto:xxx")将始终失败,因为它正在Web服务器上执行,可能没有本地安装的交互式电子邮件应用程序可用,即使这样,您也无法以交互方式启动它一个不存在的桌面。碰巧在测试环境中抛出错误91这一事实无关紧要。不要这样做,完全停止。

您需要做的是在服务器端事件完成后安排在页面呈现上执行一些JavaScript。像location.href = "mailto:xxx"这样的东西可以解决问题。您应该在何处插入此内容取决于您的页面设计。

或者,如果您希望完全在服务器端保留电子邮件生成代码,并且您知道用户将始终使用Outlook,则可以直接调用Exchange Server。请参阅here作为起点。

答案 1 :(得分:0)

您是否考虑过使用SmtpClient课程?

Dim SmtpServer As New SmtpClient()
Dim mail As New MailMessage()
SmtpServer.Credentials = New Net.NetworkCredential("sender address", "sender password")
SmtpServer.Port = 587              'If sending from gmail...
SmtpServer.Host = "smtp.gmail.com" 'If sending from gmail...
mail = New MailMessage()
mail.From = New MailAddress("sender address")
mail.To.Add("recipient address")
mail.Subject = ""
mail.Body = ""
SmtpServer.Send(mail)