Das mailto-Protokol ist eine schöne Sache, wenn man das Standard E-Mail-Programm aufrufen will. Was viele nicht wissen ist, dass es viele verschiedene Parameter unterstützt. Diese Methode vereinfacht das Zusammenbauen einer gültigen URL.
Hinweis: Auf die Gültigkeit der E-Mail-Adressen wird nicht geprüft.
Hinweis: Die erzeugte URL kann einfach an Process.Start übergeben werden.
Hinweis: Zeilenumbrüche und Sonderzeichen werden im Betreff und im Body ersetzt. E-Mail Adressen werden unverändert in die URL eingetragen.
Benötigte Namespaces
System
System.Net
System.Text
/// <summary>
/// Erzeugt eine gültige URL mit dem mailto-Protokol aus den gegebenen Werten.
/// </summary>
/// <param name="receivers">Die E-Mail-Adressen der Empfänger. Mindestens eine muss angegeben werden.</param>
/// <param name="ccs">Die unter CC anzugebenden E-Mail-Adressen.<para/>Kann <c>null</c> sein.</param>
/// <param name="bccs">Die unter BCC anzugebenden E-Mail-Adressen.<para/>Kann <c>null</c> sein.</param>
/// <param name="subject">Der Betreff der E-Mail.<para/>Kann <c>null</c> sein.</param>
/// <param name="body">Der Inhalt der E-Mail.<para/>Kann <c>null</c> sein.</param>
/// <returns>Eine URL mit dem mailto-Protokol.</returns>
/// <exception cref="System.ArgumentNullException">Wird ausgelöst, wenn <paramref name="receivers"/> <c>null</c> ist.</exception>
/// <exception cref="System.ArgumentOutOfRangeException">Wird ausgelöst, wenn <paramref name="receivers"/> keine Elemente enthält.</exception>
/// <remarks>Nicht angegebene Parameter werden nicht zur URL hinzugefügt. In URLs nicht erlaubte Zeichen werden entsprechend kodiert.</remarks>
public static string GetMailTo(string[] receivers, string[] ccs, string[] bccs, string subject, string body)
{
// 1 Empfänger muss mindestens gegeben sein
if (receivers == null)
throw new ArgumentNullException("receivers");
if (receivers.Length == 0)
throw new ArgumentOutOfRangeException("receivers");
// mailto:empfänger erzeugen
StringBuilder sb = new StringBuilder();
sb.Append("mailto:");
sb.Append(string.Join(",%20", receivers));
bool quest = false;//true, sobald Parameter per ? angehängt wurden
//CCs anhängen
if (ccs != null && ccs.Length > 0)
{
quest = true;
sb.Append("?cc=");
sb.Append(string.Join(",%20", ccs));
}
//BCCs anhängen
if (bccs != null && bccs.Length > 0)
{
if (quest)
sb.Append("&bcc=");
else
{
sb.Append("?bcc=");
quest = true;
}
sb.Append(string.Join(",%20", bccs));
}
//Betreff anhängen
if (!string.IsNullOrEmpty(subject))
{
if (quest)
sb.Append("&subject=");
else
{
sb.Append("?subject=");
quest = true;
}
sb.Append(EncodeMailToString(subject));
}
//Body (Inhalt) anhängen
if (!string.IsNullOrEmpty(body))
{
if (quest)
sb.Append("&body=");
else
{
sb.Append("?body=");
quest = true;
}
sb.Append(EncodeMailToString(body));
}
return sb.ToString();
}
static private string EncodeMailToString(string s)
{
return WebUtility.UrlEncode(s).Replace("+", "%20");//+ versteht Outlook nicht :(
}
Kommentare zum Snippet