Migration von OTRS 2.4.7 von OpenSUSE 11 auf Windows 2012 R2

Hilfe zu OTRS Problemen aller Art
Post Reply
ndo
Znuny newbie
Posts: 18
Joined: 20 Feb 2017, 08:48
Znuny Version: 2.4.7, 5.0.16

Migration von OTRS 2.4.7 von OpenSUSE 11 auf Windows 2012 R2

Post by ndo »

Hallo,

wir haben seit geraumer Zeit das Problem, dass uns der MySQL-Dienst auf OpenSUSE 11 abraucht. Die ganze Maschine lässt sich nicht mehr bedienen, sobald der MySQL irgendwie angesprochen wird. Sei es der Versuch den Dienst zu beenden oder gar die Maschine herunterzufahren. Das läuft quasi ins Leere. Das einzige, was hilft, ist ein Reset der VM auf VMWare.

Meine Überlegung war, das ganze System auf ein frisch installiertes Linux zu migrieren, bis mir mein IT-Manager einen Strich durch die Rechnung gemacht hat: Da bei uns nicht viele Linux-affine Leute arbeiten, wurde mir nun aufgrdrückt das Ganze auf Windows Server 2012 R2 zu migrieren.

Ich weiß, dass die Version 2.4.7 sehr alt ist. Das Problem ist, dass wir das System sehr stark abgeändert haben, damit es unseren Bedürfnissen entspricht. Deshalb kommt eine Aktualisierung nicht in Frage. Hinzu kommt nämlich auch, dass das Ticketsystem demnächst abgelöst werden soll. Aber bis dahin soll OTRS auf Windows aufgesetzt werden, weil uns das inzwischen wirklich 10x täglich abschmiert.

Nun denn. Ich habe Tage damit zugebracht genau das zu versuchen. Immerhin: Zur Login-Seite kommt man schon einmal. Aber ab dann geht's nicht weiter. Die Seite lädt ins Leere. Aber Schritt für Schritt:

System:
  • Windows Server 2012 R2 Standard
  • IIS 8.5
  • Strawberry Perl 64 bit
  • MySQL 5.7
Verhalten:
  • MySQL-Anbindung funktioniert grundsätzlich. Ein Test-Perl-Skript, welches mir alle Benutzer in der OTRS-Datenbank ausgibt, funktioniert ohne Probleme und ohne Verzögerungen.
  • Sobald ich OTRS aufrufe, und versuche mich einzuloggen, mit gültigen - aber auch mit ungültigen Zugangsinformationen, kommt vom IIS nur ein Bad Gateway zurück, mit dem Hinweis, dass keine HTTP-Haeder vom CGI-Modul zurückgegeben worden wären.
  • Versuche ich ein Login per Konsole (wie hier beschrieben), funktioniert es wiederum.
Getestet wurde das Ganze in folgenden Konstellationen auf demselben OS:
  • IIS 8.5 + Strawberry Perl 64 bit
  • IIS 8.5 + Strawberry Perl 32 bit
  • IIS 8.5 + ActivePerl
  • Apache 2.2 + Strawberry Perl 32 bit
Den MYSQL-Dienst habe ich soweit angepasst, dass max_allowed_packet auf 20 MB steht und innodb_log_file_size auf 256 MB, wie z. B. hier empfohlen.

Ich habe außerdem den originalen Installer für OTRS 2.4.7 heruntergeladen und ausprobiert. Ein nacktes System funktioniert. Aber darauf kann ich die Datenbank nicht migrieren, denn wir haben auch diese leicht abgeändert. Verwende ich die migrierte DB statt der frisch installierten, kommt es zu sehr eigenartigem Verhalten. Tickets haben keinen Inhalt, etc.

Was ich noch nicht probiert habe, ist die Installation, darauf dann unsere OTRS-Dateien kopieren und dann unsere migrierte DB nutzen. Aber ich sehe da irgendwie dasselbe Ergebnis auf mich zukommen.

Hat jemand noch Ideen, was ich noch probieren könnte, um meinen Manager glücklich zu machen?

Vielen Dank und Grüße
ndo
Znuny newbie
Posts: 18
Joined: 20 Feb 2017, 08:48
Znuny Version: 2.4.7, 5.0.16

Re: Migration von OTRS 2.4.7 von OpenSUSE 11 auf Windows 2012 R2

Post by ndo »

Ich habe jetzt folgendes gemacht:
  • IIS 8.5 heruntergefahren
  • MySQL 5.7 heruntergefahren
  • OTRS 2.4.7 Windows-Installer ausgeführt
  • OTRS eingerichtet, mit gleichem DB-Namen usw. auf mitgeliefertem MySQL
  • Mitgelieferten MySQL ausgeschaltet
  • MySQL 5.7 hochgefahren
  • OTRS-Dateien durch unsere Dateien ersetzt (einschl. Config usw.)
Und hier ist das Ergebnis:
otrs_247_mig_apache22_strawberryperl.jpg
Jemand eine Idee?
You do not have the required permissions to view the files attached to this post.
wurzel
Znuny guru
Posts: 3232
Joined: 08 Jul 2010, 22:25
Znuny Version: x.x.x
Real Name: Florian

Re: Migration von OTRS 2.4.7 von OpenSUSE 11 auf Windows 2012 R2

Post by wurzel »

Hi,

sei mir ned böse aber...


pack Dir das auf ein aktuelles Linux und migriere auf die Version5. Wenn Du nicht migrieren kannst wird's eh schwer.
Das alte 2.4.x auf LInux/Windows zum laufen zu bekommen... Ohne viel Know How egal ob Windows oder Linux
wird's schwer. Würde ich mir nicht zutrauen.

Hol' Dir Hilfe oder ein gemanagtes System. Migrieren kann man normalerweise immer irgendwie ;)

viele Grüße
Flo
Last edited by wurzel on 21 Feb 2017, 08:46, edited 1 time in total.
OTRS 8 SILVER (Prod)
OTRS 8 auf Debian 11 (Test)
Znuny 7.x latest version testing auf Debian 11

-- Ich beantworte keine Forums-Fragen PN - No PN please

I won't answer to unfriendly users any more. A greeting and regards are just polite.
ndo
Znuny newbie
Posts: 18
Joined: 20 Feb 2017, 08:48
Znuny Version: 2.4.7, 5.0.16

Re: Migration von OTRS 2.4.7 von OpenSUSE 11 auf Windows 2012 R2

Post by ndo »

Hi wurzel,

ich gebe dir natürlich vollkommen recht. Leider sind alle Punkte, die wir unserem Manager vorgetragen haben, gegen eine Wand geprallt. Es wird betont, dass das bitte auf Windows Server 2012 R2 gebracht werden soll.

Bevor wir ihm sagen, dass das schier unmöglich ist, wollen wir wenigstens alle Optionen ausprobiert haben, um fundierte Argumente liefern zu können. Deshalb habe ich mich mit diesem Thema an diese Community gewandt.

Hat irgendjemand noch einen Ansatz, wo ich suchen könnte, um das verbleibende Problem zu lösen? Hat jemand schon einmal solch ein Bild gehabt, wie im Screenshot zu sehen, und hat Lösungsansätze?

Vielen Dank und Grüße
wurzel
Znuny guru
Posts: 3232
Joined: 08 Jul 2010, 22:25
Znuny Version: x.x.x
Real Name: Florian

Re: Migration von OTRS 2.4.7 von OpenSUSE 11 auf Windows 2012 R2

Post by wurzel »

Hi,

Ich empfehle Dir, hol Dir jemanden vom Hersteller ($DienstleisterDeinerWahl) der das System
prüft und ein fundiertes Ergebnis Deinem Management vorstellt.

Spart Dir viel Ärger. ;-)

Viele Grüße
Flo
OTRS 8 SILVER (Prod)
OTRS 8 auf Debian 11 (Test)
Znuny 7.x latest version testing auf Debian 11

-- Ich beantworte keine Forums-Fragen PN - No PN please

I won't answer to unfriendly users any more. A greeting and regards are just polite.
wurzel
Znuny guru
Posts: 3232
Joined: 08 Jul 2010, 22:25
Znuny Version: x.x.x
Real Name: Florian

Re: Migration von OTRS 2.4.7 von OpenSUSE 11 auf Windows 2012 R2

Post by wurzel »

Hi,

RebuildConfig und Caches löschen hast alles gemacht oder?

Flo
OTRS 8 SILVER (Prod)
OTRS 8 auf Debian 11 (Test)
Znuny 7.x latest version testing auf Debian 11

-- Ich beantworte keine Forums-Fragen PN - No PN please

I won't answer to unfriendly users any more. A greeting and regards are just polite.
ndo
Znuny newbie
Posts: 18
Joined: 20 Feb 2017, 08:48
Znuny Version: 2.4.7, 5.0.16

Re: Migration von OTRS 2.4.7 von OpenSUSE 11 auf Windows 2012 R2

Post by ndo »

Hallo Flo,

ich habe ausgeführt:
  • otrs.CacheDelete.pl
  • otrs.RebuildConfig.pl
  • otrs.RebuildFulltextIndex.pl
  • RebiuildTicketIndex.pl
  • ChecDB.pl
Alles ohne Erfolg. Allerdings habe ich testweise ein neues Ticket (Phone Ticket) erstellt und folgendes festgestellt:
  • Eine automatisch generierte E-Mail beinhaltet den korrekten Inhalt.
  • Rufe ich das Ticket auf, stimmen Absender, Subject, aber der Body kommt von einem ganz anderen Ticket.
Ich vermute, dass beim DB-Import etwas grundlegendes schiefgelaufen ist. Die Zuordnung von Ticketnummer und Inhalt scheint nicht stimmig zu sein. Das erklärt dann auch die leere Tabelle im Screenshot.

Die Frage ist nur: Wie kann ich dafür sorgen, dass die Zuordnung bestehen bleibt, beim DB-Export?

[Edit] Hier einmal ein aktueller Screenshot, nachdem ich das Test-Ticket erstellt habe:
inbox.jpg
Vielen Dank und Grüße
You do not have the required permissions to view the files attached to this post.
ndo
Znuny newbie
Posts: 18
Joined: 20 Feb 2017, 08:48
Znuny Version: 2.4.7, 5.0.16

Re: Migration von OTRS 2.4.7 von OpenSUSE 11 auf Windows 2012 R2

Post by ndo »

Hallo allerseits,

offensichtlich war der Export von der Tabelle article unvollständig:
article_unvollstaendig.png
Damit sehe ich dieses Thema als erledigt an. Es liegt am unvollständigen DB-Export.

Vielen Dank und Grüße
You do not have the required permissions to view the files attached to this post.
ndo
Znuny newbie
Posts: 18
Joined: 20 Feb 2017, 08:48
Znuny Version: 2.4.7, 5.0.16

Re: Migration von OTRS 2.4.7 von OpenSUSE 11 auf Windows 2012 R2

Post by ndo »

Damit andere nicht darüber stolpern, hier die Vorgehensweise Schritt für Schritt, wie ein solches OTRS-System von Linux auf Windows migriert werden kann:
  • Windows Server 2012 R2 Standard (ist ausreichend) installieren
  • StrawberryPerl 64 Bit installieren (In C:\Perl)
  • OTRS 2.4.7 Windows-Installer ausführen (Installationsverzeichnis C:\OTRS)
  • OTRS-Einrichtung ausführen (Web-Installer), am besten mit denselben DB-Settings, wie im alten System
  • Alle Module durch die migrierten ersetzen (ausgenommen die Scripte):
    • Also alles aus /opt/otrs/* ausgenommen /opt/otrs/scripts
    • Nach C:\OTRS\OTRS
  • Die erste Zeile aller *.pl-Dateien unter C:\OTRS\OTRS von #!/bin/perl auf #!C:/Perl/perl/bin/perl.exe -X abändern (z. B. mit Notepad++)
  • Verzeichnisangaben in allen Configs abändern (/opt/otrs durch C:/OTRS/OTRS ersetzen)
  • In der Datei C:\OTRS\OTRS\Kernel\cpan-lib\URI\Escape.pm die Zeile

    Code: Select all

    return join '', @URI::Escape::escapes{$_[0] =~ /(\C)/g};
    durch das hier ersetzen:

    Code: Select all

    return join '', @URI::Escape::escapes{$_[0] =~ /(^\c^\d^\s^\w)/g};
    Sonst erhaltet ihr im Dashboard folgendes Bild:
    dashboard.png
  • Damit das installierte CRONw ordnungsgemäß funktioniert, müssen in der Datei C:\OTRS\CRONw\crontab.txt die Verzeichnisangaben zum Perl-Modul abgeändert werden.
    Also von C:/OTRS/StrawberryPerl/perl/bin/perl.exe zu C:/Perl/perl/bin/perl.exe.
  • DB leeren
  • Alte DB (Dump) einspielen
Ich hoffe, das hilft dem nächsten mit einem ähnlichen Problem.

Viele Grüße
You do not have the required permissions to view the files attached to this post.
Last edited by ndo on 22 Feb 2017, 10:36, edited 1 time in total.
jojo
Znuny guru
Posts: 15019
Joined: 26 Jan 2007, 14:50
Znuny Version: Git Master
Contact:

Re: Migration von OTRS 2.4.7 von OpenSUSE 11 auf Windows 2012 R2

Post by jojo »

ich hoffe mal das kein Mensch wirklich auf die Idee kommt eine 2.4.x (letztes Patchlevel ist übrigens die 2.4.15) in irgendeiner Form weder auf Windows noch auf Linux produktiv zu betreiben.

Das System bekommt seit Jahren keine Sicherheitsupdates mehr von uns. Ein Manager der ein solches Risiko eingeht sollte sich wirklich fragen ob er an der richtigen Stelle sitzt. Vergleichbar ist das ganze mit einer frischen Installation von Windows 95...
"Production": OTRS™ 8, OTRS™ 7, STORM powered by OTRS
"Testing": ((OTRS Community Edition)) and git Master

Never change Defaults.pm! :: Blog
Professional Services:: http://www.otrs.com :: enjoy@otrs.com
ndo
Znuny newbie
Posts: 18
Joined: 20 Feb 2017, 08:48
Znuny Version: 2.4.7, 5.0.16

Re: Migration von OTRS 2.4.7 von OpenSUSE 11 auf Windows 2012 R2

Post by ndo »

Grundsätzlich gebe ich dir vollkommen recht. Allerdings hat das - wie erwähnt - damit zu tun, dass wir das System extrem angepasst haben, sodass ein Update ohnehin fehlschlagen würde. Das hätte zur Folge, dass wir die Anpassungen neu bauen müssten, was in keinem Verhältnis steht, wenn man bedenkt, dass OTRS bei uns ohnehin abgeschafft werden soll.

Was die Sicherheit angeht habe ich keine Bedenken, da das System von außen nicht erreichbar ist. Das ist nur IT intern erreichbar.

Die Anleitung habe ich für den Fall der Fälle geschrieben. Möglicherweise ist die Vorgehensweise auch bei späteren Versionen genauso möglich, sofern es einen Windows-Installer gibt.
jojo
Znuny guru
Posts: 15019
Joined: 26 Jan 2007, 14:50
Znuny Version: Git Master
Contact:

Re: Migration von OTRS 2.4.7 von OpenSUSE 11 auf Windows 2012 R2

Post by jojo »

ndo wrote:Was die Sicherheit angeht habe ich keine Bedenken, da das System von außen nicht erreichbar ist. Das ist nur IT intern erreichbar.
Da ist der größte Denkfehler bzgl der Sicherheit...
"Production": OTRS™ 8, OTRS™ 7, STORM powered by OTRS
"Testing": ((OTRS Community Edition)) and git Master

Never change Defaults.pm! :: Blog
Professional Services:: http://www.otrs.com :: enjoy@otrs.com
ndo
Znuny newbie
Posts: 18
Joined: 20 Feb 2017, 08:48
Znuny Version: 2.4.7, 5.0.16

Re: Migration von OTRS 2.4.7 von OpenSUSE 11 auf Windows 2012 R2

Post by ndo »

Zugegeben habe ich bei der Aussage gar nicht berücksichtigt, dass OTRS ja E-Mails empfängt. Diese könnten natürlich Schadcode beinhalten. Der Punkt geht an dich.

Allerdings, wie gesagt, ist es so, dass wir das System so stark angepasst haben, dass ein Update fehlschlagen würde. Und ein Neuaufsetzen und neu Einpflegen der Anpassungen in der neuesten Version wäre viel zu aufwendig, da wir OTRS ablösen wollen. ;)
ndo
Znuny newbie
Posts: 18
Joined: 20 Feb 2017, 08:48
Znuny Version: 2.4.7, 5.0.16

Re: Migration von OTRS 2.4.7 von OpenSUSE 11 auf Windows 2012 R2

Post by ndo »

Hi,

nach langer Zeit melde ich mich noch einmal, um der Vollständigkeithalber eine Lösung für ein sehr spezifisches Problem zu bieten, was man aber gut für andere Szenarien verwenden kann.

Problemstellung: Ankommende E-Mails mit Unicode werden von OTRS nicht aufgenommen, weil die MySQL-Datenbank bzw. die Tabellen nur auf utf8 kodiert sind, nicht aber auf utf8mb4. Unicode verlangt jedoch utf8mb4.

Nun könnte man sagen: Kodiert die Tabellen doch einfach um! Das ist bei einer sehr großen Tabelle allerdings ziemlich zeitaufwendig, weshalb das bei uns abgebrochen wurde. Also habe ich mich ran gesetzt und ein PowerShell-Skript entworfen, das solche E-Mails, die im spool-Ordner von OTRS landen, aufgreift, sie als Plain text erneut an die Support-Email-Adresse sendet, und etwaige HTML- und andere Plain-Text-Inhalte als Zip-Datei mitliefert.

Hier nun das Skript:

Code: Select all

### HERE ARE THE MOST IMPORTANT VARIABLES: ###

$global:d="C:\OTRS\OTRS\var\spool"
$od="C:\OTRS\OTRS\var\old_spool" #This folder must exist!
$global:debug=$true
$msg_to="support@example.com"
$msg_srv="mailserver.domain.local" #OpenRelay must be enabled, oder you have to adjust this script.

### END OF VARIABLES ###

# Function to write log
function log($txt,$level="INFO") {
    if($level -ne "DEBUG" -or $debug) {
        Add-Content "C:\Temp\otrs_problem_mails.log" "$(Get-Date -Format "yyyyMMdd-HHmmss")`t$level`t$txt"
    }
}

# Function to create zip file
function Add-Zip
{
    #Usage: dir c:\demo\files\*.* -Recurse | Add-Zip c:\demo\myzip.zip
    param([string]$zipfilename)

    if(-not (test-path($zipfilename)))
    {
        set-content $zipfilename ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
        (dir $zipfilename).IsReadOnly = $false  
    }

    $shellApplication = new-object -com shell.application
    $zipPackage = $shellApplication.NameSpace($zipfilename)

    foreach($file in $input) 
    { 
            $zipPackage.CopyHere($file.FullName)
            Start-sleep -milliseconds 500
    }
}

# Function to write collected data from attachment sections to file - NEEDS GLOBAL VARS!
function SaveAttachment() {
    log "Attachment: $global:att_filename"
    if($global:is_txt) {
        log "Textfile" "DEBUG"
        if($global:is_base64) {
            log "Base64" "DEBUG"
            $global:plain_content=[string]([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($global:base64_content -join "")))
        }
        elseif($global:is_quoted) {
            log "Quoted-Printable" "DEBUG"
            $global:plain_content=($global:plain_content -Join "`r`n").Replace("=`r`n","")
            $global:plain_content=[Regex]::Replace($global:plain_content,"=([0-9a-fA-F]{2})",{ param($Match) "$([char]([System.Convert]::ToInt32($Match.Groups[1].Value,16)))" })
        }
        if((Test-Path "$global:d\att_$global:filename") -ne $true) {
            log "Creating directory $global:d\att_$global:filename" "DEBUG"
            mkdir "$global:d\att_$global:filename" >$null 2>$null
        }
        if($global:att_filename -eq "") {
            $global:unknown_cnt++
            $global:att_filename="UNKNOWN_${global:unknown_cnt}.txt"
            log "No filename for attachment yet. Setting '$global:att_filename'"
        }
        log "Writing file." "DEBUG"
        Set-Content "$global:d\att_$global:filename\$global:att_filename" $global:plain_content
    }
    elseif($global:is_base64) {
        log "Binary file" "DEBUG"
        if((Test-Path "$global:d\att_$global:filename") -ne $true) {
            log "Creating directory $global:d\att_$global:filename" "DEBUG"
            mkdir "$global:d\att_$global:filename" >$null 2>$null
        }
        if($global:att_filename -eq "") {
            $global:unknown_cnt++
            $global:att_filename="UNKNOWN_${global:unknown_cnt}.file"
            log "No filename for attachment yet. Setting '$global:att_filename'"
        }
        log "Writing file." "DEBUG"
        try {
            [io.file]::WriteAllBytes("$global:d\att_$global:filename\$global:att_filename",[Convert]::FromBase64String($global:base64_content))
        }
        catch {
            log "Base64 could not be decoded: $global:att_filename" "ERROR"
        }
    }
    $global:base64_content=@()
    $global:plain_content=@()
    $global:is_txt=$false
    $global:is_base64=$false
    $global:is_content=$false
    $global:att_filename=""
}

### ATTENTION! HERE BEGINS THE MAIN SECTION. ###
# Live parsing files as email stream:
Get-ChildItem $global:d -Attributes !Directory | ForEach-Object {
    $global:filename=$_.Name
    log "Spool file: $global:filename"
    $global:is_txt=$false
    $global:is_base64=$false
    $global:is_quoted=$false
    $is_header=$false
    $is_content=$false
    $is_from=$false
    $txt_cnt=0
    $global:unknown_cnt=0
    $global:base64_content=@()
    $global:plain_content=@()
    $msg_sub="PROBLEM-EMAIL '$global:filename'"
    $msg_from=$msg_to
    $msg_sent=Get-Date -Format "yyyy-MM-dd HH:mm"
    $msg_attachments=@()
    $boundary=@()
    $boundary_cursor=-1
    Get-Content $_.FullName | ForEach {
        if($_ -like "*boundary=*") {
            $boundary+=$_.Split("=")[1].Replace("`"","").Replace(";","")
            $boundary_cursor++
            log "Boundary found: $($boundary[$boundary_cursor])" "DEBUG"
            log "Boundary cursor set to $boundary_cursor" "DEBUG"
            log "Switching to global mode" "DEBUG"
            $is_header=$false
            $is_content=$false
            $global:base64_content=@()
            $plain_content=@()
            $global:is_txt=$false
            $global:is_base64=$false
            $global:is_quoted=$false
            $is_boundary=$true
            $global:att_filename=""
        }
        elseif($boundary_cursor -ge 0 -and $_ -like "--$($boundary[$boundary_cursor])*") {
            if($_ -like "--$($boundary[$boundary_cursor])--") {
                log "Found ending for boundary $($boundary[$boundary_cursor])" "DEBUG"
                $boundary=$boundary[0..($boundary.Length-2)]
                $boundary_cursor--
            }
            else {
                log "Found attachment for boundary $($boundary[$boundary_cursor])" "DEBUG"
                log "Switching to header mode" "DEBUG"
                $is_header=$true
            }
        }
        elseif(-not $is_header -and -not $is_content) {
            if($is_from) {
                if($_ -like "`t*") {
                    $msg_from="$msg_from $( $_.Trim() )"
                }
                else {
                    $is_from=$false
                    log "Sender appears to be '$msg_from'" "DEBUG"
                }
            }
            switch -wildcard ($_) {
                "Subject: *" {
                    $msg_sub=$_.Substring(9)
                    log "Subject appears to be '$msg_sub'" "DEBUG"
                }
                "From: *" {
                    $is_from=$true
                    $msg_from=$_.Substring(6)
                }
                "Date: *" {
                    $msg_sent=$_.Substring(6)
                    log "Date appears to be '$msg_sent'" "DEBUG"
                }
            }
        }
        if($_ -like "Content-*: *" -or ($is_header -and $_.Length -ge 4)) {
            if($is_content) {
                SaveAttachment
            }
            if($_ -like "Content-*: *") {
                log "$_" "DEBUG"
                if($boundary_cursor -lt 0) {
                    log "No boundary info yet. Assuming there's no boundary info in this email." "DEBUG"
                    $is_header=$true
                    $is_content=$false
                }
                $l=$_
                $k=$_.Split(";")[0].Split(":")[0]
                $v=$_.Split(";")[0].Split(":")[1].SubString(1)
                switch($k) {
                    "Content-Type" {
                        $global:is_txt=($v.Split("/")[0] -like "text")
                        if($l.split(";").Count -gt 1) {
                            $l.split(";") | foreach {
                                $k2=$_.split("=")[0].Replace(" ","")
                                if($k2 -like "name") {
                                    $global:att_filename=$_.split("=")[1].Replace("`"","")
                                    log "Setting filename for attachment to '$global:att_filename'" "DEBUG"
                                }
                            }
                        }
                        if($global:is_txt -and $global:att_filename -eq "") {
                            $txt_cnt++
                            $global:att_filename="${global:filename}_${txt_cnt}.$($v.split('/')[1].Replace("plain","txt"))"
                            log "No filename yet for attachment. Setting to '$global:att_filename'" "DEBUG"
                        }
                    }
                    "Content-Description" {
                        $global:att_filename=$v
                        log "Filename for attachment set to '$v'" "DEBUG"
                    }
                    "Content-Transfer-Encoding" {
                        $global:is_base64=($v -like "base64")
                        $global:is_quoted=($v -like "quoted-printable")
                    }
                }
            }
        }
        else {
            if($is_content -and -not $is_header) {
                if($global:is_base64) {
                    if($_.Length -ge 4 -and $_[0] -ne " " -and $_[0] -ne "-" -and $_[0] -ne "`t") {
                        $global:base64_content+=$_
                    }
                }
                else {
                    $global:plain_content+=$_
                }
            }
            elseif($is_header) {
                log "Switching to content mode" "DEBUG"
                $is_header=$false
                $is_content=$true
            }
        }
    }
    if($global:plain_content.Count -gt 0 -or $global:base64_content.Count -gt 0) {
        SaveAttachment
    }
    log "From: '$msg_from'; Subject: '$msg_sub'; Date: '$msg_sent'"
    if(Test-Path "$global:d\att_$global:filename") {
        if(Test-Path "$global:d\att_$global:filename\$global:filename.zip") {
            log "ZIP file already there. Removing." "DEBUG"
            Remove-Item "$global:d\att_$global:filename\$global:filename.zip" -Confirm:$false
        }
        log "Adding HTML files to ZIP" "DEBUG"
        dir "$global:d\att_$global:filename\*.htm*" | Add-Zip "$global:d\att_$global:filename\$global:filename.zip"
        log "Adding TXT files to ZIP" "DEBUG"
        dir "$global:d\att_$global:filename\*.txt*" | Add-Zip "$global:d\att_$global:filename\$global:filename.zip"
        log "Adding FILE files to ZIP" "DEBUG"
        dir "$global:d\att_$global:filename\*.file*" | Add-Zip "$global:d\att_$global:filename\$global:filename.zip"
        Get-ChildItem "$global:d\att_$global:filename" | Where-Object { $_.Name -notlike "*.htm*" -and $_.Name -notlike "*.txt" -and $_.Name -notlike "*.file" } | foreach-object {
            log "Adding '$($_.Name)' to attachments for email" "DEBUG"
            $msg_attachments+=$_.FullName
        }
        if((Get-Item "$global:d\att_$global:filename\*.txt").Count -lt 1) {
            log "There's no plain text content for this email. Setting default body for message"
            $msg_body="Dear colleagues,`r`n`r`nthis Email was sent on $msg_sent and has no plain text content. Since it failed to process in OTRS because its HTML contained Unicode, we had to resend it as attachment only.`r`n`r`nPlease see attached files.`r`n`r`nThanks and best regards,`r`nOTRS SPOOL AUTOMATION`r`n`r`nPS: This one has been sent by a script. In case of inquiries or defects, please inform ENTER_RESPONSIBLE_PERSON_HERE"
        }
        else {
            log "Plain text found" "DEBUG"
            $msg_body=(Get-Content (Get-Item "$global:d\att_$filename\*.txt")[0].FullName) -Join "`r`n"
        }
        log "Sending message to '$msg_to' from '$msg_from' with subject '$msg_sub'"
        Send-MailMessage -SmtpServer $msg_srv -From $msg_from -Subject $msg_sub -To $msg_to -Body $msg_body -Attachments $msg_attachments -DeliveryNotificationOption Never
        log "Moving spoolfile to archive folder" "DEBUG"
        Move-Item $_.FullName "$od\"
        log "Removing temporary folder" "DEBUG"
        Remove-Item "$global:d\att_$global:filename" -Recurse -Confirm:$false
        if(Test-Path $_.FullName) {
            log "Moving spoolfile failed. Deleting" "WARN"
            Remove-Item $_.FullName -Confirm:$false
        }
    }
    else {
        log "No directory created." "WARN"
    }
}
Ich weiß, dass jetzt einige ankommen werden und sagen: "Oh Gott! Aktualisiert doch einfach OTRS oder installiert eine neue Version neu!"
Dem kann ich nur entgegnen: Würden wir hier wirklich sehr gerne tun. Leider stoßen wir da auf taube Ohren und behelfen uns damit.
jojo
Znuny guru
Posts: 15019
Joined: 26 Jan 2007, 14:50
Znuny Version: Git Master
Contact:

Re: Migration von OTRS 2.4.7 von OpenSUSE 11 auf Windows 2012 R2

Post by jojo »

Taube Ohren bei einer so alten und unsicheren Software? Evtl. solltest Du die Geschäftsführung darauf hinweisen das es sich hier bereits um einen schwerwiegenden Datenschutzverstoß handeln kann der entsprechend teuer für das Unternehmen werden kann...
"Production": OTRS™ 8, OTRS™ 7, STORM powered by OTRS
"Testing": ((OTRS Community Edition)) and git Master

Never change Defaults.pm! :: Blog
Professional Services:: http://www.otrs.com :: enjoy@otrs.com
Post Reply