Feedback

C# - mailto-Protokol URL erzeugen

Veröffentlicht von am 19.06.2014
(0 Bewertungen)
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 :(
}
Abgelegt unter E-Mail, mailto, URL, Encoding, Protokol.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!