automatische E-mail

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

peterschleif
**
Beiträge: 34
Registriert: Fr, 06.11.2009 05:49

Re: automatische E-mail

Beitrag von peterschleif »

Hallo Korny.

Zum Mail-Versand:

OpenOffice kann Mails nicht vollautomatisch versenden. Mit createSimpleMailMessage() kann man zwar eine Mail erstellen, allerdings mit zwei Einschränkungen:

1. Die Mail darf keinen Body haben.

2. Die Mail wird nicht von OOo selbst verschickt, sondern nur an das Standard-Mail-Programm übergeben. Was dann damit passiert, kann OOo nicht beeinflussen. Thunderbird zeigt z.B. eine Warnung an, dass eine andere Anwendung versucht eine Mail zu versenden. Die Warnung kann man zwar dauerhaft unterdrücken, was aber wohl ein gewisses Sicherheits-Risiko darstellt.

Ich habe bei mir eine Lösung mittels PHP realisiert. Allerdings muss man dazu einen Ordner mit ein paar PHP-Dateien auf den Rechner kopieren (nicht installieren!) – was aber ja auch nicht immer möglich ist. Dafür erfolgt der Versand aus OOo dann vollautomatisch.


Zum Feld mit der Bedingung Falsch:

Habe ich so verstanden, dass in dem Feld eine Formel steht, die in Abhängigkeit anderer Zellen einen WAHR/FALSCH-Wert berechnet. Bei Falsch müsste dann eine Prozedur gestartet werden, die die Mail versendet.

Dazu müsste man Änderungen an der Tabelle überwachen und darauf reagieren. Das macht man mit einem Listener. Der reagiert dann zwar auf das berechnete Feld, liefert aber einen Bezug zu der/den Zelle(n) die der Berechnung zu Grunde liegen – die also in der Formel vorkommen. Von diesem Bezug müsste dann auf das berechnete Feld zurück schließen, um dessen Wert prüfen zu können. Das geht unter bestimmten Bedingen: Wenn z.B. alle Zellen die in der Formel vorkommen und die Zelle mit der Formel selbst in einer Zeile liegen.

A1: 1
B1: 1
C1: =WENN(A1+B1<3;WAHR;FALSCH)

Ändert man jetzt A1 oder B1 auf 2, so wird C1 FALSCH. In der Mail-Prozedur bekommt man einen Bezug auf A1 oder B1 – je nachdem wo die Änderung gemacht wurde. So oder so war die Änderung aber in Zeile 1, so dass man den Schnittpunkt dieser Zeile mit der Spalte C - also die Zelle C1 - prüfen kann und ggf. die Mail versenden kann.

Peter
famo
*****
Beiträge: 275
Registriert: Do, 06.01.2005 00:15
Wohnort: Berlin

Re: automatische E-mail

Beitrag von famo »

Hallo Peter,
hier ist dir wohl was durcheinander geraten :-), der Thread von Korny ist ein anderer s.u.

Aber trotzdem ein paar Fragen/Anmerkungen dazu:
peterschleif hat geschrieben:Hallo Korny.
Zum Mail-Versand:
OpenOffice kann Mails nicht vollautomatisch versenden. Mit createSimpleMailMessage() kann man zwar eine Mail erstellen, allerdings mit zwei Einschränkungen:

1. Die Mail darf keinen Body haben.
In viewtopic.php?f=18&t=31286#p125232 schreibt Korny aber das er schon eine Möglichkeit gefunden hat E-Mails mit Text/Body zu verfassen und es auch funktioniert. :?:
peterschleif hat geschrieben:2. Die Mail wird nicht von OOo selbst verschickt, sondern nur an das Standard-Mail-Programm übergeben. Was dann damit passiert, kann OOo nicht beeinflussen. Thunderbird zeigt z.B. eine Warnung an, dass eine andere Anwendung versucht eine Mail zu versenden. Die Warnung kann man zwar dauerhaft unterdrücken, was aber wohl ein gewisses Sicherheits-Risiko darstellt.
Im selben Thread weiter unten hab ich noch angemerkt, dass man SMTP Server etc. in OOo spezifizieren kann, heißt das nicht das OOo auch direkt E-Mail versenden kann?

vg
famo

PS:
am besten in viewtopic.php?f=18&t=31286 antworten.
peterschleif
**
Beiträge: 34
Registriert: Fr, 06.11.2009 05:49

Re: automatische E-mail

Beitrag von peterschleif »

famo hat geschrieben:Hallo Peter,
hier ist dir wohl was durcheinander geraten :-), der Thread von Korny ist ein anderer s.u.
Stimmt. Sorry. Bin noch etwas unsicher in der Foren-Benutzung. Aber der Thread war schon richtig; nur die Anrede war falsch.

famo hat geschrieben:In viewtopic.php?f=18&t=31286#p125232 schreibt Korny aber das er schon eine Möglichkeit gefunden hat E-Mails mit Text/Body zu verfassen und es auch funktioniert. :?:
Korny1986 hat geschrieben:

Code: Alles auswählen

	shell("C:\thunderbird\thunderbird.exe", 3, "-Compose to=" & sEmail & ",subject=" & sBetreff & ",body=" & sText & ",attachment=" & sDatei)
Das ist wohl der Standard-Aufruf von Thunderbird für ein neues Composer-Fenster. Das bringt dich aber eben nur fast ans Ziel. Es fehlt der entscheidende Mausklick der die Mail abschickt. Darum ist die Lösung für ein Vollautomatisierung meiner Meinung nach ungeeignet. (Mal abgesehen davon, dass sich die Lösung darauf verlässt, dass Thunderbird installiert ist). Eventuell erledigt ja die Extension den fehlenden Mausklick – hab' es nicht ausprobiert.

famo hat geschrieben:Im selben Thread weiter unten hab ich noch angemerkt, dass man SMTP Server etc. in OOo spezifizieren kann, heißt das nicht das OOo auch direkt E-Mail versenden kann?
Das kannte ich noch nicht. Habe es gerade mal getestet. Serienmails mit Writer funktionieren. Vielleicht kann man auf die Funktionalität auch von Calc bzw. Basic aus zugreifen. Etwas komisch finde ich, dass man die Zugangsdaten in den Optionen im Bereich „Writer“ eingeben muss. Das stimmt mich etwas pessimistisch in Bezug auf Calc.

famo hat geschrieben:am besten in viewtopic.php?f=18&t=31286 antworten.
Neeee. Dann komme ich noch mehr durcheinander mit den Threads. :-)

Peter
peterschleif
**
Beiträge: 34
Registriert: Fr, 06.11.2009 05:49

Re: automatische E-mail

Beitrag von peterschleif »

absolute beginner hat geschrieben:Ich möchte das "Email -Makro" ausführen wenn sich der Wert einer bestimmten Zelle ändert.
Dazu musst Du einen Listener auf die zu überwachende Zelle setzen. Code siehe unten. Außerdem müssen die Prozeduren AddListener() und RemoveListener() den Ereignissen "Dokument öffnen" und "Dokument schließen" zugewiesen werden. Die Prozedur Change_modified() wird dann bei jeder Änderung der Zelle Tabelle1.C5 aufgerufen.

Statt eine feste Zelle anzugeben, wäre es vielleicht besser, der Zelle einen Namen zu geben und dann diesen Namen im Code zu verwenden. Sonst musst Du den Code jedes mal anpassen wenn eine Zeile/Spalte vor der Zelle C5 eingefügt/gelöscht wird.

Peter

Code: Alles auswählen

Option Explicit

Global oRange
Global oListener

Const LISTENER_TABLE = "Tabelle1"
Const LISTENER_RANGE = "C5"

Sub AddListener()
    oListener = CreateUnoListener("Change_", "com.sun.star.util.XModifyListener")
    oRange = ThisComponent.Sheets(LISTENER_TABLE).getCellRangeByName(LISTENER_RANGE)
    oRange.addModifyListener(oListener)
End Sub
 
Sub RemoveListener()
    On Error Resume Next
    oRange.removeModifyListener(oListener)
End Sub

Sub Change_modified(aEvent)
	MsgBox LISTENER_TABLE & "." & LISTENER_RANGE & " wurde verändert"	
End Sub
Antworten