2016-04-28 5 views
1

Ich versuche eine DataGridHyperlinkColumn zu programmieren, die E-Mails von Benutzern enthält, um eine neue E-Mail über Outlook zu senden, wenn Sie auf die Adresse klicken. Im Moment verwende ich nur eine Test-E-Mail, anstatt den Inhalt der Spalte zu erhalten, aber das ist es, was ich bisher habe;Programmierung von HyperlinkColumn zum Senden einer E-Mail WPF

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

Dann der Handler in 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); 
} 

Im Moment bietet dies seltsames Verhalten. Zunächst öffnet es eine neue Instanz von Google Chrome. Nichts mit Outlook überhaupt zu tun. Es stürzt dann ab und sagt;

kann nicht gefunden Ressource ‚addressbook/[email protected]

Es ist fast so, als ob dieses Ereignis tatsächlich an anderer Stelle behandelt wird, aber ich bin LAMOST sicher, es ist nicht. Hat das schon mal jemand erlebt?

Antwort

0

Alles, was Ihre Lösung tut, ist, dass Windows versucht, einen neuen Prozess mit der angegebenen Zeichenfolge zu starten.

Sie müssen angeben, dass Outlook verwendet werden soll.

Fügen Sie den Microsoft.Office.Interop.Outlook Bezug auf Ihr Projekt (stellen Sie sicher, dass es die richtige Version)

Dann so etwas wie dies versuchen:

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

Vielen Dank für Ihre Antwort. Dies öffnet jetzt eine E-Mail in "Outlook" statt einer Registerkarte in Chrome, aber ich bekomme immer noch den Fehler "Kann Ressource nicht finden" addressbook/someone @ test.com''. Irgendein Rat? – CBreeze

+0

Ist 'jemand @test.com' im Outlook-Adressbuch? Versuchen Sie es stattdessen mit einer echten E-Mail-Adresse. –

Verwandte Themen