{"id":55000109,"date":"2017-12-01T00:00:00","date_gmt":"2020-03-27T19:29:18","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=109"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"EMails_mit_Outlook_verschicken","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/EMails_mit_Outlook_verschicken\/","title":{"rendered":"E-Mails mit Outlook verschicken"},"content":{"rendered":"<p><b>Wer Anwendungen mit Visual Studio programmiert, die Daten wie etwa die von Kunden verwaltet, kommt fr&uuml;her oder sp&auml;ter nicht um eine Funktion zum Versenden von E-Mails herum. Da gibt es nun zwei M&ouml;glichkeiten: Sie verwenden eine eigene SMTP-Klasse, um die E-Mails zu versenden. Das klappt mit .NET-Projekten viel einfacher als etwa unter Access, weil es hier schon fertige Klassen f&uuml;r diesen Anwendungszweck gibt. Allerdings werden die gesendeten Mails dann nicht in Outlook im Ordner &#8220;Gesendete Elemente&#8221; gespeichert. Deshalb schauen wir uns in diesem Artikel den Versand von Mails per Outlook an. In einem anderen Artikel gehen wir dann auf die Verwendung einer SMTP-Klasse ein.<\/b><\/p>\n<h2>Beispielanwendung<\/h2>\n<p>Wir wollen als Beispiel f&uuml;r diesen Artikel eine kleine WPF-Anwendung programmieren, mit der Sie die Daten des E-Mail-Empf&auml;ngers sowie Betreff, Inhalt und weitere Informationen eingeben k&ouml;nnen. Eine Schaltfl&auml;che soll dann die eingegebenen Daten an eine Outlook-Instanz schicken und die E-Mail versenden.<\/p>\n<p>Also legen Sie zun&auml;chst eine WPF-Anwendung in der von Ihnen bevorzugten Sprache an (also etwa VB oder C#). Das Fenster <b>MainWindow.xaml <\/b>ist dann auch gleich das Element, das wir mit den ben&ouml;tigten Steuerelementen versehen wollen. Dieses gestalten wir wie in Bild 1.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_109_001.png\" alt=\"Einfaches Formular zum Versenden von E-Mails\" width=\"549,6265\" height=\"307,9984\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Einfaches Formular zum Versenden von E-Mails<\/span><\/b><\/p>\n<p>Der dazu notwendige XAML-Code sieht gek&uuml;rzt so aus (es gibt noch einige Steuerelement-spezifische Eigenschaftsdefinitionen, die wir nicht abbilden):<\/p>\n<pre>&lt;Window x:Class=\"MainWindow\" ... Title=\"MainWindow\" Height=\"250\" Width=\"466\"&gt;\r\n     &lt;Grid HorizontalAlignment=\"Stretch\" Margin=\"10\" VerticalAlignment=\"Stretch\" ClipToBounds=\"true\" &gt;\r\n         &lt;Grid.RowDefinitions&gt;\r\n             &lt;RowDefinition Height=\"Auto\"\/&gt;\r\n             &lt;RowDefinition Height=\"Auto\"\/&gt;\r\n             &lt;RowDefinition\/&gt;\r\n             &lt;RowDefinition Height=\"Auto\"\/&gt;\r\n             &lt;RowDefinition Height=\"Auto\"\/&gt;\r\n         &lt;\/Grid.RowDefinitions&gt;\r\n         &lt;Grid.ColumnDefinitions&gt;\r\n             &lt;ColumnDefinition Width=\"Auto\"\/&gt;\r\n             &lt;ColumnDefinition Width=\"*\"\/&gt;\r\n         &lt;\/Grid.ColumnDefinitions&gt;\r\n         &lt;Label x:Name=\"label1\" Content=\"An:\" \/&gt;\r\n         &lt;Label x:Name=\"label2\" Content=\"Betreff:\" Grid.Row=\"1\"\/&gt;\r\n         &lt;Label x:Name=\"label3\" Content=\"Inhalt:\" Grid.Row=\"2\"\/&gt;\r\n         &lt;TextBox x:Name=\"txtAn\" Grid.Column=\"1\" HorizontalAlignment=\"Stretch\"\/&gt;\r\n         &lt;TextBox x:Name=\"txtBetreff\" Grid.Row=\"1\" Grid.Column=\"1\" HorizontalAlignment=\"Stretch\"\/&gt;\r\n         &lt;TextBox x:Name=\"txtInhalt\" Grid.Row=\"2\" TextWrapping=\"Wrap\" Grid.Column=\"1\" VerticalAlignment=\"Stretch\" \r\n             HorizontalAlignment=\"Stretch\" Height=\"Auto\" AcceptsReturn=\"True\"\/&gt;\r\n         &lt;StackPanel Orientation=\"Horizontal\" Grid.Row=\"3\"&gt;\r\n             &lt;Button x:Name=\"btnSenden\"&gt;Senden&lt;\/Button&gt;\r\n             &lt;Button x:Name=\"btnAnzeigen\"&gt;Anzeigen&lt;\/Button&gt;\r\n         &lt;\/StackPanel&gt;\r\n     &lt;\/Grid&gt;\r\n&lt;\/Window&gt;<\/pre>\n<p>Dadurch, dass wir f&uuml;r die dritte Zeile den Wert der Eigenschaften <b>Height <\/b>und <b>Width <\/b>auf <b>Auto <\/b>eingestellt haben, wird diese Zeile gemeinsam mit dem Fenster vergr&ouml;&szlig;ert. Damit wir im Textfeld <b>txtInhalt <\/b>mehrzeilige Texte eingeben k&ouml;nnen, haben wir die Eigenschaft <b>TextWrapping <\/b>auf <b>Wrap <\/b>und <b>AcceptsReturn <\/b>auf <b>True <\/b>eingestellt.<\/p>\n<h2>Verweis auf Outlook hinzuf&uuml;gen<\/h2>\n<p>Damit wir Outlook von einer WPF-Anwendung aus programmieren k&ouml;nnen, f&uuml;gen wir den entsprechenden Verweis auf die Outlook-Bibliothek <b>Microsoft.Office.Interop.Outlook <\/b>hinzu. Dazu &ouml;ffnen Sie den <b>Verweise-Manager <\/b>&uuml;ber den Men&uuml;eintrag <b>Projekt|Verweis hinzuf&uuml;gen&#8230; <\/b>und suchen im nun erscheinenden Dialog nach dem Wort <b>Outlook<\/b>.<\/p>\n<p>Selektieren Sie den Eintrag <b>Microsoft.Office.Outlook.Interop <\/b>(siehe Bild 2) und schlie&szlig;en Sie den Dialog mit <b>OK<\/b>. Sollten Sie, wie im obigen Dialog der Fall, mehrere gleichnamige Eintr&auml;ge vorfinden, handelt es sich um verschiedene Versionen. W&auml;hlen Sie dann die aktuellere Version aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_109_002.png\" alt=\"Erweitern der Verweise des Projekts um die Outlook-Bibliothek\" width=\"649,559\" height=\"324,7794\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Erweitern der Verweise des Projekts um die Outlook-Bibliothek<\/span><\/b><\/p>\n<p>Dann statten wir die Schaltfl&auml;che <b>cmdSenden<\/b> mit der Ereigniseigenschaft <b>Click <\/b>aus. Nach der Eingabe des Gleichheitszeichens k&ouml;nnen Sie mit der Tabulator-Taste automatisch die entsprechende Ereignismethode anlegen, indem Sie aus der dann erscheinenden Auswahlliste den Eintrag <b><Neuer Ereignishandler> <\/b>ausw&auml;hlen:<\/p>\n<pre>&lt;Button x:Name=\"btnSenden\" Click=\"btnSenden_Click\"&gt;Senden&lt;\/Button&gt;<\/pre>\n<p>In der Code behind-Klasse erscheint dann die folgende Methode:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>btnSenden_Click(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>RoutedEventArgs)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>In der Klasse f&uuml;gen wir nun zun&auml;chst eine <b>Imports<\/b>-Anweisung hinzu, mit der wir den Outlook-Namespace verf&uuml;gbar machen:<\/p>\n<pre>Imports Outlook = Microsoft.Office.Interop.Outlook<\/pre>\n<p>Damit greifen wir &uuml;ber das Schl&uuml;sselwort <b>Outlook <\/b>auf Elemente dieses Namespaces zu.<\/p>\n<h2>Textfelder mit Beispiel f&uuml;llen<\/h2>\n<p>Bevor wir uns auf die Outlook-Programmierung st&uuml;rzen, legen wir noch eine Ereignismethode f&uuml;r das Ereignis <b>Loaded <\/b>des <b>Window<\/b>-Elements an. Diese soll die drei Textfelder mit Beispieltexten f&uuml;llen, damit das Fenster beim &Ouml;ffnen gleich wie in Bild 3 aussieht:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_06\/pic_109_003.png\" alt=\"Beispielfenster zum Versenden von E-Mails\" width=\"424,7115\" height=\"253,6994\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Beispielfenster zum Versenden von E-Mails<\/span><\/b><\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Window_Loaded(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>RoutedEventArgs)\r\n     txtAn.Text = \"andre@minhorst.com\"\r\n     txtBetreff.Text = \"Testmail\"\r\n     txtInhalt.Text = \"Hallo Herr Minhorst,\" & <span style=\"color:blue;\">vbCrLf<\/span> _\r\n         & <span style=\"color:blue;\">vbCrLf<\/span> _\r\n         & \"dies ist eine Testmail.\" & <span style=\"color:blue;\">vbCrLf<\/span> _\r\n         & <span style=\"color:blue;\">vbCrLf<\/span> _\r\n         & \"Mit freundlichen Gr&uuml;&szlig;en\" & <span style=\"color:blue;\">vbCrLf<\/span> _\r\n         & \"Andr&eacute; Minhorst\"\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Outlook-Mail erzeugen<\/h2>\n<p>Danach k&uuml;mmern wir uns um den Code, der die Mail mit den angegebenen Daten versenden soll. Dazu f&uuml;llen wir die bereits angelegte Ereignismethode <b>btnSenden_Click <\/b>wie folgt:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>btnSenden_Click(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>RoutedEventArgs)\r\n     <span style=\"color:blue;\">Dim <\/span>objOutlook<span style=\"color:blue;\"> As <\/span>Outlook.Application\r\n     <span style=\"color:blue;\">Dim <\/span>objMailItem<span style=\"color:blue;\"> As <\/span>Outlook.MailItem\r\n     objOutlook = <span style=\"color:blue;\">New<\/span> Outlook.Application\r\n     objMailItem = objOutlook.CreateItem(Outlook.OlItemType.olMailItem)\r\n     <span style=\"color:blue;\">With<\/span> objMailItem\r\n         .To = txtAn.Text\r\n         .Subject = txtBetreff.Text\r\n         .Body = txtInhalt.Text\r\n         .Send()\r\n     End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000109\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000109?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000109\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"22c77db969\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wer Anwendungen mit Visual Studio programmiert, die Daten wie etwa die von Kunden verwaltet, kommt fr&uuml;her oder sp&auml;ter nicht um eine Funktion zum Versenden von E-Mails herum. Da gibt es nun zwei M&ouml;glichkeiten: Sie verwenden eine eigene SMTP-Klasse, um die E-Mails zu versenden. Das klappt mit .NET-Projekten viel einfacher als etwa unter Access, weil es hier schon fertige Klassen f&uuml;r diesen Anwendungszweck gibt. Allerdings werden die gesendeten Mails dann nicht in Outlook im Ordner &#8220;Gesendete Elemente&#8221; gespeichert. Deshalb schauen wir uns in diesem Artikel den Versand von Mails per Outlook an. In einem anderen Artikel gehen wir dann auf die Verwendung einer SMTP-Klasse ein.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662017,66062017,44000012,44000039],"tags":[],"yst_prominent_words":[],"class_list":["post-55000109","post","type-post","status-publish","format-standard","hentry","category-662017","category-66062017","category-Interaktiv","category-Setup_und_Weitergabe"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000109","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000109"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000109\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000109"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000109"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000109"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000109"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}