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

Issue with Email Attachment (PDF) from SAP Program

Former Member
0 Likes
2,331

Hello Experts,

I have wrote a program to send an email with a pdf attachment to external id . The program works fine and sends email to the user id. However, when I try to open the PDF file, I am getting an error: Adobe Reader could not open 'EMAIL TEST.PDF' because it is either not a supported file type or because the file has been damaged (for example, it was sent as an email attachment and wasn't correctly decoded).

Can anybody please let me know what is the issue?

Thanks a lot for your help!

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,899

Ofcourse, the pdf file is corrupted so just check whether you are creating the file properly or not(Source internal table..restructuring of the internal table contents line by line). A flimsy reply but just a starting hint..

Hello Experts,

I have wrote a program to send an email with a pdf attachment to external id . The program works fine and sends email to the user id. However, when I try to open the PDF file, I am getting an error: Adobe Reader could not open 'EMAIL TEST.PDF' because it is either not a supported file type or because the file has been damaged (for example, it was sent as an email attachment and wasn't correctly decoded).

Can anybody please let me know what is the issue?

Thanks a lot for your help!

8 REPLIES 8
Read only

Former Member
0 Likes
1,900

Ofcourse, the pdf file is corrupted so just check whether you are creating the file properly or not(Source internal table..restructuring of the internal table contents line by line). A flimsy reply but just a starting hint..

Read only

0 Likes
1,899

Thanks Amiya,

I am just converting the spool to pdf. I think the issue is with 'sending of email'. If I post the code, will you be able to figure out the issue?

Thanks.

Read only

0 Likes
1,899

I had similar problems when sending pdf in mail but I managed to solve it. Well, just post the coding and have SDN'ers have a look.

Read only

0 Likes
1,899

Here's the Program Code:

REPORT ZVTEST73  no standard page heading
                            line-count 65
                            line-size 165
                            message-id zxx.


*&-- Table declarations
tables: tbtcm,                              "Run-time info on batch job
        tbtcp,                              "Batch job step overview
        tsp01.                              "Spool Requests

*&-- Types
*-- For Spool Requests
types: begin of t_tbtcp.
        include structure tbtcp.
types: end of t_tbtcp.

data: i_tbtcp type standard table of t_tbtcp initial size 0,
      wa_tbtcp type t_tbtcp.


*-- Name of attachment
constants: g_attach_title type so_obj_des value 'TEST'
.

*&-- Variables
*-- Variables for Background Job
data: g_eventid like tbtcm-eventid,         "event ID
      g_eventparm like tbtcm-eventparm,     "event parameter
      g_xpflag like tbtcm-xpgactive,        "flag for ext. prog.
      g_jobcount like tbtcm-jobcount,       "job number
      g_jobname like tbtcm-jobname,         "jobname
      g_stepcount like tbtcm-stepcount,     "step ID number
      print_parms like pri_params,          "print parameters
      valid type c,                         "flag
      g_jobrel like btch0000-char1.         "flag for job release

*-- Variables for Spool
data: g_spoolid like tsp01-rqident,         "Spool id
      g_no_bytes type i,                    "No of bytes
      g_pdf_spoolid like tsp01-rqident.     "PDF spool id

*-- Variables for Email
data: g_attach_name type so_obj_des,        "Description of attachment
      g_sender_type like soextreci1-adr_typ,"Sender type
      w_doc_data like sodocchgi1,           "attachment data
      w_sent_all like sonv-flag,            "Sent to all Flag
      w_cnt type i.


*&-- Ranges


*&-- Internal tables
*-- Memory List
data: i_listobject like abaplist occurs 0 with header line.

*-- Spool List
data: i_listasci(100) type c occurs 0 with  header line.

*-- PDF Internal table
data: i_pdf like tline occurs 100 with header line.
*-- Email Description
data: i_mess_bod like solisti1 occurs 0 with header line.

*-- Packing List
data: i_packing_list like sopcklsti1 occurs 0 with header line.

*-- Attachment Name
data: i_objhead like solisti1 occurs 0 with header line.

*-- Contents of Email
data: i_contents like solisti1 occurs 0 with header line.

*-- Message of Email
data: i_message like solisti1 occurs 0 with header line.

*-- Recievers List
data: i_receivers like somlreci1 occurs 5 with header line.

*----------------------------------------------------------------------*
*  SELECTION-SCREEN DEFINITION
*----------------------------------------------------------------------*

*-- Data selection.
selection-screen begin of block b1 with frame title text-001.
parameters: p_email(42) type c,
            p_bemail(42) type c.
selection-screen end of block b1.
*----------------------------------------------------------------------*
*  AT SELECTION-SCREEN VALIDATIONS
*----------------------------------------------------------------------*
at selection-screen.


*----------------------------------------------------------------------*
*  INITIALIZATION
*----------------------------------------------------------------------*
initialization.


*----------------------------------------------------------------------*
*  START-OF-SELECTION
*----------------------------------------------------------------------*
start-of-selection.

*-- Get the Spool from the List
  perform get_spool_from_list.

*-- convert spool to pdf
  perform convert_spool_to_pdf.

*-- Compress Data
  perform compress_table.

*-- Brief Description with attachment in email
  i_mess_bod = 'This Email is to Notify TEST Calculations'.
  append i_mess_bod.

*-- Set Sender Type
  g_sender_type = 'INT'.

*-- Send Email
  perform send_email
              tables i_mess_bod
               using p_email
                     'Test Calculations'
                     'PDF'
                     g_attach_title
                     g_attach_name
                     g_sender_type.

*&---------------------------------------------------------------------*
*&      Form  get_spool_from_list
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
form get_spool_from_list.

  g_jobname = 'ZTEST'.

  select * from tbtcp
           into table i_tbtcp
          where jobname  = g_jobname
            and progname = g_jobname
*            and sdldate  = sy-datum
            order by jobname
                     jobcount.

    read table i_tbtcp into wa_tbtcp index 1.
    if sy-subrc = 0.
      g_spoolid = wa_tbtcp-listident.
    endif.


endform.                    "get_spool_from_list
*&---------------------------------------------------------------------*
*&      Form  convert_spool_to_pdf
*&---------------------------------------------------------------------*
*       convert spool id to pdf
*----------------------------------------------------------------------*
form convert_spool_to_pdf.

  call function 'CONVERT_ABAPSPOOLJOB_2_PDF'
    exporting
      src_spoolid              = g_spoolid
      no_dialog                = ' '
*       dst_device             =
*       pdf_destination        =
    importing
      pdf_bytecount            = g_no_bytes
      pdf_spoolid              = g_pdf_spoolid
*       list_pagecount         =
      btc_jobname              = g_jobname
      btc_jobcount             = g_jobcount
    tables
      pdf                      = i_pdf
    exceptions
      err_no_abap_spooljob     = 1
      err_no_spooljob          = 2
      err_no_permission        = 3
      err_conv_not_possible    = 4
      err_bad_destdevice       = 5
      user_cancelled           = 6
      err_spoolerror           = 7
      err_temseerror           = 8
      err_btcjob_open_failed   = 9
      err_btcjob_submit_failed = 10
      err_btcjob_close_failed  = 11
      otehrs                   = 12
              .
endform.                    "convert_spool_to_pdf
*&---------------------------------------------------------------------*
*&      Form  send_email
*&---------------------------------------------------------------------*
*       Send Email
*----------------------------------------------------------------------*
form send_email tables i_mess_bod
                 using f_email
                       f_email_title
                       f_format
                       f_title
                       f_attach_name
                       f_sender_type.

*--  Populate the subject/generic message attributes
  clear w_doc_data.
  read table i_message index w_cnt.
  w_doc_data-obj_name   = 'ZVTEST73'.
  w_doc_data-obj_descr  = f_title .
  w_doc_data-obj_langu  = sy-langu.
  w_doc_data-sensitivty = 'F'.
  w_doc_data-doc_size   = ( w_cnt - 1 ) * 255 + strlen( i_message ).

*-- Body of the message
  clear: i_packing_list.
  refresh: i_packing_list.
  i_packing_list-transf_bin = space.
  i_packing_list-head_start   = 1.
  i_packing_list-head_num     = 0.
  i_packing_list-body_start   = 1.
  describe table i_message lines i_packing_list-body_num.
  i_packing_list-doc_type     = 'RAW'.
  i_packing_list-obj_langu    = sy-langu.
  append i_packing_list.

*-- Attachment Details
  i_packing_list-transf_bin = 'X'.
  i_packing_list-head_start   = 1.
  i_packing_list-head_num     = 1.
  i_packing_list-body_start   = 1.
  describe table i_contents lines i_packing_list-body_num.
  i_packing_list-doc_type     = f_format.
  i_packing_list-obj_name     = 'ZVTEST73'.
  i_packing_list-obj_descr    = f_title.
  i_packing_list-obj_langu    = sy-langu.
  i_packing_list-doc_size     = i_packing_list-body_num * 255.
  append i_packing_list.

*-- Object Header
  i_objhead = f_title.
  append i_objhead.

*-- Contents of Attachment
  clear i_contents.
  refresh i_contents.
  i_contents[] = i_pdf[].

*-- Contents of Description Details
  clear i_message.
  i_message[] = i_mess_bod[].

*-- Add recievers to recipients list for email
  clear i_receivers .
  refresh i_receivers.
  i_receivers-receiver = p_email.
  i_receivers-rec_type = 'U'.
  i_receivers-com_type = 'INT'.
  append i_receivers.

  call function 'SO_NEW_DOCUMENT_ATT_SEND_API1'
    exporting
      document_data              = w_doc_data
*     put_in_outbox              = ' '
*     sender_address             =
      sender_address_type        = f_sender_type
      commit_work                = 'X'
*   importing
*     sent_to_all                = w_sent_all
*     new_object_id              =
*     sender_id                  =
    tables
      packing_list               = i_packing_list
      object_header              = i_objhead
      contents_bin               = i_contents
      contents_txt               = i_message
*      contents_hex               =
*      object_para                =
*      object_parb                =
      receivers                  = i_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.

endform.                    "send_email

Read only

0 Likes
1,899

Hi Micky,

I have tried testing only the 'converting spool to pdf' part and downloaded the PDF File. And this works perfect. I think there is the issue with the "Email". Can you please let me know if you find any issue with this functionality? I really appreciate your help! Thanks a ton.

Read only

0 Likes
1,899

Sam,

I made a few minor changes to your report and now it's just working fine for me. Changes are highlighted.

1. FORM COMPRESS_TABLE was not part of the coding you sent me??? So I commented the PERFORM.

2. The parameter sender_address_type is something I don't have in my SAP NW Version, so left that one out.

3. I added a part for converting i_pdf data.

4. I moved the part of the packing list for the attachment. I moved it down, since in the previous place the table was still empty, so the DESCRIBE was no good.

5. That was just about it, I hope. Formatting still needs to be done since it is kind of messed up in this SDN editor.


REPORT zzz_test3  NO STANDARD PAGE HEADING
                            LINE-COUNT 65
                            LINE-SIZE 165
                            MESSAGE-ID zxx.


*&-- Table declarations
TABLES: tbtcm,                              "Run-time info on batch job
        tbtcp,                              "Batch job step overview
        tsp01.                              "Spool Requests

*&-- Types
*-- For Spool Requests
TYPES: BEGIN OF t_tbtcp.
        INCLUDE STRUCTURE tbtcp.
TYPES: END OF t_tbtcp.

DATA: i_tbtcp TYPE STANDARD TABLE OF t_tbtcp INITIAL SIZE 0,
      wa_tbtcp TYPE t_tbtcp.


*-- Name of attachment
CONSTANTS: g_attach_title TYPE so_obj_des VALUE 'TEST'
.

*&-- Variables
*-- Variables for Background Job
DATA: g_eventid LIKE tbtcm-eventid,         "event ID
      g_eventparm LIKE tbtcm-eventparm,     "event parameter
      g_xpflag LIKE tbtcm-xpgactive,        "flag for ext. prog.
      g_jobcount LIKE tbtcm-jobcount,       "job number
      g_jobname LIKE tbtcm-jobname,         "jobname
      g_stepcount LIKE tbtcm-stepcount,     "step ID number
      print_parms LIKE pri_params,          "print parameters
      valid TYPE c,                         "flag
      g_jobrel LIKE btch0000-char1.         "flag for job release

*-- Variables for Spool
DATA: g_spoolid LIKE tsp01-rqident,         "Spool id
      g_no_bytes TYPE i,                    "No of bytes
      g_pdf_spoolid LIKE tsp01-rqident.     "PDF spool id

*-- Variables for Email
DATA: g_attach_name TYPE so_obj_des,        "Description of attachment
      g_sender_type LIKE soextreci1-adr_typ,"Sender type
      w_doc_data LIKE sodocchgi1,           "attachment data
      w_sent_all LIKE sonv-flag,            "Sent to all Flag
      w_cnt TYPE i.


*&-- Ranges


*&-- Internal tables
*-- Memory List
DATA: i_listobject LIKE abaplist OCCURS 0 WITH HEADER LINE.

*-- Spool List
DATA: i_listasci(100) TYPE c OCCURS 0 WITH  HEADER LINE.

*-- PDF Internal table
DATA: i_pdf LIKE tline OCCURS 100 WITH HEADER LINE.

*DATA:     w_record     TYPE solisti1,*
          *w_buffer     TYPE string. "To convert from 132 to 255*

*DATA: i_record     TYPE TABLE OF solisti1.*

*-- Email Description
DATA: i_mess_bod LIKE solisti1 OCCURS 0 WITH HEADER LINE.

*-- Packing List
DATA: i_packing_list LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE.

*-- Attachment Name
DATA: i_objhead LIKE solisti1 OCCURS 0 WITH HEADER LINE.

*-- Contents of Email
DATA: i_contents LIKE solisti1 OCCURS 0 WITH HEADER LINE.

*-- Message of Email
DATA: i_message LIKE solisti1 OCCURS 0 WITH HEADER LINE.

*-- Recievers List
DATA: i_receivers LIKE somlreci1 OCCURS 5 WITH HEADER LINE.

*----------------------------------------------------------------------*
*  SELECTION-SCREEN DEFINITION
*----------------------------------------------------------------------*

*-- Data selection.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: p_email(42) TYPE c,
            p_bemail(42) TYPE c.
SELECTION-SCREEN END OF BLOCK b1.
*----------------------------------------------------------------------*
*  AT SELECTION-SCREEN VALIDATIONS
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.


*----------------------------------------------------------------------*
*  INITIALIZATION
*----------------------------------------------------------------------*
INITIALIZATION.


*----------------------------------------------------------------------*
*  START-OF-SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.

*-- Get the Spool from the List
  PERFORM get_spool_from_list.

*-- convert spool to pdf
  PERFORM convert_spool_to_pdf.

***-- Compress Data*
**  perform compress_table.*

*-- Brief Description with attachment in email
  i_mess_bod = 'This Email is to Notify TEST Calculations'.
  APPEND i_mess_bod.

**-- Set Sender Type*
  *g_sender_type = 'U'.*  "Sender type INT, gave an error in my system, NOT known, so you might want to use it as 'INT' again.

*-- Send Email
  PERFORM send_email
              TABLES i_mess_bod
               USING p_email
                     'Test Calculations'
                     'PDF'
                     g_attach_title
                     g_attach_name
                     g_sender_type.

*&---------------------------------------------------------------------*
*&      Form  get_spool_from_list
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM get_spool_from_list.

  g_jobname = 'ZZ_Y2B_TEST'.

  SELECT * FROM tbtcp
           INTO TABLE i_tbtcp
          WHERE jobname  = g_jobname
            AND progname = g_jobname
*            and sdldate  = sy-datum
            ORDER BY jobname
                     jobcount.

  READ TABLE i_tbtcp INTO wa_tbtcp INDEX 1.
  IF sy-subrc = 0.
    g_spoolid = wa_tbtcp-listident.
  ENDIF.


ENDFORM.                    "get_spool_from_list
*&---------------------------------------------------------------------*
*&      Form  convert_spool_to_pdf
*&---------------------------------------------------------------------*
*       convert spool id to pdf
*----------------------------------------------------------------------*
FORM convert_spool_to_pdf.

  CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
    EXPORTING
      src_spoolid              = g_spoolid
      no_dialog                = ' '
*       dst_device             =
*       pdf_destination        =
    IMPORTING
      pdf_bytecount            = g_no_bytes
      pdf_spoolid              = g_pdf_spoolid
*       list_pagecount         =
      btc_jobname              = g_jobname
      btc_jobcount             = g_jobcount
    TABLES
      pdf                      = i_pdf
    EXCEPTIONS
      err_no_abap_spooljob     = 1
      err_no_spooljob          = 2
      err_no_permission        = 3
      err_conv_not_possible    = 4
      err_bad_destdevice       = 5
      user_cancelled           = 6
      err_spoolerror           = 7
      err_temseerror           = 8
      err_btcjob_open_failed   = 9
      err_btcjob_submit_failed = 10
      err_btcjob_close_failed  = 11
      others                   = 12
              .
ENDFORM.                    "convert_spool_to_pdf
*&---------------------------------------------------------------------*
*&      Form  send_email
*&---------------------------------------------------------------------*
*       Send Email
*----------------------------------------------------------------------*
FORM send_email TABLES i_mess_bod
                 USING f_email
                       f_email_title
                       f_format
                       f_title
                       f_attach_name
                       f_sender_type.

*--  Populate the subject/generic message attributes
  CLEAR w_doc_data.
  READ TABLE i_message INDEX w_cnt.
  w_doc_data-obj_name   = 'ZVTEST73'.
  w_doc_data-obj_descr  = f_title .
  w_doc_data-obj_langu  = sy-langu.
  w_doc_data-sensitivty = 'F'.
  w_doc_data-doc_size   = ( w_cnt - 1 ) * 255 + STRLEN( i_message ).

*-- Body of the message
  CLEAR: i_packing_list.
  REFRESH: i_packing_list.
  i_packing_list-transf_bin = space.
  i_packing_list-head_start   = 1.
  i_packing_list-head_num     = 0.
  i_packing_list-body_start   = 1.
  DESCRIBE TABLE i_message LINES i_packing_list-body_num.
  i_packing_list-doc_type     = 'RAW'.
  i_packing_list-obj_langu    = sy-langu.
  APPEND i_packing_list.

* This part was moved down since contents table is still empty here!!!!
***-- Attachment Details*
**  i_packing_list-transf_bin = 'X'.*
**  i_packing_list-head_start   = 1.*
**  i_packing_list-head_num     = 1.*
**  i_packing_list-body_start   = 1.*
**  DESCRIBE TABLE i_contents LINES i_packing_list-body_num.*
**  i_packing_list-doc_type     = f_format.*
**  i_packing_list-obj_name     = 'ZVTEST73'.*
**  i_packing_list-obj_descr    = f_title.*
**  i_packing_list-obj_langu    = sy-langu.*
**  i_packing_list-doc_size     = i_packing_list-body_num * 255.*
**  APPEND i_packing_list.*

*-- Object Header
  i_objhead = f_title.
  APPEND i_objhead.

*-- Contents of Attachment
  CLEAR i_contents.
  REFRESH i_contents.


******** Here is the part I added.
** Convert PDF from 132 to 255.*
  *LOOP AT i_pdf.*
** Replacing space by ~*
    *TRANSLATE i_pdf USING ' ~'.*
    *CONCATENATE w_buffer i_pdf INTO w_buffer.*
  *ENDLOOP.*
** Replacing ~ by space*
  *TRANSLATE w_buffer USING '~ '.*

  *DO.*
    *w_record = w_buffer.*
**   Appending 255 characters as a record*
    *APPEND w_record TO i_record.*
    *SHIFT w_buffer LEFT BY 255 PLACES.*
    *IF w_buffer IS INITIAL.*
      *EXIT.*
    *ENDIF.*
  *ENDDO.*

  *i_contents[] = i_record[].*

**-- Attachment Details*
  *i_packing_list-transf_bin = 'X'.*
  *i_packing_list-head_start   = 1.*
  *i_packing_list-head_num     = 1.*
  *i_packing_list-body_start   = 1.*
  *DESCRIBE TABLE i_contents LINES i_packing_list-body_num.*
  *i_packing_list-doc_type     = f_format.*
  *i_packing_list-obj_name     = 'ZVTEST73'.*
  *i_packing_list-obj_descr    = f_title.*
  *i_packing_list-obj_langu    = sy-langu.*
  *i_packing_list-doc_size     = i_packing_list-body_num * 255.*
  *APPEND i_packing_list.*

** i_contents[] = i_pdf[].*
********

*-- Contents of Description Details
  CLEAR i_message.
  i_message[] = i_mess_bod[].

*-- Add recievers to recipients list for email
  CLEAR i_receivers .
  REFRESH i_receivers.
  i_receivers-receiver = p_email.
  i_receivers-rec_type = 'U'.
  i_receivers-com_type = 'INT'.
  APPEND i_receivers.

  CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
    EXPORTING
      document_data              = w_doc_data
      put_in_outbox              = 'X'
*     sender_address             =
*      sender_address_type        = f_sender_type
      commit_work                = 'X'
*   importing
*     sent_to_all                = w_sent_all
*     new_object_id              =
*     sender_id                  =
    TABLES
      packing_list               = i_packing_list
      object_header              = i_objhead
      contents_bin               = i_contents
      contents_txt               = i_message
*      contents_hex               =
*      object_para                =
*      object_parb                =
      receivers                  = i_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.

ENDFORM.                    "send_email

Edited by: Micky Oestreich on Apr 25, 2008 12:04 AM

Read only

0 Likes
1,899

GREAT!!!! That worked perfectly!!!

Thanks a lot, Micky.

Read only

Former Member
0 Likes
1,899

check for my post in

G@urav.