【问题标题】:VB.NET mailto: Run-time error '91'VB.NET mailto:运行时错误“91”
【发布时间】:2013-04-16 22:22:31
【问题描述】:

任何人都可以看看我下面的代码并推荐我如何停止接收可怕的错误 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"

outlook 打开没有问题。似乎只有在执行顶部的 aspx.vb 代码时才会出现问题...

谢谢

【问题讨论】:

  • 错误发生在哪一行?
  • 执行 System.Diagnostics.Process.Start(MailFormat) 并在 Outlook 内部发生错误。弹出框是标题 SCOutlook。
  • 用样本值测试过,唯一奇怪的是在 FullName 之后用那个多余的逗号声明变量,删除然后它可以工作
  • 我已经更正了那个错字。然而,这不是我所指的错误。
  • 奇怪的是,如果我从 .aspx 页面调用: 而不是从aspx.vb 页面,Outlook 可以正常打开,没有错误。

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


【解决方案1】:

您是否考虑过使用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)

【讨论】:

  • 我有,但我希望电子邮件启动用户的本地 Outlook 客户端,以便他们在其已发送文件夹中拥有已发送电子邮件的副本。
  • 这是客户的要求,因此是必需的。如果不是必须的,我不会走这条路:)。
  • 嗯,有没有办法手动将电子邮件添加到已发送的文件夹中?
  • 为什么不使用 SmptClient 而只是抄送发送电子邮件的用户,以便他们在收件箱中有一份副本?这符合发件人有副本的要求。
  • 在这种情况下,将副本发送给原始收件人发件人的情况并不少见——LinkedIn、eBay 和许多其他公司这样做是为了让双方都有一个完整的电子邮件记录,无需尝试任何这种伪造……@HardCode 以 3 秒的优势击败了我
【解决方案2】:

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

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

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

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

【讨论】:

  • 谁能指导我如何执行这个推荐的java脚本?
  • 感谢您对我的理解。
猜你喜欢
  • 2011-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多