Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

FUNCTION MODULE FOR AUTOMATIC MAIL GENERATION

Former Member
0 Likes
1,353

Hello,

I want to generate an automatic mail of a scheduled report on everyday basis.

the output spool req of scheduled report in generated n saved inside the system.

Could you please help me in generating automatic mail through that saved spool request?

Regards,

Krutika

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,290

hi,

use:

DATA: lv_filesize TYPE i,

lv_buffer TYPE string,

lv_attachment TYPE i,

lv_testo TYPE i.

DATA: li_pdfdata TYPE STANDARD TABLE OF tline,

li_mess_att TYPE STANDARD TABLE OF solisti1,

li_mtab_pdf TYPE STANDARD TABLE OF tline,

li_objpack TYPE STANDARD TABLE OF sopcklsti1,

li_objtxt TYPE STANDARD TABLE OF solisti1,

li_objbin TYPE STANDARD TABLE OF solisti1,

li_reclist TYPE STANDARD TABLE OF somlreci1,

li_objhead TYPE soli_tab.

DATA: lwa_pdfdata TYPE tline,

lwa_objpack TYPE sopcklsti1,

lwa_mess_att TYPE solisti1,

lwa_objtxt TYPE solisti1,

lwa_objbin TYPE solisti1,

lwa_reclist TYPE somlreci1,

lwa_doc_chng TYPE sodocchgi1.

CONSTANTS: lc_u TYPE char1 VALUE 'U',

lc_0 TYPE char1 VALUE '0',

lc_1 TYPE char1 VALUE '1',

lc_pdf TYPE char3 VALUE 'PDF',

lc_raw TYPE char3 VALUE 'RAW',

lc_ordform TYPE char15 VALUE 'ZORDCONFIRM_01',

lc_attachment TYPE char10 VALUE 'ATTACHMENT'.

CALL FUNCTION 'CONVERT_OTF'

EXPORTING

format = lc_pdf

max_linewidth = 132

IMPORTING

bin_filesize = lv_filesize

TABLES

otf = pv_otfdata

lines = li_pdfdata

EXCEPTIONS

err_max_linewidth = 1

err_format = 2

err_conv_not_possible = 3

err_bad_otf = 4

OTHERS = 5.

IF sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

LOOP AT li_pdfdata INTO lwa_pdfdata.

TRANSLATE lwa_pdfdata USING ' ~'.

CONCATENATE lv_buffer lwa_pdfdata INTO lv_buffer.

CLEAR lwa_pdfdata.

ENDLOOP.

TRANSLATE lv_buffer USING '~ '.

DO.

lwa_mess_att = lv_buffer.

APPEND lwa_mess_att TO li_mess_att.

CLEAR lwa_mess_att.

SHIFT lv_buffer LEFT BY 255 PLACES.

IF lv_buffer IS INITIAL.

EXIT.

ENDIF.

ENDDO.

  • Object with PDF.

REFRESH li_objbin.

li_objbin[] = li_mess_att[].

DESCRIBE TABLE li_objbin LINES lv_attachment.

  • Object with main text of the mail.

lwa_objtxt = space.

APPEND lwa_objtxt TO li_objtxt.

CLEAR lwa_objtxt.

DESCRIBE TABLE li_objtxt LINES lv_testo.

  • Create the document which is to be sent

lwa_doc_chng-obj_name = text-008.

lwa_doc_chng-obj_descr = text-008.

lwa_doc_chng-sensitivty = lc_0.

lwa_doc_chng-obj_prio = lc_1.

lwa_doc_chng-doc_size = lv_testo * 225.

  • Pack to main body.

CLEAR lwa_objpack-transf_bin.

  • header

lwa_objpack-head_start = 1.

  • The document needs no header (head_num = 0)

lwa_objpack-head_num = 0.

  • body

lwa_objpack-body_start = 1.

lwa_objpack-body_num = lv_testo.

lwa_objpack-doc_type = lc_raw.

APPEND lwa_objpack TO li_objpack.

CLEAR lwa_objpack.

  • Create the attachment.

  • Fill the fields of the packing_list for the attachment:

lwa_objpack-transf_bin = gc_x .

  • header

lwa_objpack-head_start = 1.

lwa_objpack-head_num = 1.

  • body

lwa_objpack-body_start = 1.

lwa_objpack-body_num = lv_attachment.

lwa_objpack-doc_type = lc_pdf.

lwa_objpack-obj_name = lc_attachment.

lwa_objpack-obj_descr = text-008.

lwa_objpack-doc_size = lv_attachment * 255.

APPEND lwa_objpack TO li_objpack.

CLEAR lwa_objpack.

lwa_reclist-receiver = pv_emailid.

lwa_reclist-rec_type = lc_u.

lwa_reclist-notif_del = gc_x.

lwa_reclist-notif_ndel = gc_x.

APPEND lwa_reclist TO li_reclist.

IF li_reclist IS NOT INITIAL.

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

EXPORTING

document_data = lwa_doc_chng

put_in_outbox = gc_x

TABLES

packing_list = li_objpack

object_header = li_objhead

contents_bin = li_objbin

contents_txt = li_objtxt

receivers = li_reclist

EXCEPTIONS

too_many_receivers = 1

document_not_sent = 2

document_type_not_exist = 3

operation_no_authorization = 4

parameter_error = 5

x_error = 6

enqueue_error = 7

OTHERS = 8.

IF sy-subrc <> 0.

  • MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno

  • WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

ENDIF.

9 REPLIES 9
Read only

Former Member
0 Likes
1,290

Hi Krutika,

Use the FM 'SO_NEW_DOCUMENT_SEND_API1' with appropriate parameters needed.

Regards,

Anand.

Read only

Former Member
0 Likes
1,291

hi,

use:

DATA: lv_filesize TYPE i,

lv_buffer TYPE string,

lv_attachment TYPE i,

lv_testo TYPE i.

DATA: li_pdfdata TYPE STANDARD TABLE OF tline,

li_mess_att TYPE STANDARD TABLE OF solisti1,

li_mtab_pdf TYPE STANDARD TABLE OF tline,

li_objpack TYPE STANDARD TABLE OF sopcklsti1,

li_objtxt TYPE STANDARD TABLE OF solisti1,

li_objbin TYPE STANDARD TABLE OF solisti1,

li_reclist TYPE STANDARD TABLE OF somlreci1,

li_objhead TYPE soli_tab.

DATA: lwa_pdfdata TYPE tline,

lwa_objpack TYPE sopcklsti1,

lwa_mess_att TYPE solisti1,

lwa_objtxt TYPE solisti1,

lwa_objbin TYPE solisti1,

lwa_reclist TYPE somlreci1,

lwa_doc_chng TYPE sodocchgi1.

CONSTANTS: lc_u TYPE char1 VALUE 'U',

lc_0 TYPE char1 VALUE '0',

lc_1 TYPE char1 VALUE '1',

lc_pdf TYPE char3 VALUE 'PDF',

lc_raw TYPE char3 VALUE 'RAW',

lc_ordform TYPE char15 VALUE 'ZORDCONFIRM_01',

lc_attachment TYPE char10 VALUE 'ATTACHMENT'.

CALL FUNCTION 'CONVERT_OTF'

EXPORTING

format = lc_pdf

max_linewidth = 132

IMPORTING

bin_filesize = lv_filesize

TABLES

otf = pv_otfdata

lines = li_pdfdata

EXCEPTIONS

err_max_linewidth = 1

err_format = 2

err_conv_not_possible = 3

err_bad_otf = 4

OTHERS = 5.

IF sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

LOOP AT li_pdfdata INTO lwa_pdfdata.

TRANSLATE lwa_pdfdata USING ' ~'.

CONCATENATE lv_buffer lwa_pdfdata INTO lv_buffer.

CLEAR lwa_pdfdata.

ENDLOOP.

TRANSLATE lv_buffer USING '~ '.

DO.

lwa_mess_att = lv_buffer.

APPEND lwa_mess_att TO li_mess_att.

CLEAR lwa_mess_att.

SHIFT lv_buffer LEFT BY 255 PLACES.

IF lv_buffer IS INITIAL.

EXIT.

ENDIF.

ENDDO.

  • Object with PDF.

REFRESH li_objbin.

li_objbin[] = li_mess_att[].

DESCRIBE TABLE li_objbin LINES lv_attachment.

  • Object with main text of the mail.

lwa_objtxt = space.

APPEND lwa_objtxt TO li_objtxt.

CLEAR lwa_objtxt.

DESCRIBE TABLE li_objtxt LINES lv_testo.

  • Create the document which is to be sent

lwa_doc_chng-obj_name = text-008.

lwa_doc_chng-obj_descr = text-008.

lwa_doc_chng-sensitivty = lc_0.

lwa_doc_chng-obj_prio = lc_1.

lwa_doc_chng-doc_size = lv_testo * 225.

  • Pack to main body.

CLEAR lwa_objpack-transf_bin.

  • header

lwa_objpack-head_start = 1.

  • The document needs no header (head_num = 0)

lwa_objpack-head_num = 0.

  • body

lwa_objpack-body_start = 1.

lwa_objpack-body_num = lv_testo.

lwa_objpack-doc_type = lc_raw.

APPEND lwa_objpack TO li_objpack.

CLEAR lwa_objpack.

  • Create the attachment.

  • Fill the fields of the packing_list for the attachment:

lwa_objpack-transf_bin = gc_x .

  • header

lwa_objpack-head_start = 1.

lwa_objpack-head_num = 1.

  • body

lwa_objpack-body_start = 1.

lwa_objpack-body_num = lv_attachment.

lwa_objpack-doc_type = lc_pdf.

lwa_objpack-obj_name = lc_attachment.

lwa_objpack-obj_descr = text-008.

lwa_objpack-doc_size = lv_attachment * 255.

APPEND lwa_objpack TO li_objpack.

CLEAR lwa_objpack.

lwa_reclist-receiver = pv_emailid.

lwa_reclist-rec_type = lc_u.

lwa_reclist-notif_del = gc_x.

lwa_reclist-notif_ndel = gc_x.

APPEND lwa_reclist TO li_reclist.

IF li_reclist IS NOT INITIAL.

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

EXPORTING

document_data = lwa_doc_chng

put_in_outbox = gc_x

TABLES

packing_list = li_objpack

object_header = li_objhead

contents_bin = li_objbin

contents_txt = li_objtxt

receivers = li_reclist

EXCEPTIONS

too_many_receivers = 1

document_not_sent = 2

document_type_not_exist = 3

operation_no_authorization = 4

parameter_error = 5

x_error = 6

enqueue_error = 7

OTHERS = 8.

IF sy-subrc <> 0.

  • MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno

  • WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

ENDIF.

Read only

Former Member
0 Likes
1,290

thank you for ur replies.

@ Mr. AD

While using your code it gives error saying "CALL FUNCTION 'CONVERT_OTF" statement is not accessible.

Please help me in this case.

Thanks & regards,

Krutika

Read only

Former Member
0 Likes
1,290

Read only

Former Member
0 Likes
1,290

try this code..you may get help out of this.

REPORT ZCAT1.

DATA : LS_DOCDATA LIKE SODOCCHGI1,

LT_DOCDATA TYPE STANDARD TABLE OF SODOCCHGI1, " Table for subject

LS_CONTENTS_MSG LIKE SOLISTI1,

LT_CONTENTS_MSG TYPE STANDARD TABLE OF SOLISTI1,

LS_PACKING_LIST LIKE SOPCKLSTI1,

LT_PACKING_LIST TYPE STANDARD TABLE OF SOPCKLSTI1, " Table for Document type and length

LS_OBJECT_HEADER LIKE SOLISTI1,

LT_OBJECT_HEADER TYPE STANDARD TABLE OF SOLISTI1, " Table for Header

LS_CONTENTS_TXT LIKE SOLISTI1,

LT_CONTENTS_TXT TYPE STANDARD TABLE OF SOLISTI1, " Table for mail contents

LS_RECEIVERS LIKE SOMLRECI1,

LT_RECEIVERS TYPE STANDARD TABLE OF SOMLRECI1. " Table for receiver,

LS_CONTENTS_TXT-LINE = text-009.

APPEND LS_CONTENTS_TXT TO LT_CONTENTS_TXT.

clear LS_CONTENTS_TXT.

LS_CONTENTS_MSG-line = 'Sucessful'.

append LS_CONTENTS_MSG to Lt_CONTENTS_MSG.

  • Content structure

LS_PACKING_LIST-TRANSF_BIN = space.

LS_PACKING_LIST-HEAD_START = 1.

LS_PACKING_LIST-HEAD_NUM = 0.

LS_PACKING_LIST-BODY_START = 1.

DESCRIBE TABLE LT_CONTENTS_TXT LINES LS_PACKING_LIST-BODY_NUM .

LS_PACKING_LIST-DOC_TYPE = 'RAW'.

append LS_PACKING_LIST to Lt_PACKING_LIST.

  • Create attachment notification

LS_PACKING_LIST-TRANSF_BIN = 'X'.

LS_PACKING_LIST-HEAD_START = 1.

LS_PACKING_LIST-HEAD_NUM = 1.

LS_PACKING_LIST-BODY_START = 1.

  • DESCRIBE TABLE LT_CONTENTS_MSG LINES LS_PACKING_LIST-BODY_NUM.

  • LS_PACKING_LIST-DOC_TYPE = 'PDF'.

  • LS_PACKING_LIST-OBJ_DESCR = 'PDF ATTACHEMENT'.

  • LS_PACKING_LIST-OBJ_NAME = 'DEMO'.

  • LS_PACKING_LIST-DOC_SIZE = LS_PACKING_LIST-BODY_NUM * 255.

APPEND LS_PACKING_LIST TO Lt_PACKING_LIST.

LS_RECEIVERS-RECEIVER = 'xxxxxx'. email id no1

LS_RECEIVERS-REC_TYPE = 'U'.

APPEND LS_RECEIVERS TO LT_RECEIVERS.

LS_RECEIVERS-RECEIVER = 'yyyyy' . email id no2(cc)

LS_RECEIVERS-REC_TYPE = 'U'.

LS_RECEIVERS-COPY = 'X'.

APPEND LS_RECEIVERS TO LT_RECEIVERS.

  • Send mail

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

EXPORTING

DOCUMENT_DATA = LS_DOCDATA

PUT_IN_OUTBOX = 'X'

COMMIT_WORK = 'X'

  • IMPORTING

  • SENT_TO_ALL =

  • NEW_OBJECT_ID =

TABLES

PACKING_LIST = Lt_PACKING_LIST

  • OBJECT_HEADER =

CONTENTS_BIN = LT_CONTENTS_MSG

CONTENTS_TXT = LT_CONTENTS_TXT

  • CONTENTS_HEX =

  • OBJECT_PARA =

  • OBJECT_PARB =

RECEIVERS = LT_RECEIVERS

  • EXCEPTIONS

  • TOO_MANY_RECEIVERS = 1

  • DOCUMENT_NOT_SENT = 2

  • DOCUMENT_TYPE_NOT_EXIST = 3

  • OPERATION_NO_AUTHORIZATION = 4

  • PARAMETER_ERROR = 5

  • X_ERROR = 6

  • ENQUEUE_ERROR = 7

  • OTHERS = 8

.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

Regards

Ansumesh

Read only

Former Member
0 Likes
1,290

hi,

u can check out the following code tutorial on SDN ....

may be it can suit ur requirement ...................................................................

https://www.sdn.sap.com/irj/scn/wiki?path=/display/snippets/mail%252bsend%252bthrough%252boutput%252...

regards,

prashanti

Read only

0 Likes
1,290

REPORT ZSENDEXTERNAL.

DATA: OBJPACK   LIKE SOPCKLSTI1 OCCURS 2 WITH HEADER LINE.
DATA: OBJHEAD   LIKE SOLISTI1 OCCURS 1 WITH HEADER LINE.
DATA: OBJBIN    LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.
DATA: OBJTXT    LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.
DATA: RECLIST   LIKE SOMLRECI1 OCCURS 5 WITH HEADER LINE.
DATA: DOC_CHNG  LIKE SODOCCHGI1.
DATA: TAB_LINES LIKE SY-TABIX.

* Creation of the document to be sent
* File Name
DOC_CHNG-OBJ_NAME = 'SENDFILE'.
* Mail Subject
DOC_CHNG-OBJ_DESCR = 'Send External Mail'.
* Mail Contents
OBJTXT = 'Minimum bid : $250000'.
APPEND OBJTXT.
OBJTXT = 'A representation of the pictures up for auction'.
APPEND OBJTXT.
OBJTXT = 'was included as attachment.'.
APPEND OBJTXT.

DESCRIBE TABLE OBJTXT LINES TAB_LINES.
READ TABLE OBJTXT INDEX TAB_LINES.
DOC_CHNG-DOC_SIZE = ( TAB_LINES - 1 ) * 255 + STRLEN( OBJTXT ).

* Creation of the entry for the compressed document
CLEAR OBJPACK-TRANSF_BIN.
OBJPACK-HEAD_START = 1.
OBJPACK-HEAD_NUM = 0.
OBJPACK-BODY_START = 1.
OBJPACK-BODY_NUM = TAB_LINES.
OBJPACK-DOC_TYPE = 'RAW'.
APPEND OBJPACK.

* Creation of the document attachment
* (Assume that the data in OBJBIN is in BMP format)
*OBJBIN = ' \O/ '. APPEND OBJBIN.
*OBJBIN = ' | '. APPEND OBJBIN.
*OBJBIN = ' / \ '. APPEND OBJBIN.
*DESCRIBE TABLE OBJBIN LINES TAB_LINES.
*OBJHEAD = 'PICTURE.BMP'.
*APPEND OBJHEAD.
*
** Creation of the entry for the compressed attachment
*OBJPACK-TRANSF_BIN = 'X'.
*OBJPACK-HEAD_START = 1.
*OBJPACK-HEAD_NUM = 1.
*OBJPACK-BODY_START = 1.
*OBJPACK-BODY_NUM = TAB_LINES.
*OBJPACK-DOC_TYPE = 'BMP'.
*OBJPACK-OBJ_NAME = 'PICTURE'.
*OBJPACK-OBJ_DESCR = 'Representation of object 138'.
*OBJPACK-DOC_SIZE = TAB_LINES * 255.
*APPEND OBJPACK.

* Completing the recipient list
RECLIST-RECEIVER = 'youremail address'.
RECLIST-REC_TYPE = 'U'.
APPEND RECLIST.

*RECLIST-RECEIVER = 'SAPUSERNAME'.
*RECLIST-REC_TYPE = 'P'.
*APPEND RECLIST.

* Sending the document
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
   DOCUMENT_DATA = DOC_CHNG
   PUT_IN_OUTBOX = 'X'
TABLES
   PACKING_LIST = OBJPACK
   OBJECT_HEADER = OBJHEAD
   CONTENTS_BIN = OBJBIN
   CONTENTS_TXT = OBJTXT
   RECEIVERS = RECLIST
EXCEPTIONS
   TOO_MANY_RECEIVERS = 1
   DOCUMENT_NOT_SENT = 2
   OPERATION_NO_AUTHORIZATION = 4
OTHERS = 99.

CASE SY-SUBRC.
   WHEN 0.
   WRITE: / 'Result of the send process:'.

LOOP AT RECLIST.
   WRITE: / RECLIST-RECEIVER(48), ':'.

   IF RECLIST-RETRN_CODE = 0.
      WRITE 'The document was sent'.
   ELSE.
      WRITE 'The document could not be sent'.
ENDIF.

ENDLOOP.

WHEN 1.
   WRITE: / 'No authorization for sending to the specified number',
            'of recipients'.

WHEN 2.
   WRITE: / 'Document could not be sent to any recipient'.

WHEN 4.
   WRITE: / 'No send authorization'.

WHEN OTHERS.
   WRITE: / 'Error occurred while sending'.

ENDCASE. 
Read only

Former Member
0 Likes
1,290

Thank you all for your help.

@ Mr. AD

Sir,

Can you please guide me in this matter?

In your code where should I specify the email address of the receiver?

Thanks & Regards,

Krutika.

Read only

0 Likes
1,290

Hi krutika,

where you are using this code. in module pool programming or report program?

if possible give the code which you are using ,i will check it let you know.

You can pick the email address of receiver from ADR6 table.as follows:

SELECT SINGLE smtp_addr

FROM adr6

INTO gv_mailid

WHERE addrnumber = lfa1-adrnr.

Thanks

AD

Edited by: AD on Dec 18, 2008 12:17 PM