1

任何人都可以看看我下面的代码并推荐我如何停止接收可怕的错误 91。错误:对象变量或未设置块变量。我正在使用 mailto: 函数使用本机电子邮件客户端发送电子邮件并从 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 代码时,这似乎只是一个问题......

谢谢

4

2 回答 2

4

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

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

您需要做的是安排一些 JavaScript 在服务器端事件完成后在页面渲染上执行。类似的东西location.href = "mailto:xxx"可能会奏效。您应该将其插入的确切位置取决于您的页面设计。

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

于 2013-04-23T16:28:18.557 回答
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)
于 2013-04-23T16:01:42.060 回答