2017-07-19 5 views
1

Ich versuche, eine E-Mail über Outlook zu senden. Ich benutze diesen Code, der funktioniert.C# Outlook Mail mit Anführungszeichen

var url = "mailto:[email protected]?subject=Foobar [ID_01] P1&body=somerandomtext"; 
Process.Start(url); 

Als ich mit „somerandomtext“ ersetzen, lassen Sie uns TextBox1.Text sagen und es gibt doppelte Anführungszeichen (") innerhalb TextBox1, Outlook antwortet mit:.

Das Argument Befehlszeile ist ungültig Überprüfen Sie den Befehl Sie verwenden.

ich nur TextBox1.Text.Replace("\"", "'") tun konnte, aber es hat einen Weg, um zu senden/autofill doppelte Anführungszeichen.

+0

Danke, es funktioniert jetzt. –

Antwort

0

Der ursprüngliche Vorschlag 01.239.235 zu verwenden war

link

URL-Kodierung ersetzt Zeichen, die hexadezimalen Escape-Sequenzen, die aus in einer URL mit Äquivalente zeichen Entität nicht erlaubt.

Dies würde für doppelte Anführungszeichen gut funktionieren, aber wenn Leerzeichen im Text, die auf „+“

Für zB umgewandelt werden würde, wenn die Zeichenfolge:

this is for "testing" 

Mit UrlEncode, wäre es zu umgewandelt werden:

this+is+for+%22testing%22 

enter image description here

Das obige sieht nicht gut aus.

Eine bessere Lösung ist also, Doppelzitat manuell durch% 22 zu ersetzen.

var changedText = body.Replace("\"", "%22"); 

Dies würde die Ausgabe als geben:

enter image description here

Die vollständige Liste der Ersatzzeichenfolgen für die "mailto" Handler für Outlook ist verfügbar here:

Die folgenden Variablen werden verwendet, um häufig verwendete Zeichen darzustellen:

Fläche()% 20

Komma (,)% 2C

Fragezeichen (?)% 3F

Punkt (.)% 2E

Ausrufezeichen (!)% 21

Colon (:)% 3A

Semikolon (;)% 3B

Die MSDN-Seite für mailto handler hat diese zusätzlichen Details:

Windows Internet Explorer 7 und später. Sie müssen alle URL-reservierten Zeichen in einer mailto: -Adresse in Prozent codieren. Beispielsweise wird das Nummernzeichen (#) als Fragmentkennung in URLs verwendet. Bei der Verarbeitung einer Adresse wie zum Beispiel some #[email protected] kopiert Internet Explorer nur den Teil bis zum Nummernzeichen in den Mail-Client. der Fragmentteil einschließlich des Nummernzeichens wird ignoriert. Dieses Verhalten ist von Entwurf.

Weitere Informationen zum mailto-Protokoll finden Sie unter RFC2368: Das mailto-URL-Schema.

Nach einigen weiteren Tests und googeln um, so scheint es, dass es eine einfachere solution ist - Uri.EscapeDataString

Diese handles alle notwendigen Konvertierungen verwenden.