Thunderbird Crash

M

MacNoob20

Aktives Mitglied
Thread Starter
Dabei seit
30.01.2020
Beiträge
171
Reaktionspunkte
10
Hi!

ich habe einen Codeschnipsel, der Mails via Thunderbird versendet:

Code:
set email to "test@test.de"
set email_subject to "Test"
set email_message to "Test"

set email_recipient to "to=" & email
set email_subject to "subject=" & email_subject
set email_message to "body=" & email_message

set thunderbird_bin to "/Applications/Thunderbird.app/Contents/MacOS/thunderbird-bin -compose "

set arguments to email_subject & "," & email_recipient & "," & email_message

do shell script thunderbird_bin & quoted form of arguments & ">/dev/null 2>&1 &"

Funktioniert für sich genommen super, ich kann Mails ohne Probleme hintereinander versenden.

Sobald ein

Code:
display dialog "Test"

dahinter kommt, bringt der Code regelmäßig/reproduzierbar mein Thunderbird zum Absturz (farbiger Ball dreht sich).

Ich habe einiges herumprobiert und bin mir relativ sicher, dass es daran liegt, dass das AppleScript danach den Dialog ausgibt. Aber wieso brignt das Thunderbird durcheinander?

Danke!
 
leute, ihr müsst schon mindestens eure app- und OS-versionen angeben!
bei mir mit 10.11/TB 68.7.0 gehts jedenfalls (wie im script: compose, nicht senden).

prober mal "say blabla", statt "display dialog blabla".
 
Sorry, macOS 10.15.4 und TB 68.7.0

Moment: Was anderes als compose geht via shell nicht, oder kann ich via Shell auch senden?

Der Fehler tritt bei mir auf, wenn ich mehrere Nachrichten hintereinander sende (so 5 - 10). Ich habe das Gefühl, dass der Dialog dafür sorgt, dass die Shell noch offen ist und so Thunderbird "überlastet".

"Say" kann ich leider nicht verwenden, da im eigentlichen Programm Anweisungen im Dialog stehen, die nicht (sinnvoll) gesprochen werden können.
 
1. du sollst say zum testen nehmen, nicht für immer.
2. nein, TB kann so nicht direkt senden, ausser über GUI-scripting.
3. du schickst TB ja in den background. das sollte also nicht blockieren.
4. warum sendest du nicht gleich mit einem passenden cli-mailer?
 
Zuletzt bearbeitet:
Danke!

  1. Leider tritt der Fehler auch mit say auf. Seltsam leider auch: Vor einem Neustart gerade eben konnte ich 20 Mail ohne Probleme senden, danach nur noch ~5 (sowohl mit say als auch mit display dialog)
  2. ok
  3. Ich dachte, dass vielleicht irgendwo ein Puffer vollläuft...
  4. Manch der Mails müssen noch leicht angepasst werden, aber ich bin dankbar für Empfehlungen
--> Hast du noch eine Idee, was ich versuchen könnte, um den Fehler zu finden?

Eventuell hilft der Crash-Report?
Code:
Date/Time:        2020-04-29 09:43:46 +0200
End time:         2020-04-29 09:48:37 +0200
OS Version:       Mac OS X 10.15.4 (Build 19E287)
Architecture:     x86_64h
Report Version:   29

Data Source:      Stackshots
Shared Cache:     0xb9e0000 2728D950-E11B-33DF-96F3-4138D69A550C

Command:          thunderbird-bin
Path:             /Applications/Thunderbird.app/Contents/MacOS/thunderbird-bin
Version:          ??? (???)
Parent:           launchd [1]
Responsible:      Automator [827]
PID:              846

Event:            hang
Duration:         290.46s
Duration Sampled: 4.10s (process was unresponsive for 286 seconds before sampling)
Steps:            41 (100ms sampling interval)

Hardware model:   MacBookPro15,4
Active cpus:      8
Boot args:        chunklist-security-epoch=0 -chunklist-no-rev2-dev

Time Awake Since Boot: 450s

Gestern stand bei Responsible Finder - ich nehme an, dass ist das Programm, von wo aus ich das Skript via Shortcut gerufen habe?



Edit: Äh, kann es sein, dass das Aufrufen über eine Tastenkombination den Fehler verursacht?!
 
teste doch mal, indem du ein logfile mitschreibst mit verschiedenen einträgen zu den einzelnen phasen. dann sollte halbwegs zu erkennen sein, wann es hängen bleibt.

zu 4.: mutt, msmtp, swaks oder sogar curl. alles machbar und sicher auch eleganter in der B-note. :p

was an den mails muss denn angepasst werden?
 
Hi,

danke erst einmal! Ich musste mich erst schlau machen, wie man ein Logfile schreibt ;)

Code:
on writeTextToFile(theText, theFile, overwriteExistingContent)
    try
        
        
        -- Convert the file to a string
        set theFile to theFile as string
        
        -- Open the file for writing
        set theOpenedFile to open for access file theFile with write permission
        
        -- Clear the file if content should be overwritten
        if overwriteExistingContent is true then set eof of theOpenedFile to 0
        
        -- Write the new content to the file
        write theText to theOpenedFile starting at eof
        
        -- Close the file
        close access theOpenedFile
        
        -- Return a boolean indicating that writing was successful
        return true
        
        -- Handle a write error
    on error
        
        -- Close the file
        try
            close access file theFile
        end try
        
        -- Return a boolean indicating that writing failed
        return false
    end try
end writeTextToFile

set durchlauf to "1"

repeat 50 times
    
    set theText to ((current date) as string) & space & "Durchlauf " & durchlauf & ": START" & return
    set theFile to (((path to desktop folder) as string) & "MY LOG FILE.log")
    writeTextToFile(theText, theFile, false)
    
    set email to "Test@test.de"
    set email_subject_H to "Durchlauf " & durchlauf
    set email_message_H to "Test"
    
    set email_recipient to "to=" & email
    set email_subject to "subject=" & email_subject_H
    set email_message to "body=" & email_message_H
    
    set thunderbird_bin to "/Applications/Thunderbird.app/Contents/MacOS/thunderbird-bin -compose "
    
    set arguments to email_subject & "," & email_recipient & "," & email_message
    
    set theText to ((current date) as string) & space & "Durchlauf " & durchlauf & ": ARGUMENTE VORBEREITET" & return
    set theFile to (((path to desktop folder) as string) & "MY LOG FILE.log")
    writeTextToFile(theText, theFile, false)
    
    do shell script thunderbird_bin & quoted form of arguments & ">/dev/null 2>&1 &"
    
    set theText to ((current date) as string) & space & "Durchlauf " & durchlauf & ": E-MAIL BEREIT" & return
    set theFile to (((path to desktop folder) as string) & "MY LOG FILE.log")
    writeTextToFile(theText, theFile, false)
    
    delay 1
    
    tell application "Thunderbird"
        activate
    end tell
    
    (*
    delay 2
    
    tell application "System Events"
        keystroke (key code 36 using {command down})
    end tell
    
    tell application "Automator"
        activate
    end tell
    *)
    
    set theText to ((current date) as string) & space & "Durchlauf " & durchlauf & ": THUNDERBIRD AKTIVIERT" & return
    set theFile to (((path to desktop folder) as string) & "MY LOG FILE.log")
    writeTextToFile(theText, theFile, false)
    
    display dialog "E-Mail " & durchlauf & " gesendet"
    
    set theText to ((current date) as string) & space & "Durchlauf " & durchlauf & ": E-MAIL GESENDET" & return
    set theFile to (((path to desktop folder) as string) & "MY LOG FILE.log")
    writeTextToFile(theText, theFile, false)
    
    set durchlauf to durchlauf + 1
    
end repeat

Bei allen Durchläufen, die nun hängen blieben, war die letzte Log-Nachricht "E-MAIL BEREIT". Ich nehme deshalb an, dass sich Thunderbird bei "activate"-Befehl aufhängt.

Derzeit müssen manche Anhänge erst noch erstellt werden, bevor sie der E-Mail angehängt werden können. Ich habe aber vor, das auch noch zu automatisieren.
 
Zurück
Oben Unten