Code: Alles auswählen.
*Createt by Hans Muenstermann
create object out 'Outlook.Application'.
call method of out 'CREATEITEM' = outmail exporting #1 = 0.
*SET PROPERTY OF OUTMAIL 'TO' = 'Mail@Adresse.de;'.
*Mailempfänger
set property of outmail 'TO' = anschrift.
*Betreffzeile, entweder diese oder untere
*SET PROPERTY OF OUTMAIL 'SUBJECT' = <subject text>.
*Betreffzeile
set property of outmail 'SUBJECT' =
'Informationen von .....'.
*Textfenster entweder dies oder das untere
*SET PROPERTY OF OUTMAIL 'BODY' = <body text>.
*Textfenster
*set property of outmail 'BODY' = 'Superaffengeil'.
*Hier könnte man Attachments anhängen
*CALL METHOD OF OUTMAIL 'ATTACHMENTS' = atts.
*CALL METHOD OF ATTS 'ADD'
*EXPORTING #1 = <file-name-on-c:drive>.
*Mail anzeigen
call method of outmail 'Display'.
*hier könnte automatisch gesendet werden
*wenn das Senden im Dunkeln passieren soll, kann man den Display
*aussternen und den send aktivieren
*call method of outmail 'SEND'.
Code: Alles auswählen.
'Hallo'
'ich bin die zweite Zeile'
Code: Alles auswählen.
call method of h_word 'Insert'
exporting
#1 = text.
Code: Alles auswählen.
data: zeilenvorschub(2) type x value '0A0D'.
LOOP AT itab INTO wa.
CONCATENATE outputstring wa INTO outputstring SEPARATED BY zeilenvorschug.
ENDLOOP.
Dass ein string tatsächlich beliebig lang werden kann glaube ich aus mehreren Gründen zwar nicht - aber wahrscheinlich reicht das, was gegeben ist für deine Zwecke aus.STRING für Zeichenfolgen
Eine Zeichenfolge ist ein zeichenartiger Typ variabler Länge. Eine Zeichenfolge kann beliebig viele alphanumerische Zeichen aufnehmen. Die Länge einer Zeichenfolge ist die Anzahl der Zeichen multipliziert mit der Länge der internen Darstellung des Zeichens.
Code: Alles auswählen.
REPORT ytesmk17 .
INCLUDE ole2incl.
INCLUDE docsincl.
DATA out TYPE ole2_object.
DATA outmail TYPE ole2_object.
CONSTANTS: cc TYPE string
VALUE ''
, to TYPE string VALUE ''
, x(2) TYPE x VALUE '0D0A'
.
DATA mail TYPE tline OCCURS 0.
DATA wa_mail TYPE tline.
DATA id TYPE thead-tdid VALUE 'ST'.
DATA lan TYPE thead-tdspras VALUE 'DE'.
DATA name TYPE thead-tdname VALUE 'YTESMK_MAIL'.
DATA subject TYPE thead-tdname VALUE 'YTESMK_MAIL_SUBJECT'.
DATA string TYPE string.
*----------------------------------------------------
* Mail anlegen
CREATE OBJECT out 'Outlook.Application'.
CALL METHOD OF out 'CREATEITEM' = outmail
EXPORTING
#1 = 0.
*----------------------------------------------------
*Mailempfänger
SET PROPERTY OF outmail 'TO' = to.
SET PROPERTY OF outmail 'CC' = cc.
*----------------------------------------------------
*Betreffzeile
CALL FUNCTION 'READ_STDTEXT'
EXPORTING
id = id
language = lan
name = subject
* USE_AUX_LANGUAGE = ' '
* USE_THRUCLIENT = ' '
* LOCAL_CAT = ' '
* IMPORTING
* HEADER =
TABLES
lines = mail
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
reference_check = 5
OTHERS = 6
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
READ TABLE mail INDEX 1 INTO wa_mail.
//geloescht
SET PROPERTY OF outmail 'SUBJECT' = wa_mail-tdline.
*----------------------------------------------------
*Textfenster
* Standardtext lesen
CALL FUNCTION 'READ_STDTEXT'
EXPORTING
id = id
language = lan
name = name
* USE_AUX_LANGUAGE = ' '
* USE_THRUCLIENT = ' '
* LOCAL_CAT = ' '
* IMPORTING
* HEADER =
TABLES
lines = mail
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
reference_check = 5
OTHERS = 6
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
READ TABLE mail INDEX 6 INTO wa_mail.
//geloescht
MODIFY mail FROM wa_mail INDEX 6.
LOOP AT mail INTO wa_mail.
CONCATENATE string wa_mail-tdline INTO string
SEPARATED BY x.
ENDLOOP.
SHIFT string LEFT BY 2 PLACES.
SET PROPERTY OF outmail 'BODY' = string.
*Hier könnte man Attachments anhängen
*CALL METHOD OF OUTMAIL 'ATTACHMENTS' = atts.
*CALL METHOD OF ATTS 'ADD'
*EXPORTING #1 = <file-name-on-c:drive>.
*----------------------------------------------------
* Mail anzeigen
CALL METHOD OF outmail 'Display'.
*hier könnte automatisch gesendet werden
*wenn das Senden im Dunkeln passieren soll, kann man den Display
*aussternen und den send aktivieren
*call method of outmail 'SEND'.
Code: Alles auswählen.
CREATE OBJECT lr_outlook 'Outlook.Application'.
CALL METHOD OF lr_outlook 'CREATEITEM' = lr_mail
EXPORTING
#1 = 0.
SET PROPERTY OF lr_mail 'TO' = 'max.mustermann@dummy.de.
SET PROPERTY OF lr_mail 'SUBJECT' = 'Das ist der Betreff'.
SET PROPERTY OF lr_mail 'BODY' = lv_string. "Mailtext
CALL METHOD OF lr_mail 'Display'.
Code: Alles auswählen.
SET PROPERTY OF lr_mail 'BODY' = lv_string.
Die Signatur steht ja auch nicht in der Registry, sondern liegt als Datei im Benutzerverzeichnis von Outlook:ST22 hat geschrieben:Meine Idee, über die Registry den Wert der verwendeten Signatur zu lesen und die Signaturdatei dann hochzuladen und mit in den Body einzufügen ist gescheitert, weil man anscheinend keine binären Registrywerte lesen kann.
Ich kenn mich jetzt zwar nicht so gut mit OLE aus, aber hast du schon malST22 hat geschrieben:Jetzt wäre meine Frage, ob ich irgendwie meinen Mailtext gezielt vor der Signatur einsetzen kann, ohne dass mir die Signatur überschrieben wird?
Gibt es geeignete Methoden der Mailinstanz?
Code: Alles auswählen.
GET PROPERTY OF lr_mail 'BODY' = lv_string.
Guter Vorschlag, aber man muss die SO10-Texte dann in ein Format konvertieren, dass Outlook verarbeiten kann.BesenWesen hat geschrieben:Lege dir fuer deine Signatur/en einen/mehrere Standardtext/e (SO10, Text-ID 'ST') an.
Die Texte kannst du dann wiederum in deinem Email-Programm lesen (FuBa READ_TEXT) und an deinen Mailtext anfuegen.
Das wäre sicher gegangen, aber viele User haben viele verschiedene Signaturen, außerdem wollte ich möglichst das E-Mailformat und das Format der Signatur beibehalten, weil es bei uns Regularien für versendete E-Mails gibt.BesenWesen hat geschrieben:
Lege dir fuer deine Signatur/en einen/mehrere Standardtext/e (SO10, Text-ID 'ST') an.
Die Texte kannst du dann wiederum in deinem Email-Programm lesen (FuBa READ_TEXT) und an deinen Mailtext anfuegen.
Das Problem ist aber, dass ein Anwender seine Signatur (personalisiert) woanders ablegen kann, und genau diesen Verweis auf den Ort der Signaturdatei wollte ich aus der Registry auslesen. Das geht (glaube ich) mit CL_GUI_FRONTEND_SERVICES=>REGISTRY_GET_(DWORD_)VALUE leider nicht, weil binary value.a-dead-trousers hat geschrieben: Die Signatur steht ja auch nicht in der Registry, sondern liegt als Datei im Benutzerverzeichnis von Outlook:Hier gibt es je nach Typ der Email eine Signatur als TXT, HTML oder RTF.
- %APPDATA%\Roaming\Microsoft\Signatures (Win7)
- %APPDATA%\Microsoft\Signatures (WinXP)
Das ist im Prinzip der richtige Ansatz gewesen, nur muss vorhera-dead-trousers hat geschrieben:Ich kenn mich jetzt zwar nicht so gut mit OLE aus, aber hast du schon malausprobiert um vor dem Setzen die aktuellen Daten der Email auszulesen?Code: Alles auswählen.
GET PROPERTY OF lr_mail 'BODY' = lv_string.
Code: Alles auswählen.
CALL METHOD OF lr_mail 'Display'.
GET PROPERTY OF lr_mail 'Htmlbody' = lv_body.
Code: Alles auswählen.
SET PROPERTY OF lr_mail 'Htmlbody' = lv_body.
CALL METHOD OF lr_mail 'Display'.
Code: Alles auswählen.
lv_mail_format = '2'. "HTML
SET PROPERTY OF lr_mail 'BodyFormat' = lv_mail_format.