任何人都可以查看下面的代码,并建议我如何停止接收可怕的错误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代码时,它似乎只是一个问题...
由于
答案 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)