1

任何人都可以看看我的代码下面,并建议如何我可以停止接收可怕的错误91.错误:对象变量或块变量未设置。 我正在使用mailto:函数使用本地电子邮件客户端发送电子邮件,并使用gridview填充电子邮件。弹出错误后,我只需点击确定,电子邮件就会加载,并提供我想要的确切数据!VB.NET mailto:运行时错误'91'

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:[email protected]?Subject=Hello%20again" 

和前景没有问题打开。这似乎是在执行上面的代码aspx.vb最多时仅是一个问题......

感谢

+0

错误发生在哪一行? – Sam 2013-04-23 15:55:04

+0

执行System.Diagnostics.Process.Start(MailFormat)并在Outlook内部发生时发生错误。弹出框是标题SCOutlook。 – user2312069 2013-04-23 15:56:03

+0

用样本值进行测试,唯一奇怪的是在FullName后用逗号变量声明变量,将其删除,然后运行 – Steve 2013-04-23 15:59:37

回答

4

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

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

你需要做的是安排一些JavaScript在服务器端事件完成后在页面渲染上执行。像location.href = "mailto:xxx"可能会诀窍。你应该在哪里插入这取决于你的页面设计。

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

+0

任何人都可以提供一些关于如何执行这个推荐的Java脚本的指导吗? – user2312069 2013-04-23 16:46:02

+0

感谢您向我提供这种理解。 – user2312069 2013-04-23 20:07:33

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) 
+0

我有,但我希望电子邮件启动用户的本地Outlook客户端,以便他们已发送的电子邮件的副本发送文件夹中。 – user2312069 2013-04-23 16:04:16

+0

是否有必要? – Sam 2013-04-23 16:07:37

+0

这是客户的要求,因此是必需的。如果不是必须的,我不会走这条路。 – user2312069 2013-04-23 16:09:00