2016-04-28 98 views
1

我試圖編寫一個DataGridHyperlinkColumn,其中包含用戶的電子郵件,通過點擊地址時通過Outlook發送一封新郵件。現在我只是使用測試郵件而不是獲取列的內容,但這是我迄今爲止;編程HyperlinkColumn發送電子郵件WPF

<DataGridHyperlinkColumn Header="Email" Binding="{Binding Email}"> 
    <DataGridHyperlinkColumn.ElementStyle> 
     <Style> 
      <EventSetter Event="Hyperlink.Click" Handler="OnEmailHyperlinkClick"/> 
     </Style> 
    </DataGridHyperlinkColumn.ElementStyle> 
</DataGridHyperlinkColumn> 

然後在C#中的處理程序;

private void OnEmailHyperlinkClick(object sender, RoutedEventArgs e) 
{ 
    string subject = "My subject"; 
    string emailTag = string.Format("mailto:[email protected]?subject={0}", subject); 
    System.Diagnostics.Process.Start(emailTag); 
} 

此刻這是提供奇怪的行爲。首先,它會打開Goog​​le Chrome的新實例。與Outlook完全沒有關係。然後它崩潰說:

無法找到資源「addressbook/[email protected]

它幾乎一樣,如果這個事件實際上是被其他地方處理,但我一定LAMOST它不是。有誰之前經歷過這個嗎?

回答

0

您的解決方案所做的就是告訴windows嘗試使用提供的字符串開始新進程。

您需要指定您希望它使用Outlook。

Microsoft.Office.Interop.Outlook引用添加到您的項目(確保它是正確的版本)

然後嘗試這樣的事:

public static void OnEmailHyperlinkClick(object sender, RoutedEventArgs e) 
     { 
      try 
      { 
       Microsoft.Office.Interop.Outlook.Application oApp = new Microsoft.Office.Interop.Outlook.Application(); 

       MailItem msg = (MailItem)oApp.CreateItem(OlItemType.olMailItem); 

       msg.Subject = "My subject"; 

       msg.Body = "My Message Body"; 

       Recipients recipients = (Recipients)msg.Recipients; 

       Recipient recipient = (Recipient)recipients.Add("[email protected]"); 
       recipient.Resolve(); 

       msg.Display(); // If you want to have the email displayed for the user to send 
       // Otherwise 
       msg.Send(); 

       recipient = null; 
       recipients = null; 
       msg = null; 
       oApp = null; 
      } 
      catch (Exception ex) 
      { 

      } 
     } 
+0

謝謝您的回答。這現在確實會在Outlook中打開一封電子郵件,而不是Chrome中的標籤,但是我仍然收到錯誤「無法找到資源」地址簿/ someone @ test.com''。有什麼建議? – CBreeze

+0

Outlook通訊錄中的「someone @ test.com」?嘗試使用它與真實的電子郵件地址。 –