Skip to Content
author's profile photo Former Member
Former Member

Sending mail different vendors

Hi All,

There is a company that has a sap standard report to send(using email) a pdf file to multiple vendors and there are more than 60 vendors on that pdf file. It's one pdf file with more than 60 vendors so the problem is this document must be divided into a number of vendors available on that file so the email must send more than 60 emails to more than 60 vendors and each vendor must receive an email about his/her own information.

In short the email must sent more than 60 mails separately each vendor receiving it own information. May you please help me out on this one.

Regards,

Fred.

Add a comment
10|10000 characters needed characters exceeded

Assigned Tags

Related questions

2 Answers

  • author's profile photo Former Member
    Former Member
    Posted on Nov 20, 2007 at 12:04 PM

    Hi Fred,

    You can do like this

    Loop at data_tab.

    • At each loop take one vendor and his details.

    Use function module SO_DOCUMENT_SEND_API1

    Pass Content_txt with vendor details.

    Pass receivers with single vendor.

    Endloop.

    Hope this will help you.

    Reward if this helps,

    Satish

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Nov 20, 2007 at 12:12 PM

    Hi Fred,

    First u store the vendor's data in an int table.(say ITAB)

    2nd u separately store all the vendors email address in other int table.(say it_mail).

    (lifnr, email_id)

    Then

    Loop at it_mail.

    loop at itab where lifnr = it_mail-lifnr.

    *******************structure ur mail body content***********

    *************

    *************

    *************

    append t_mail_text.

    endloop.

    CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'

    EXPORTING

    document_data = doc_chng

    put_in_outbox = 'X'

    commit_work = 'X'

    TABLES

    object_content = t_mail_txt

    receivers = reclist

    EXCEPTIONS

    too_many_receivers = 1

    document_not_sent = 2

    operation_no_authorization = 4

    OTHERS = 99.

    IF sy-subrc EQ 0.

    COMMIT WORK.

    ENDIF.

    CLEAR reclist.

    REFRESH reclist.

    CLEAR it_mail.

    endloop.

    I think it will work fine.

    If it is helpfull reward pts pls.

    Regards

    srimanta

    Add a comment
    10|10000 characters needed characters exceeded

    • Former Member

      May you please check this coding and tell me where have i gone wrong? because it can send email 90 pages to specified mails so i need to send e-mail to vendors on the pdf file separately each vendor receiving his own page. this means 90 pages must be send separately to each vendor.

      ************************************************************************

      • *

      • Überweisungsträgerprogramm RFFOZA_A (Südafrika) *

      • Program for bank transfer RFFOZA_A (South Africa) *

      • *

      ************************************************************************

      *----


      *

      • Das Programm includiert: *

      • *

      • RFFORI0M Makrodefinition für den Selektionsbildaufbau *

      • RFFORI00 Deklarationsteil der Zahlungsträger-Druckprogramme *

      • RFFORIZ8 Datenträgeraustausch Inland - ACB Format für ZA *

      • RFFORI06 Avis *

      • RFFORI07 Zahlungsbegleitliste *

      • RFFORI99 Allgemeine Unterroutinen der Zahlungsträger-Druckprogramme *

      *----


      *

      • The program includes: *

      • *

      • RFFORI0M Definition of macros *

      • RFFORI00 international data definitions *

      • ZFFORIZ8 inland transfer (DME) : ACB format for ZA *

      • this was RFFORIZ8 *

      • RFFORI06 remittance advice *

      • RFFORI07 payment summary list *

      • RFFORI99 international subroutines *

      *----


      *

      *----


      *

      • Report Header *

      *----


      *

      report rffoza_a

      line-size 132

      message-id f0

      no standard page heading.

      *----


      *

      • Segments *

      *----


      *

      tables:

      reguh,

      regup,

      thoci.

      *----


      *

      • Makrodefinitionen *

      *----


      *

      include rffori0m.

      initialization.

      *----


      *

      • Parameters / Select-Options *

      *----


      *

      block 1.

      select-options:

      sel_zawe for reguh-rzawe, "Zahlwege / payment methods

      sel_uzaw for reguh-uzawe, "Zahlwegzusatz

      sel_hbki for reguh-hbkid, "house bank short key

      sel_hkti for reguh-hktid, "account data short key

      sel_vbln for reguh-vblnr. "payment document number

      selection-screen end of block 1.

      block 2.

      auswahl: xdta w, avis a, begl b.

      spool_authority. "Spoolberechtigung

      selection-screen end of block 2.

      block 3.

      parameters:

      par_unix like rfpdo2-fordnamd, "file name

      par_dtyp like rfpdo-forddtyp, "output medium

      par_anzp like rfpdo-fordanzp, "number of test prints

      par_maxp like rfpdo-fordmaxp, "number of items in summary list

      par_belp like rfpdo-fordbelp, "payment doc. validation

      par_espr like rfpdo-fordespr. "texts in recipient's lang.

      selection-screen end of block 3.

      block 4.

      parameters:

      par_inid like rfpdo2-fordinid obligatory, "Installation Id

      par_usid like rfpdo2-fordusid obligatory, "User Id

      • PAR_SERV LIKE RFPDO2-FORDSERV OBLIGATORY, "Type of service

      par_usre like rfpdo2-fordusre obligatory, "User Reference

      par_nacc like rfpdo2-fordnacc obligatory, "Nominated Account Name

      par_cale like thoci-ident obligatory, "Bank Calender

      par_acdt like reguh-zaldt, "Action date put into ACB file

      par_test like rfpdo1-allgtest, "Generate tape for ACB to test

      par_geno(4) type n. "Generation Number note #310776

      selection-screen end of block 4.

      parameters:

      par_zdru like rfpdo-fordzdru no-display,

      par_priz like rfpdo-fordpriz no-display,

      par_sofz like rfpdo1-fordsofz no-display,

      par_isoc like rfpdo-fordisoc no-display,

      par_vari(12) type c no-display,

      par_sofo(1) type c no-display.

      block 5.

      • SELECTION-SCREEN BEGIN OF LINE.

      • SELECTION-SCREEN COMMENT 10(25) TEXT-069 FOR FIELD P_HUMRS.

      parameters: p_humrs like rfpdo1-allgtest.

      • SELECTION-SCREEN END OF LINE.

      selection-screen end of block 5.

      *----


      *

      • Vorbelegung der Parameter und Select-Options *

      • default values for parameters and select-options *

      *----


      *

      perform init.

      sel_zawe-low = 'A'.

      sel_zawe-option = 'EQ'.

      sel_zawe-sign = 'I'.

      append sel_zawe.

      par_belp = space.

      par_zdru = space.

      par_xdta = 'X'.

      par_dtyp = '1'.

      par_avis = 'X'.

      par_begl = 'X'.

      par_anzp = 2.

      par_espr = space.

      par_isoc = space.

      par_maxp = 9999.

      • PAR_SERV = '5'.

      *----


      *

      • tables / fields / field-groups / at selection-screen *

      *----


      *

      include zffori00.

      *- special checks for South African ACB----

      -


      at selection-screen on zw_zbukr.

      describe table zw_zbukr lines sy-tfill.

      if sy-tfill ne 1.

      message e405.

      else.

      if zw_zbukr-option ne 'EQ' or zw_zbukr-sign ne 'I'.

      message e405.

      endif.

      endif.

      *AT SELECTION-SCREEN ON PAR_SERV.

      • IF PAR_SERV NA '0125'. "ACB service = immediate, 1,2 day and 5 day

      • MESSAGE E186 WITH '0, 1, 2, 5'.

      • ENDIF.

      at selection-screen on par_usre.

      data: up_char.

      perform dta_text_aufbereiten using par_usre.

      if par_usre cn 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./-&,() '.

      up_char = par_usre+sy-fdpos(1).

      message e406 with up_char.

      endif.

      at selection-screen on par_nacc.

      data: up_char.

      perform dta_text_aufbereiten using par_nacc.

      if par_nacc cn 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./-&,() '.

      up_char = par_nacc+sy-fdpos(1).

      message e406 with up_char.

      endif.

      at selection-screen on par_cale.

      select single * from thoci where ident eq par_cale.

      if sy-subrc ne 0.

      message e407.

      endif.

      at selection-screen on par_dtyp.

      if par_dtyp na '01'.

      set cursor field 'PAR_DTYP'.

      message e068.

      endif.

      *----


      *

      • Kopfzeilen (nur bei der Zahlungsbegleitliste) *

      • batch heading (for the payment summary list) *

      *----


      *

      top-of-page.

      if flg_begleitl eq 1.

      perform kopf_zeilen. "RFFORI07

      endif.

      *----


      *

      • Felder vorbelegen *

      • preparations *

      *----


      *

      start-of-selection.

      hlp_temse = '0----

      -


      '. "Reportspezif. TemSe-Parameter

      perform vorbereitung.

      *----


      *

      • Daten prüfen und extrahieren *

      • check and extract data *

      *----


      *

      get reguh.

      check sel_zawe.

      check sel_uzaw.

      check sel_hbki.

      check sel_hkti.

      check sel_vbln.

      perform pruefung.

      perform extract_vorbereitung.

      get regup.

      perform extract.

      *----


      *

      • Bearbeitung der extrahierten Daten *

      • print DME, remittance advices and lists *

      *----


      *

      end-of-selection.

      if flg_selektiert ne 0.

      if par_xdta eq 'X'.

      perform dta_inland. "RFFORIZ8

      endif.

      if par_avis eq 'X'.

      perform avis. "RFFORI06

      *>> MN Cele

      perform convert_to_pdf.

      perform send_mail.

      *<< MN Cele

      endif.

      if par_begl eq 'X' and par_maxp gt 0.

      flg_bankinfo = 2.

      perform begleitliste. "RFFORI07

      endif.

      endif.

      perform fehlermeldungen.

      perform information.

      *----


      *

      • Unterprogramm Datenträgeraustausch Inland (Band) *

      • subroutine for DME inland (tape) *

      *----


      *

      include zfforiz8.

      *----


      *

      • Unterprogramm Avis ohne Allongeteil *

      • subroutine for remittance advices *

      *----


      *

      • include rffori06.

      include zrffori06.

      *----


      *

      • Unterprogramm Begleitliste *

      • subroutine for the summary list *

      *----


      *

      include rffori07.

      *----


      *

      • Allgemeine Unterprogramme *

      • international subroutines *

      *----


      *

      include rffori99.

      *&----


      *

      *& Form convert_to_pdf

      *&----


      *

      • text

      *----


      *

      • --> p1 text

      • <-- p2 text

      *----


      *

      form convert_to_pdf.

      data: lv_spool_no type tsp01-rqident.

      data: lwa_spoolrequests type rsporq.

      data: lt_spoolrequests type table of rsporq.

      data: lv_numbytes type i,

      lv_pdfspoolid like tsp01-rqident,

      lv_jobname like tbtcjob-jobname,

      lv_jobcount like tbtcjob-jobcount,

      lv_spoolid type tsp01_sp0r-rqid_char.

      call function 'RSPO_FIND_SPOOL_REQUESTS'

      exporting

      allclients = sy-mandt

      • AUTHORITY = ' '

      • DATATYPE = '*'

      • HAS_OUTPUT_REQUESTS = '*'

      • RQ0NAME = '*'

      • RQ1NAME = '*'

      • RQ2NAME = '*'

      • RQDEST = '*'

      • RQIDENT = 0

      rqowner = sy-uname

      tables

      spoolrequests = lt_spoolrequests

      • EXCEPTIONS

      • NO_PERMISSION = 1

      • OTHERS = 2

      .

      • if sy-subrc <> 0.

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

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

      • endif.

      *Only read the latest spool number and make sure it is for the customer statement.

      sort lt_spoolrequests descending.

      delete lt_spoolrequests from 2.

      delete lt_spoolrequests where rqtitle <> 'Payment advices'.

      loop at lt_spoolrequests into lwa_spoolrequests.

      lv_spool_no = lwa_spoolrequests-rqident.

      lv_spoolid = lwa_spoolrequests-rqident.

      endloop.

      clear: it_pdf,

      wa_doc_chng,

      i_objtxt,

      i_objpack,

      i_reclist.

      refresh: it_pdf,

      i_objtxt,

      i_objpack,

      i_reclist,

      i_objbin.

      lv_numbytes = 0.

      call function 'CONVERT_OTFSPOOLJOB_2_PDF'

      exporting

      src_spoolid = lv_spool_no

      no_dialog = space

      • DST_DEVICE =

      • PDF_DESTINATION =

      importing

      pdf_bytecount = lv_numbytes

      pdf_spoolid = lv_pdfspoolid

      • otf_pagecount =

      btc_jobname = lv_jobname

      btc_jobcount = lv_jobcount

      tables

      pdf = it_pdf

      exceptions

      err_no_otf_spooljob = 1

      err_no_spooljob = 2

      err_no_permission = 3

      err_conv_not_possible = 4

      err_bad_dstdevice = 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.

      wf_numbytes = lv_numbytes.

      if sy-subrc <> 0.

      case sy-subrc.

      when 1.

      message i000(z001).

      exit.

      when 2.

      message i001(z001).

      exit.

      when 3.

      message i002(z001).

      exit.

      when others.

      message i003(z001).

      exit.

      endcase.

      endif.

      call function 'RSPO_R_RDELETE_SPOOLREQ'

      exporting

      spoolid = lv_spoolid

      • IMPORTING

      • RC =

      • STATUS =

      .

      • Transfer the contents of itpdf into the objbin table, so that we have

      • the PDF data in a format ready to be attached to an email.

      • First, move the contents of ITPDF into a long string.

      • Cannot use the concatenate statement here, as trailing spaces are

      • ignored, and the trailing spaces within ITPDF are necessary !!

      istringcounter = 0.

      irecordcounter = 0.

      flag_continue_looping = 'yes'.

      while flag_continue_looping = 'yes'.

      loop at it_pdf from irecordcounter.

      sitpdfstring = it_pdf-tdformat.

      sitpdfstring+2 = it_pdf-tdline.

      clongstring+istringcounter = sitpdfstring.

      istringcounter = istringcounter + 134.

      if istringcounter >= 65526.

      concatenate clongstring '%%EOF' into clongstring.

      flag_continue_looping = 'yes'.

      istringcounter = 0.

      irecordcounter = sy-tabix + 1.

      exit.

      else.

      flag_continue_looping = 'no'.

      endif.

      endloop.

      • Now that we have one long string, we can split it up into

      • the 255 character pieces, and assign them to OBJBIN table

      istartposition = 0.

      iendofstring = 0.

      while iendofstring = 0 and istartposition < 65526.

      • There is an EOF Marker in the file, so we will loop until that

      • marker is found

      search clongstring for '%%EOF' starting at istartposition.

      iremaininglength = 65531 - istartposition.

      if sy-subrc = 0 and sy-fdpos <= 255. " End of string is in site

      iendofstring = sy-fdpos + 5. " Position of end of string marker

      if iendofstring > iremaininglength.

      i_objbin-line = clongstring+istartposition(iremaininglength).

      else.

      i_objbin-line = clongstring+istartposition(iendofstring).

      endif.

      else.

      i_objbin-line = clongstring+istartposition(255).

      endif.

      append i_objbin.

      • Increment the start position so that the next segment can be obtained.

      istartposition = istartposition + 255.

      endwhile.

      endwhile.

      • Create Message Body

    • Title and Description

    • i_objtxt = 'Payment advice'.

      append i_objtxt.

      describe table i_record lines v_lines_txt.

      read table i_objtxt index v_lines_txt.

      wa_doc_chng-obj_name = 'SAPSCRIPT'.

      wa_doc_chng-obj_langu = sy-langu.

      wa_doc_chng-obj_descr = 'Payment advice'.

      wa_doc_chng-expiry_dat = sy-datum + 10.

      wa_doc_chng-sensitivty = 'F'.

      wa_doc_chng-doc_size =

      ( v_lines_txt - 1 ) * 255 + strlen( i_record ).

      • Describe the body of the message

      clear i_objpack.

      refresh i_objpack.

      i_objpack-transf_bin = space.

      i_objpack-head_start = 1.

      i_objpack-head_num = 0.

      i_objpack-body_start = 1.

      describe table i_objtxt lines i_objpack-body_num.

      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 = 1.

      i_objpack-body_start = 1.

      describe table i_objbin lines i_objpack-body_num.

      i_objpack-doc_type = 'PDF'.

      i_objpack-obj_descr = 'Payment advice'.

      i_objpack-obj_name = 'SAPSCRIPT'.

      i_objpack-doc_size = i_objpack-body_num * 255.

      append i_objpack.

      • Add the recipients email address

      clear i_reclist.

      refresh i_reclist.

      • i_reclist-receiver = icust-smtp_addr.

      i_reclist-receiver = 'fred.mogaadile@bcx.co.za'.

      i_reclist-rec_type = 'U'.

      i_reclist-com_type = 'INT'.

      i_reclist-notif_del = 'X'.

      i_reclist-notif_ndel = 'X'.

      append i_reclist.

      ************Fred edited*******************************

      clear i_reclist.

      refresh i_reclist.

      • i_reclist-receiver = icust-smtp_addr.

      i_reclist-receiver = 'mogaadilefm@yahoo.com'.

      i_reclist-rec_type = 'U'.

      i_reclist-com_type = 'INT'.

      i_reclist-notif_del = 'X'.

      i_reclist-notif_ndel = 'X'.

      append i_reclist.

      clear i_reclist.

      refresh i_reclist.

      • i_reclist-receiver = icust-smtp_addr.

      i_reclist-receiver = 'mathews.cele@bcx.co.za'.

      i_reclist-rec_type = 'U'.

      i_reclist-com_type = 'INT'.

      i_reclist-notif_del = 'X'.

      i_reclist-notif_ndel = 'X'.

      append i_reclist.

      clear i_reclist.

      refresh i_reclist.

      • i_reclist-receiver = icust-smtp_addr.

      i_reclist-receiver = 'fmb@webmail.co.za'.

      i_reclist-rec_type = 'U'.

      i_reclist-com_type = 'INT'.

      i_reclist-notif_del = 'X'.

      i_reclist-notif_ndel = 'X'.

      append i_reclist.

      *********************Fred edited*************************

      endform. " convert_to_pdf

      *&----


      *

      *& Form send_mail

      *&----


      *

      • text

      *----


      *

      • --> p1 text

      • <-- p2 text

      *----


      *

      form send_mail.

      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.

      • case sy-subrc.

      • when 0.

      • wa_sent_report-kunnr = icust-kunnr.

      • wa_sent_report-name1 = icust-name1.

      • wa_sent_report-smtp_addr = icust-smtp_addr.

      • wa_sent_report-fsize = wf_numbytes.

      • append wa_sent_report to it_sent_report.

      • endcase.

      out_params-tddelete = 'X'.

      endform. " send_mail

Before answering

You should only submit an answer when you are proposing a solution to the poster's problem. If you want the poster to clarify the question or provide more information, please leave a comment instead, requesting additional details. When answering, please include specifics, such as step-by-step instructions, context for the solution, and links to useful resources. Also, please make sure that you answer complies with our Rules of Engagement.
You must be Logged in to submit an answer.

Up to 10 attachments (including images) can be used with a maximum of 1.0 MB each and 10.5 MB total.