Laden...

Mail mit vordefinierten Werten und Anhang per MailTo-Cmd erstellen

Erstellt von timiboy vor 8 Jahren Letzter Beitrag vor 8 Jahren 8.778 Views
T
timiboy Themenstarter:in
16 Beiträge seit 2015
vor 8 Jahren
Mail mit vordefinierten Werten und Anhang per MailTo-Cmd erstellen

Hallo miteinander,
Ich suche schon den ganzen Tag nach einer guten Lösung für mein Problem.

Ich will auf bsp einen Button klicken können und das Mailprogramm (Outlook) geht auf und beinhaltet schon ein paar Grunddaten wie Absender, Empfänger Titel und einen Anhang.

Bis auf den Anhang konnte ich alles mit "mailto" lösen..

public void SendMailAttach(string emailAddress, string betreff, string text, string pfad)
        {
            Process.Start("mailto:" + emailAddress + "?subject=" + betreff + "&body="
               + text + "&Attach=" + pfad);
        }
SendMailAttach("test@test.com", "TestBetreff",
                    "Hallo"
                    + "%0d%0A" + "Dies ist ein Test Mail"
                    + "%0d%0A"
                    + "%0d%0A" + "Freundliche Grüsse"
                    + "%0d%0A" + "Max Muster",
                    @"C:\Temp\test.txt");

Hat jemand eine Lösung für dieses Problem?
Danke und Gruss Tim

16.806 Beiträge seit 2008
vor 8 Jahren

Du kannst nur das übergeben, was das Mailto-Protokoll auch bereitstellt.
Und das ist Empfänger (auch CC und BCC), Titel und Body - mehr nicht.

Mir persönlich ist aber kein anderes Protokoll bekannt, das Deine Anforderungen deckt.

T
timiboy Themenstarter:in
16 Beiträge seit 2015
vor 8 Jahren

Genau das ist mein Problem, aber ich finde keinen passenden Ersatz welche funktioniert
Was würden Sie mir vorschlagen?

Gruss Tim

2.207 Beiträge seit 2011
vor 8 Jahren
T
timiboy Themenstarter:in
16 Beiträge seit 2015
vor 8 Jahren

Nicht ganz, bei diesen Beispielen wird das Mail direkt versendet.
Ich möchte dem User aber noch die Möglichkeit geben die Nachricht zu bearbeiten.

Gruss Tim

16.806 Beiträge seit 2008
vor 8 Jahren

Dann pass doch einfach den Code an?! 🤔
Die Basis wird ja gezeigt.

Muss Dir halt bewusst sein, dass das ein Addin sein wird und Du das auf jedem PC in jedem Outlook installieren musst. =)

T
timiboy Themenstarter:in
16 Beiträge seit 2015
vor 8 Jahren

Hm, es sollte bzw, kann nicht auf Clients installiert werden.

Gibt es keine Möglichkeit das zu umgehen oder zu vereinfachen?

1.040 Beiträge seit 2007
vor 8 Jahren

Du könntest alternativ ein eigenes Fenster anzeigen und dann die Mail mit den Bordmitteln von C# verschicken.

16.806 Beiträge seit 2008
vor 8 Jahren

Wie gesagt; mir ist kein Protokoll bekannt, das Deine Anforderungen deckt - und ich bezweifle, dass es das gibt (ist schließlich (theoretisch) ein Sicherheitsrisiko).
Ergo wirst Du um ein Addin, das installiert werden soll, sehr sehr wahrscheinlich bei diesem gewünschten Vorhaben nicht drum herum kommen.

Selbst wenn Du ein eigenes Programm entwickelst, das diese Aufgabe für Outlook übernimmt, muss dieses installiert oder zumindest lokal ausgeführt werden.

T
timiboy Themenstarter:in
16 Beiträge seit 2015
vor 8 Jahren

Ja das hab ich mir auch schon überlegt, wäre auf jeden Fall meine Notfall Lösung, falls ich es nicht herausfinde 😃

3.825 Beiträge seit 2006
vor 8 Jahren

Hallo Tim,

Du kannst entweder einen eigenen Client schreiben der einen Anhang erlaubt,

oder Du kannst mit dem MAPI Protokoll wie folgt ein Email mit Dateianhang in Outlook erzeugen :

clsMAPI mapi = new clsMAPI();
mapi.AddRecipientTo(EmpfaengerEmail);
mapi.AddAttachment(Dateianhang);
mapi.AddAttachment(Dateianhang2);
mapi.SendMailPopup(subject, body);

Quelle : http://www.codeproject.com/Articles/17561/Programmatically-adding-attachments-to-emails-in-C

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

T
timiboy Themenstarter:in
16 Beiträge seit 2015
vor 8 Jahren

Danke, werde ich gleich mal ausprobieren! 😃

T
timiboy Themenstarter:in
16 Beiträge seit 2015
vor 8 Jahren

Funktioniert alles bestens!
Danke 😄

Gruss und schönes Wochenende
Tim

T
64 Beiträge seit 2010
vor 8 Jahren

Ich mach das mit Office Interop...Gibt doch auch .Net Office


using System;
using System.IO;

#region Using Directives
using System;
using CommandLine;
using CommandLine.Text;
#endregion

namespace app_SendMailAttach
{
    class Program
    {
        static void Main(string[] args)
        {
            var options = new Options();
            if (!CommandLine.Parser.Default.ParseArguments(args, options))
            {
                Environment.Exit(CommandLine.Parser.DefaultExitCodeFail);
            }


            Microsoft.Office.Interop.Outlook.NameSpace lo_NSpace;
            Microsoft.Office.Interop.Outlook.MAPIFolder lo_Folder;
            Microsoft.Office.Interop.Outlook.Application lo_OutApp;
            Microsoft.Office.Interop.Outlook.MailItem lo_Item;

            lo_OutApp = new Microsoft.Office.Interop.Outlook.Application();

            lo_NSpace = lo_OutApp.GetNamespace("MAPI");

            lo_Folder = lo_NSpace.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderSentMail);

            lo_Item = (Microsoft.Office.Interop.Outlook.MailItem)lo_Folder.Items.Add(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);

            if (options.files != null)
            {
                for (int i = 0; i < options.files.Length; i++)
                {
                    if (!File.Exists(options.files[i])) continue;
                    lo_Item.Attachments.Add(options.files[i]);
                }
            }

            lo_Item.Subject = options.subject;
            lo_Item.To = options.recipient;
            if (!string.IsNullOrEmpty(options.text))
            {
                lo_Item.BodyFormat = Microsoft.Office.Interop.Outlook.OlBodyFormat.olFormatHTML;
                lo_Item.HTMLBody = options.text;
            }
            else
            {
                lo_Item.BodyFormat = Microsoft.Office.Interop.Outlook.OlBodyFormat.olFormatRichText;
            }
            //Wenn man cc oder bcc verschicken will
            //lo_Item.CC = EmailCC;
            //lo_Item.BCC = EmailBCC;
            //wenn man möchte kann man noch Flaggen und Fälligkeit definieren
            //lo_Item.FlagStatus = Microsoft.Office.Interop.Outlook.OlFlagStatus.olFlagMarked;
            //lo_Item.FlagIcon = Microsoft.Office.Interop.Outlook.OlFlagIcon.olRedFlagIcon;
            //lo_Item.FlagDueBy = DateTime.Now.AddDays(7);


            //lo_Item.Body = MailBody;
            //NachrichtenFormat

            //Anzeigen modal
            lo_Item.Display();

            //Senden der Mail
            //lo_Item.Send();

        }
    }
}