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