theunreal
Goto Top

Thunderbird 2-teilige Signatur?

Hallo zusammen,

ich habe mal eine Frage zum Thunderbird Client. Im letzten Meeting kam die Idee auf unsere Signatur in 2 Teile auzusplitten.
Aktuell habe ich für alle Kollegen komplett personalisierte, zentrale Signaturen. Ist man mal ehrlich, so ändert sich das ganze nicht so häufig, aber wenn ich mich da gar nicht mehr drum kümmern muss - das wäre natürlich super face-smile.

Von Haus aus kann ich bei Thunderbird ja nur Text oder HTML angeben, ich möchte aber beides.

Erster, oberer Teil sollte eine einfache Textsignatur eingesetzt werden, die jeder Mitarbeiter für sich frei im Client definieren kann. Im Sinne von :
Herbert Wichtig, Head of Spülbürstenbestand
Tel.: 0815-1234567

Der zweite,untere Baustein wäre dann eine zentrale Firmensignatur als HTML Datei eingebunden.

Wie kann Thunderbird eine Textsignatur UND HTML Signatur einbinden? Gibt es da auch was von about:config?
Danke im voraus face-smile
Gruß Sascha

Content-Key: 1257748992

Url: https://administrator.de/contentid/1257748992

Printed on: April 26, 2024 at 12:04 o'clock

Member: em-pie
Solution em-pie Sep 14, 2021 at 06:54:12 (UTC)
Goto Top
Moin,

wird nicht funktionieren. Entweder Nur-Text oder HTML.

Wäre so, als wenn du vorne nen Trabi haben möchtest, das Heck jedoch ein Sprinter sein soll...

Wo ist denn dein/ euer Problem, denn verstanden habe ich es noch nicht.
Zumal es auch besch.... aussieht:
Name, Position und TelefonNr ist Courier New, und die Firmendaten dann in Arial, TimesNewRoman, ComicSans oder Calibri ...

Gruß
em-pie
Member: colinardo
Solution colinardo Sep 14, 2021 updated at 07:44:41 (UTC)
Goto Top
Servus
Zitat von @TheUnreal:
Wie kann Thunderbird eine Textsignatur UND HTML Signatur einbinden? Gibt es da auch was von about:config?
Nein das geht damit nicht.
Du könntest dir bspw. ein Thunderbird Add-On schreiben das den Inhalt der Signatur des Users in den Inhalt der Firmensignatur einbaut z.B. über einen Platzhalter im Template, oder eben einmalig beim Login über ein externes Skript.

Grüße Uwe
Member: vossi31
Solution vossi31 Sep 14, 2021 at 07:36:05 (UTC)
Goto Top
Moin,

oder einfach außerhalb von Thunderbird mit der Programmiersprache deiner Wahl ein Script oder Programm erstellen, in das der User seine Daten eingibt und bei "Fertigstellen" werden die Daten in der HTML-Signaturdatei ergänzt.

Henning
Member: TheUnreal
TheUnreal Sep 14, 2021 at 08:09:45 (UTC)
Goto Top
@ em-pie
Es gibt kein Problem, steht aber so auch im Ursprungsbeitrag. Es geht nur um "nice2have", bzw. eine kleine Arbeitserleichterung.

@colinardo und vossi
Danke, die Ideen gefallen mir. Vermutlich wäre es dann eher ein PS-Script - ich weiß nicht mal in welcher Sprache die Thunderbird Addons geschrieben werden.

Gruß Sascha
Member: colinardo
Solution colinardo Sep 14, 2021, updated at Sep 15, 2021 at 09:23:34 (UTC)
Goto Top
Zitat von @TheUnreal:
@colinardo und vossi
Danke, die Ideen gefallen mir. Vermutlich wäre es dann eher ein PS-Script - ich weiß nicht mal in welcher Sprache die Thunderbird Addons geschrieben werden.
Die werden mit JavaScript geschrieben. In einem Addon sind das bspw. wenige Zeilen um an die Signatur zu kommen
// ...
let account = await browser.accounts.getDefault();
let signature = account.identities.signature;
// ...
Doku https://webextension-api.thunderbird.net/en/91/

Mit Powershell kommst du aber auch an die Signatur die in Thunderbird eingetragen ist...

Auf die schnelle mal zusammengetippelt :
function Get-ThunderbirdSignature {
    param(
        [parameter(mandatory=$true,ParameterSetName="A")][switch]$Default,  
        [parameter(mandatory=$true,ParameterSetName="B")][ValidateNotNullOrEmpty()][string]$email  
        
    )
    if (!(Test-Path "$env:APPDATA\Thunderbird\profiles.ini")){  
        throw "No thunderbird profiles found!"  
    }
    $tbprofile = "$env:APPDATA\Thunderbird\$([regex]::match((gc "$env:APPDATA\Thunderbird\profiles.ini" -raw),'(?im)^Default=(Profiles/[^\s]+)').Groups[1].Value)" -replace '/','\'  
    $prefs = gc "$tbprofile\prefs.js" -raw  

    switch($PSCmdlet.ParameterSetName){
        "A" {  
            $default_account = [regex]::match($prefs,'(?im)"mail.accountmanager.defaultaccount", "([^"]+)').Groups[1].Value  
            if (!$default_account){
                throw "No default account found in profile!"  
            }
            $account_id = [regex]::match($prefs,"(?im)`"mail.account.$default_account.identities`", `"([^`"]+)").Groups[1].Value  
            $account_signature = [regex]::match($prefs,"(?im)`"mail.identity.$account_id.htmlSigText`", `"([^`"]+)").Groups[1].Value  
            return $account_signature
        }

        "B" {  
            $matches = [regex]::matches($prefs,'(?i)"mail.identity.([^\.]+).useremail", "([^"]+)').Captures | ?{$_.Groups[2].Value -eq $email}   
            if ($matches.count -gt 0){
                $signature = [regex]::match($prefs,"(?im)`"mail.identity.$($matches.Groups[1].Value).htmlSigText`", `"([^`"]+)").Groups[1].Value  
                return $signature
            }else{
                throw "Identity not found"  
            }
        }
    }
}

Aufruf der Funktion dann mit zwei mögliche Varianten
# get signature from specific account
Get-ThunderbirdSignature -email 'user@domain.tld'  

# get signature of default account
Get-ThunderbirdSignature -Default

Und zum zurückschreiben eine weitere Funktion
function Set-ThunderbirdSignature {
    param(
        [parameter(mandatory=$true,ParameterSetName="DefaultAccount")][switch]$default,  
        [parameter(mandatory=$true,ParameterSetName="DefinedAccount")][ValidateNotNullOrEmpty()][string]$email,  
        [parameter(mandatory=$false)][string]$signature,
        [parameter(mandatory=$false)][switch]$ashtml
        
    )
    if (!(Test-Path "$env:APPDATA\Thunderbird\profiles.ini")){  
        throw "No thunderbird profiles found!"  
    }
    # determine default tb profile directory
    $tbprofile = "$env:APPDATA\Thunderbird\$([regex]::match((gc "$env:APPDATA\Thunderbird\profiles.ini" -raw),'(?im)^Default=(Profiles/[^\s]+)').Groups[1].Value)" -replace '/','\'  
    # read prefs
    $prefs = gc "$tbprofile\prefs.js" -raw  
    # replace newlines with \n
    $sig = $signature -replace [environment]::NewLine,'\n'  
    $account_id = $null
    switch($PSCmdlet.ParameterSetName){
        "DefaultAccount" {  
            $default_account = [regex]::match($prefs,'(?i)"mail.accountmanager.defaultaccount",\s*"([^"]+)').Groups[1].Value  
            if (!$default_account){
                throw "No default account found in profile!"  
            }
            $account_id = [regex]::match($prefs,"(?i)`"mail.account.$default_account.identities`",\s*`"([^`"]+)").Groups[1].Value  
        }

        "DefinedAccount" {  
            $account_id = [regex]::matches($prefs,'(?i)"mail.identity.([^\.]+).useremail",\s*"([^"]+)').Captures | ?{$_.Groups[2].Value -eq $email} | select -F 1 | %{$_.Groups[1].Value}  
        }
    }
    if ($account_id -ne $null){
        # set signature format
        if ($prefs -match "`"mail.identity.$account_id.htmlSigFormat`""){  
            $prefs = $prefs -replace "(?<=`"mail.identity.$account_id.htmlSigFormat`",)\s*([^\)]+)",($ashtml.IsPresent.ToString().ToLower())  
        }else{
            $prefs = $prefs -replace '\Z',("`r`n" + "user_pref(`"mail.identity.$account_id.htmlSigFormat`", $($ashtml.IsPresent.ToString().ToLower()));")  
        }
        # replace signature
        $prefs = $prefs -replace "(?<=`"mail.identity.$account_id.htmlSigText`",\s*`")([^`"]*)",$sig  
        # write back prefs
        $prefs | sc "$tbprofile\prefs.js"  
    }else{
        throw "Identity not found"  
    }
}
Benutzung wie oben mit zwei Varianten
# set signature from specific account
Set-ThunderbirdSignature -email 'user@domain.tld' -signature "Hallo das ist ein Test`r`nmit einem Zeilenumbruch"  

# set signature of default account
Set-ThunderbirdSignature -default -signature "Hallo das ist ein Test`r`nmit einem Zeilenumbruch"  

# get signature of default account as html
Set-ThunderbirdSignature -default -signature "<strong>Hallo das ist ein Test</strong>" -ashtml