Sunday, November 18, 2018

Send mail with pdf attachment




REPORT  sendmailwithpdf.

* Internal Table declarations
DATA: I_OTF TYPE ITCOO OCCURS WITH HEADER LINE,
      I_TLINE TYPE TABLE OF TLINE WITH HEADER LINE,
      I_RECEIVERS TYPE TABLE OF SOMLRECI1 WITH HEADER LINE,
      I_RECORD LIKE SOLISTI1 OCCURS WITH HEADER LINE,
* Objects to send mail.
      I_OBJPACK LIKE SOPCKLSTI1 OCCURS WITH HEADER LINE,
      I_OBJTXT LIKE SOLISTI1 OCCURS WITH HEADER LINE,
      I_OBJBIN LIKE SOLISTI1 OCCURS WITH HEADER LINE,
      I_RECLIST LIKE SOMLRECI1 OCCURS WITH HEADER LINE,
* Work Area declarations
      WA_OBJHEAD TYPE SOLI_TAB,
      W_CTRLOP TYPE SSFCTRLOP,
      W_COMPOP TYPE SSFCOMPOP,
      W_RETURN TYPE SSFCRESCL,
      WA_DOC_CHNG TYPE SODOCCHGI1,
      W_DATA TYPE SODOCCHGI1,
      WA_BUFFER TYPE STRING, "To convert from 132 to 255
* Variables declarations
      V_FORM_NAME TYPE RS38L_FNAM,
      V_LEN_IN LIKE SOOD-OBJLEN,
      V_LEN_OUT LIKE SOOD-OBJLEN,
      V_LEN_OUTN TYPE I,
      V_LINES_TXT TYPE I,
      V_LINES_BIN TYPE I.

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
  EXPORTING
    FORMNAME           = 'ZTEST'
  IMPORTING
    FM_NAME            = V_FORM_NAME
  EXCEPTIONS
    NO_FORM            = 1
    NO_FUNCTION_MODULE = 2
    OTHERS             3.
IF SY-SUBRC <> 0.
  MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.


W_CTRLOP-GETOTF = 'X'.
W_CTRLOP-NO_DIALOG = 'X'.
W_COMPOP-TDNOPREV = 'X'.


CALL FUNCTION V_FORM_NAME
  EXPORTING
    CONTROL_PARAMETERS = W_CTRLOP
    OUTPUT_OPTIONS     = W_COMPOP
    USER_SETTINGS      = 'X'
  IMPORTING
    JOB_OUTPUT_INFO    = W_RETURN
  EXCEPTIONS
    FORMATTING_ERROR   = 1
    INTERNAL_ERROR     = 2
    SEND_ERROR         = 3
    USER_CANCELED      = 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.
I_OTF[] = W_RETURN-OTFDATA[].
CALL FUNCTION 'CONVERT_OTF'
  EXPORTING
    FORMAT                'PDF'
    MAX_LINEWIDTH         = 132
  IMPORTING
    BIN_FILESIZE          = V_LEN_IN
  TABLES
    OTF                   = I_OTF
    LINES                 = I_TLINE
  EXCEPTIONS
    ERR_MAX_LINEWIDTH     = 1
    ERR_FORMAT            = 2
    ERR_CONV_NOT_POSSIBLE = 3
    OTHERS                4.
IF SY-SUBRC <> 0.
ENDIF.
LOOP AT I_TLINE.
  TRANSLATE I_TLINE USING '~'.
  CONCATENATE WA_BUFFER I_TLINE INTO WA_BUFFER.
ENDLOOP.
TRANSLATE WA_BUFFER USING '~'.
DO.
  I_RECORD = WA_BUFFER.
  APPEND I_RECORD.
  SHIFT WA_BUFFER LEFT BY 255 PLACES.
  IF WA_BUFFER IS INITIAL.
    EXIT.
  ENDIF.
ENDDO.
* Attachment
REFRESH: I_RECLIST,
          I_OBJTXT,
          I_OBJBIN,
          I_OBJPACK.
CLEAR WA_OBJHEAD.
I_OBJBIN[] = I_RECORD[].

* Create Message Body Title and Description
I_OBJTXT = 'test with pdf-Attachment!'.
APPEND I_OBJTXT.
DESCRIBE TABLE I_OBJTXT LINES V_LINES_TXT.
READ TABLE I_OBJTXT INDEX V_LINES_TXT.
WA_DOC_CHNG-OBJ_NAME = 'smartform'.
WA_DOC_CHNG-EXPIRY_DAT = SY-DATUM + 10.
WA_DOC_CHNG-OBJ_DESCR = 'Mail send with PDf attchedment'.
WA_DOC_CHNG-SENSITIVTY = 'F'.
WA_DOC_CHNG-DOC_SIZE = V_LINES_TXT * 255.
* Main Text
CLEAR I_OBJPACK-TRANSF_BIN.
I_OBJPACK-HEAD_START = 1.
I_OBJPACK-HEAD_NUM = 0.
I_OBJPACK-BODY_START = 1.
I_OBJPACK-BODY_NUM = V_LINES_TXT.
I_OBJPACK-DOC_TYPE = 'RAW'.
APPEND I_OBJPACK.


* Attachment (pdf-Attachment)
I_OBJPACK-TRANSF_BIN = 'X'.
I_OBJPACK-HEAD_START = 1.
I_OBJPACK-HEAD_NUM = 0.
I_OBJPACK-BODY_START = 1.
DESCRIBE TABLE I_OBJBIN LINES V_LINES_BIN.
READ TABLE I_OBJBIN INDEX V_LINES_BIN.
I_OBJPACK-DOC_SIZE = V_LINES_BIN * 255 .
I_OBJPACK-BODY_NUM = V_LINES_BIN.
I_OBJPACK-DOC_TYPE = 'PDF'.
I_OBJPACK-OBJ_NAME = 'smart'.
I_OBJPACK-OBJ_DESCR = 'attached pdf'.
APPEND I_OBJPACK.

" email receiver list

CLEAR I_RECLIST.
I_RECLIST-RECEIVER = 'salauddin@gmail.com'.
I_RECLIST-REC_TYPE = 'U'.
APPEND I_RECLIST.

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
  EXPORTING
    DOCUMENT_DATA              = WA_DOC_CHNG
    PUT_IN_OUTBOX              = 'X'
    COMMIT_WORK                = 'X'
  TABLES
    PACKING_LIST               = I_OBJPACK
    OBJECT_HEADER              = WA_OBJHEAD
    CONTENTS_BIN               = I_OBJBIN
    CONTENTS_TXT               = I_OBJTXT
    RECEIVERS                  = I_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.
  WRITE:/ 'Error When Sending the File', SY-SUBRC.
ELSE.
  WRITE:/ 'Mail sent'.
ENDIF.