Email: open attachment

I am using my email account to read email in iPad 2. Normally, if there is a PDF attachment, the iPad 2 mail app shows an icon for a PDF attachment, you touch the icon and it brings up Apple's PDF viewer.
Here's the issue:
If the PDF attachment is a one page document, the first time you read the message, the file shows as an icon, you touch the icon and Apple's PDF viewer opens. Fine with it... But, if you open a second time the mesage, the PDF icon is not shown anymore; instead, the file opens inline, as if it was the Apple's PDF viewer inserted in the message body. You cannot manipulate the image, except for zoom in. This behavior will not change and every time you open the message, the file will show inline.
This does not happen if the PDF file is a two or more pages long.
I called apple support but they did not acknoledge an issue and directed me to PDF Reader Lite App support, but I do not think that is the issue. Anyways, I opened a support request with PDF Reader Lite App.
I hope anyone has a chance to reproduce this issue and advise.

gerlunatorres wrote
As an example, let me explain one actual situation: I received an email with three attachements. In the message, the attachments were somehow ordered such that the first two files were a 1 page document and the third was a 2 pages one. When I opened the message, I could see the first two inline and the third as a PDF icon. But, to get to the third file I had to scroll all the way down in the message.
I am happy to learn that you guys have seen the issue and that there are ways around it.
The question remains, what is the reasoning behing such behavior?.
As I stated - this exactly the way that it works for me and I have to assume that it's the normal behavior for multiple page PDF files in an email. I have no clue what the reasoning is for such behavior - maybe it is a memory management issue.  However, even if the 3rd file was opened in the email as the first two were, you would still have to swipe down in order to see it. Granted - it would already be open and maybe just a bit more clearly visible, but you would still have to swipe down to get to it.
We do have the opportunity to make suggestions to Apple and to provide feedback about their products and software, so maybe you would care to pass along some suggestions for improvement that you would like to see with regard to this matter.
http://www.apple.com/feedback/ipad.html

Similar Messages

  • PDF Attachment Email Opening issue in ECC6

    Hello,
    We are having problem with below report. I'm able to send emails(invoice) as PDF attachments , but the attached PDF file wont open. I'm getting a message "Adobe reader could not open attachement the file has been damaged".This report works in our old version 4.6c but we just upgrade to ecc6. Please Please help.
    Thanks,
    Jose
    REPORT zrfi_customer_statement_new
    NO STANDARD PAGE HEADING
    MESSAGE-ID zm_load
    LINE-SIZE 325
    LINE-COUNT 65(3).
    Tables *
    TABLES:
    bsid, bsad, knb1, kna1, knkk, t001, t014, t179t,
    t052, fplt, vbap, veda, vbrk, vbpa, vbkd, knvk,
    cepct, tvzbt, vbak, bsik, tsp01, usr21,adr6, tsp03l.
    Internal tables *
    DATA: i_bsid LIKE bsid OCCURS 0 WITH HEADER LINE.
    DATA: BEGIN OF i_bukrs OCCURS 0,
    bukrs LIKE bsid-bukrs,
    waers LIKE bsid-waers,
    END OF i_bukrs.
    DATA:
    BEGIN OF i_temp_data OCCURS 0,
    bukrs LIKE bsid-bukrs, " Company code
    kunnr LIKE bsid-kunnr, " Customer
    belnr LIKE bsid-belnr, " Invoice
    gjahr LIKE bsid-gjahr, " Fiscal year
    waers LIKE bsid-waers, " Currency
    rebzg LIKE bsid-rebzg,
    bldat LIKE bsid-bldat, " Posting date
    shkzg LIKE bsid-shkzg, " Debit/Credit
    zfbdt LIKE bsid-zfbdt, " Baseline date
    zterm LIKE bsid-zterm, " Terms of payment key
    dmbtr LIKE bsid-dmbtr, " company currency
    dmbe2 LIKE bsid-dmbe2, " Amount in Group Currency
    days LIKE rfposxext-verzn, " No of Arrear Days
    kidno LIKE bsid-kidno, " Payment reference number
    kunnr_c LIKE vbak-kunnr, " Partner Number
    name_c(50), " Partner Last name
    matnr LIKE vbap-matnr, " Material no
    arktx LIKE vbap-arktx, " material description
    vbeln LIKE vbap-vbeln, " Contract/Order no
    inv_date LIKE vbrk-fkdat,
    xblnr LIKE bsid-xblnr,
    xblnr LIKE bsid-zuonr,
    vtext LIKE vbap-arktx, "material description
    sgtxt LIKE bsid-sgtxt,
    plant LIKE t001w-name1,
    zzihrez_e LIKE vbap-zzihrez_e,
    vvtext LIKE tvzbt-vtext,
    blart LIKE bsid-blart,
    zuonr LIKE bsid-zuonr,
    END OF i_temp_data.
    DATA:
    BEGIN OF itab OCCURS 0,
    kunnr LIKE bsid-kunnr, " Customer
    bukrs LIKE bsid-bukrs, " Company code
    kunnr_c LIKE vbak-kunnr, " Partner Number
    name_c(50), " Partner Last name
    matnr LIKE vbap-matnr, " Material no
    kidno LIKE bseg-kidno, " Payment reference
    name1 LIKE kna1-name1, " Customer name
    belnr LIKE bsid-belnr, " Invoice
    waers LIKE bsid-waers, " Currency ( Document )
    gjahr LIKE bsid-gjahr, " Fiscal year
    zfbdt LIKE bsid-zfbdt, " Baseline date
    zterm LIKE bsid-zterm, " Terms of payment key
    amt00_30 TYPE netwr_ak, " 000 - 030 Days
    amt31_60 TYPE netwr_ak, " 031 - 060 Days
    amt61_90 TYPE netwr_ak, " 061 - 090 Days
    amt91_120 TYPE netwr_ak, " 090 - 120 Days
    amt120pls TYPE netwr_ak, " 120+ Days
    total TYPE netwr_ak, " Row Total
    inv_date LIKE vbrk-fkdat,
    rebzg LIKE bsid-rebzg,
    xblnr LIKE bsid-xblnr,
    xblnr LIKE bsid-zuonr,
    sgtxt LIKE bsid-sgtxt,
    days(5) , " No of Arrear Days
    inv_chk LIKE bsid-xblnr, " invoice/check/wire transfer no
    vtext LIKE t179t-vtext,
    zzihrez_e LIKE vbap-zzihrez_e,
    plant LIKE t001w-name1,
    vvtext LIKE tvzbt-vtext,
    bldat LIKE bsid-bldat,
    blart LIKE bsid-blart,
    zuonr LIKE bsid-zuonr,
    END OF itab.
    DATA: BEGIN OF i_final OCCURS 0,
    inv_chk LIKE bsid-xblnr, " invoice/check/wire transfer no
    bldat LIKE bsid-bldat,
    xblnr LIKE bsid-xblnr,
    inv_date LIKE vbrk-fkdat,
    name_c(50), " Partner Last name
    vtext LIKE t179t-vtext,
    zzihrez_e LIKE vbap-zzihrez_e,
    plant LIKE t001w-name1,
    vvtext LIKE tvzbt-vtext,
    total TYPE netwr_ak, " Row Total
    days(5) , " No of Arrear Days
    waers LIKE bsid-waers,
    blart LIKE bsid-blart,
    zuonr LIKE bsid-zuonr,
    END OF i_final.
    DATA: BEGIN OF i_last OCCURS 0,
    kunnr LIKE vbak-kunnr,
    inv_chk LIKE bsid-xblnr, " invoice/check/wire transfer no
    bldat LIKE bsid-bldat,
    xblnr LIKE bsid-xblnr,
    inv_date LIKE vbrk-fkdat,
    name_c(50), " Partner Last name
    vtext LIKE t179t-vtext,
    zzihrez_e LIKE vbap-zzihrez_e,
    plant LIKE t001w-name1,
    vvtext LIKE tvzbt-vtext,
    total TYPE netwr_ak, " Row Total
    days(5) , " No of Arrear Days
    waers LIKE bsid-waers,
    blart LIKE bsid-blart,
    zuonr LIKE bsid-zuonr,
    END OF i_last.
    DATA: i_bsik LIKE bsik OCCURS 0 WITH HEADER LINE.
    DATA: itab_temp LIKE itab OCCURS 100 WITH HEADER LINE.
    DATA:
    BEGIN OF itab_details OCCURS 0,
    bukrs LIKE bsid-bukrs, " Company code
    xblnr LIKE bsid-xblnr,
    gjahr LIKE bsid-gjahr,
    belnr LIKE bsid-belnr,
    kunnr LIKE bsid-kunnr,
    END OF itab_details.
    DATA: BEGIN OF x_kna1 OCCURS 0,
    kunnr LIKE kna1-kunnr,
    name1 LIKE kna1-name1,
    name2 LIKE kna1-name2,
    ptext LIKE tpfkt-vtext,
    street LIKE adrc-street,
    ort01 LIKE kna1-ort01,
    regio LIKE kna1-regio,
    pstlz LIKE kna1-pstlz,
    landx LIKE t005t-landx,
    agdate LIKE sy-datum, " aging date
    END OF x_kna1.
    DATA: BEGIN OF i_total OCCURS 0,
    waers LIKE bsid-waers,
    00_30 TYPE netwr_ak,
    31_60 TYPE netwr_ak,
    61_90 TYPE netwr_ak,
    91_120 TYPE netwr_ak,
    120pls TYPE netwr_ak,
    total TYPE netwr_ak,
    END OF i_total.
    DATA: i_ssfcrescl TYPE ssfcrescl.
    DATA: i_otf_final TYPE itcoo OCCURS 0 WITH HEADER LINE.
    DATA: i_ssfctrlop LIKE ssfctrlop OCCURS 0 WITH HEADER LINE.
    DATA: v_itcpo LIKE itcpo.
    DATA: BEGIN OF itab_vender OCCURS 0,
    vender LIKE kna1-kunnr,
    END OF itab_vender.
    DATA: BEGIN OF ioutput OCCURS 0,
    kunnr LIKE vbrk-kunrg,
    kname(50),
    email(50),
    error(1),
    END OF ioutput.
    DATA: vv_text(90).
    Structures *
    DATA: x_item LIKE rfposxext.
    DATA: x_t001 LIKE t001.
    DATA: x_bsegp LIKE bsegp.
    Variables *
    DATA: v_count TYPE i.
    DATA: v_dialog TYPE c VALUE 'X'.
    DATA: v_name1 LIKE kna1-name1,
    v_name2 LIKE kna1-name2,
    v_print LIKE tsp03l-padest,
    v_formname(20),
    v_flag.
    DATA: f_recap_report(1) TYPE c. " Flag for recap report
    DATA:
    BEGIN OF x_amt,
    amt00_ls LIKE bsid-wrbtr,
    00_30 LIKE bsid-wrbtr,
    31_60 LIKE bsid-wrbtr,
    61_90 LIKE bsid-wrbtr,
    91_120 LIKE bsid-wrbtr,
    120pls LIKE bsid-wrbtr,
    END OF x_amt.
    DATA: BEGIN OF itab_bill OCCURS 0,
    vbeln LIKE vbfa-vbeln,
    fplnr LIKE vbfa-fplnr,
    fpltr LIKE vbfa-fpltr,
    END OF itab_bill.
    DATA: v_sdate LIKE vbrk-fkdat,
    v_edate LIKE vbrk-fkdat,
    v_order(10) TYPE n.
    DATA: v_eddate(10), v_stdate(10).
    DATA: v_num TYPE i,
    v_stat,
    v_bill_prd(24),
    v_counter TYPE c.
    DATA: v_matnr LIKE vbrp-matnr,
    v_arktx LIKE vbrp-arktx,
    v_vbeln LIKE vbrp-vbeln,
    v_vvtext LIKE t176t-vtext,
    v_posnr LIKE vbap-posnr,
    v_kunnr_c LIKE vbak-kunnr,
    v_name_c(50),
    v_inv_date LIKE vbrk-fkdat,
    v_vdatu LIKE vbak-vdatu,
    v_auart LIKE vbak-auart,
    v_prctr LIKE vbap-prctr,
    v_zzihrez LIKE vbap-zzihrez_e,
    v_plant LIKE t001w-name1,
    p_form TYPE tdsfname,
    fm_name TYPE rs38l_fnam.
    DATA: i_ssfcompop TYPE ssfcompop OCCURS 0." WITH HEADER LINE.
    DATA: addr_no LIKE kna1-adrnr,
    last_name LIKE kna1-name1,
    first_name LIKE kna1-name1,
    pafkt LIKE knvk-pafkt,
    lang LIKE knvk-parla,
    v_land LIKE adrc-country,
    v_lines TYPE i.
    DATA: v_tabix LIKE sy-tabix, v_gjahr LIKE bsid-gjahr,
    v_kunnr LIKE vbak-kunnr, v_prodh LIKE vbap-prodh,
    v_vtext LIKE t179t-vtext.
    DATA: spno LIKE tsp01-rqident,
    mi_bytecount TYPE i,
    mstr_print_parms LIKE pri_params,
    downfile(128) VALUE 'c:\customer.pdf',
    mtab_pdf LIKE tline OCCURS 0 WITH HEADER LINE.
    DATA: packing_list TYPE TABLE OF sopcklsti1 WITH HEADER LINE,
    contents_txt TYPE TABLE OF solisti1 WITH HEADER LINE,
    v_email LIKE adr6-smtp_addr,
    v_returncode,
    contents_hex TYPE TABLE OF solix," WITH HEADER LINE,
    w_contents_hex TYPE solix ,
    receivers TYPE TABLE OF somlreci1 WITH HEADER LINE.
    DATA: att_pos TYPE i.
    DATA: document_data LIKE sodocchgi1.
    DATA: esubject LIKE sood1-objdes. "subject line
    DATA: emsgs TYPE TABLE OF solisti1 WITH HEADER LINE.
    DATA: pdf TYPE TABLE OF tline WITH HEADER LINE.
    DATA: BEGIN OF itext OCCURS 200,
    text(132),
    END OF itext.
    DATA: i_fields LIKE sval OCCURS 0 WITH HEADER LINE.
    DATA: v_ccemail LIKE adr6-smtp_addr,
    v_check,
    v_kname(50).
    DATA: otf_data1 LIKE itcoo OCCURS 0 WITH HEADER LINE,
    i_itcpp LIKE itcpp.
    *FIELD-GROUPS: HEADER, ...
    FIELD-GROUPS: header,
    details.
    Selection Screen
    SELECTION-SCREEN BEGIN OF BLOCK a10 WITH FRAME TITLE text-sa1.
    SELECTION-SCREEN BEGIN OF BLOCK a1 WITH FRAME TITLE text-sa1.
    PARAMETERS : p_ex_ic AS CHECKBOX DEFAULT 'X'. "R3DK906903
    SELECTION-SCREEN END OF BLOCK a1.
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01.
    SELECT-OPTIONS : s_kunnr FOR bsid-kunnr,
    s_bukrs FOR t001-bukrs OBLIGATORY.
    PARAMETERS : p_bdate LIKE sy-datum OBLIGATORY.
    PARAMETERS: p_vender AS CHECKBOX DEFAULT 'X'.
    SELECTION-SCREEN END OF BLOCK b1.
    SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-s11.
    PARAMETERS : r_group RADIOBUTTON GROUP r1,
    r_comp RADIOBUTTON GROUP r1.
    SELECTION-SCREEN END OF BLOCK b2.
    SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-s13.
    PARAMETERS: p_print LIKE tsp03l-lname MATCHCODE OBJECT prin
    OBLIGATORY DEFAULT 'locl'.
    SELECTION-SCREEN END OF BLOCK b3.
    SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE text-s14.
    PARAMETERS: v_immed AS CHECKBOX DEFAULT 'X',
    v_dele AS CHECKBOX DEFAULT 'X',
    ch_email AS CHECKBOX.
    *PARAMETERS:ch_down AS CHECKBOX.
    SELECTION-SCREEN END OF BLOCK b4.
    SELECTION-SCREEN END OF BLOCK a10.
    AT SELECTION-SCREEN.
    Selection Screen Validation.
    PERFORM validate_selection_screen.
    INITIALIZATION.
    INITIALIZATION.
    IF sy-sysid NE 'R3P'.
    v_email = .
    ENDIF.
    START-OF-SELECTION.
    START-OF-SELECTION.
    IF p_vender = 'X'.
    Fetch data from BSIK .
    PERFORM fetch_data_vender.
    Get Arrear Days
    PERFORM get_arrear_days_vender.
    ENDIF.
    Fetch data from BSID and BSAD.
    PERFORM fetch_data_from_bsid.
    Get Arrear Days
    PERFORM get_arrear_days.
    Format Data as per selection.
    PERFORM format_final_data.
    Print sapscript
    SORT i_last BY kunnr days DESCENDING.
    LOOP AT i_last.
    AT NEW kunnr.
    CLEAR: i_final, x_kna1.
    REFRESH: i_final, x_kna1.
    PERFORM get_address.
    PERFORM get_total.
    ENDAT.
    MOVE-CORRESPONDING i_last TO i_final.
    i_final-xblnr = i_final-zuonr.
    APPEND i_final.
    CLEAR i_final.
    AT END OF kunnr.
    SORT i_final BY days DESCENDING inv_chk total DESCENDING.
    PERFORM smart_from.
    ENDAT.
    ENDLOOP.
    END-OF-SELECTION.
    END-OF-SELECTION.
    *& Form FETCH_DATA_FROM_BSID
    text
    FORM fetch_data_from_bsid.
    fetch data from BSID into Internal table I_BSID.
    SELECT *
    FROM bsid
    INTO TABLE i_bsid
    WHERE bukrs IN s_bukrs AND
    kunnr IN s_kunnr AND
    budat LE p_bdate ."AND
    BELNR in ('0090000231','1400000131').
    Fetch data from BSAD into Internal table I_BSID.
    SELECT *
    FROM bsad
    APPENDING TABLE i_bsid
    WHERE bukrs IN s_bukrs AND
    kunnr IN s_kunnr AND
    budat LE p_bdate AND
    augdt GT p_bdate." AND
    DELETE i_bsid WHERE ( bukrs = '1500' OR bukrs = '3000' OR
    bukrs = '1400' ) AND
    ( umsks = 'E' OR umskz = 'E' ).
    *Exclude intercompany customers
    IF p_ex_ic = 'X'.
    DELETE i_bsid WHERE kunnr+0(2) EQ 'IC'.
    ENDIF.
    CLEAR sy-tfill.
    DESCRIBE TABLE i_bsid LINES sy-tfill.
    IF sy-tfill = 0.
    MESSAGE i999 WITH ' No data selected for the selection Condition'.
    STOP.
    ENDIF.
    ENDFORM. " FETCH_DATA_FROM_BSID
    *& Form Get_Arrear_Days
    text
    FORM get_arrear_days.
    SORT i_bsid BY bukrs belnr.
    LOOP AT i_bsid.
    for company code 1500 and 3000
    IF i_bsid-bukrs EQ '1500' OR i_bsid-bukrs EQ '3000'.
    MOVE i_bsid-xblnr TO i_bsid-belnr.
    ENDIF.
    MOVE i_bsid-bukrs TO itab_details-bukrs.
    MOVE i_bsid-xblnr TO itab_details-xblnr.
    MOVE i_bsid-belnr TO itab_details-belnr.
    MOVE i_bsid-gjahr TO itab_details-gjahr.
    MOVE i_bsid-kunnr TO itab_details-kunnr.
    APPEND itab_details.
    CLEAR itab_details.
    CLEAR x_item.
    AT NEW bukrs.
    READ TABLE i_bsid INDEX sy-tabix.
    CLEAR x_t001.
    SELECT SINGLE * FROM t001
    INTO x_t001
    WHERE bukrs = i_bsid-bukrs.
    ENDAT.
    for company code 1500 and 3000 .
    IF i_bsid-bukrs EQ '1500' OR i_bsid-bukrs EQ '3000'.
    MOVE i_bsid-xblnr TO i_bsid-belnr.
    ENDIF.
    MOVE-CORRESPONDING i_bsid TO x_item.
    x_item-koart = 'D'. " Debitor - Customer Indicator
    x_item-konto = bsid-kunnr. " Debitor - Customer Number
    x_item-dmshb = bsid-dmbtr.
    x_item-wrshb = bsid-wrbtr.
    Function module to get ARREAR days.
    CALL FUNCTION 'ITEM_DERIVE_FIELDS'
    EXPORTING
    s_t001 = x_t001
    s_bsegp = x_bsegp
    key_date = p_bdate
    CHANGING
    s_item = x_item
    EXCEPTIONS
    bad_input = 1
    OTHERS = 2.
    IF sy-subrc = 0.
    Populate I_TEMP_DATA for further processing.
    i_temp_data-bukrs = i_bsid-bukrs.
    i_temp_data-kunnr = i_bsid-kunnr.
    i_temp_data-belnr = i_bsid-belnr.
    i_temp_data-bldat = i_bsid-bldat.
    i_temp_data-shkzg = i_bsid-shkzg.
    i_temp_data-zfbdt = i_bsid-zfbdt.
    i_temp_data-zterm = i_bsid-zterm.
    i_temp_data-vbeln = i_bsid-vbeln.
    i_temp_data-waers = i_bsid-waers.
    IF x_item-verzn < 0.
    x_item-verzn = 0.
    ENDIF.
    i_temp_data-zuonr = i_bsid-zuonr.
    i_temp_data-days = x_item-verzn.
    i_temp_data-gjahr = i_bsid-gjahr.
    i_temp_data-kidno = i_bsid-kidno.
    i_temp_data-rebzg = i_bsid-rebzg.
    i_temp_data-xblnr = i_bsid-xblnr.
    i_temp_data-sgtxt = i_bsid-sgtxt.
    Changing the Sign
    IF i_bsid-shkzg = 'H'.
    i_temp_data-dmbe2 = i_temp_data-dmbe2 + ( -1 * i_bsid-dmbe2 ).
    i_temp_data-dmbtr = i_temp_data-dmbtr + ( -1 * i_bsid-dmbtr ).
    ELSE.
    i_temp_data-dmbe2 = i_temp_data-dmbe2 + i_bsid-dmbe2.
    i_temp_data-dmbtr = i_temp_data-dmbtr + i_bsid-dmbtr.
    ENDIF.
    i_temp_data-blart = i_bsid-blart.
    *for doc type DR
    IF i_bsid-blart = 'DR' AND i_bsid-bschl = '01'.
    IF i_bsid-sgtxt IS INITIAL.
    *Changed our phone number to
    MOVE 'Contact Flightsafety' TO i_temp_data-vtext.
    ELSE.
    MOVE i_bsid-sgtxt TO i_temp_data-vtext.
    MOVE 'Financial Invoice' TO i_temp_data-vvtext.
    ENDIF.
    ENDIF.
    *for doc type AB
    IF i_bsid-blart = 'AB' AND
    ( i_bsid-bschl GE '01' AND i_bsid-bschl LE '19' ).
    i_temp_data-bldat = i_bsid-zfbdt.
    i_temp_data-xblnr = i_bsid-vbeln.
    IF NOT i_bsid-sgtxt IS INITIAL.
    *Changed our phone nuber to
    MOVE 'Contact Flightsafety' TO i_temp_data-vtext.
    MOVE i_bsid-sgtxt TO i_temp_data-vtext.
    MOVE 'Financial Doc' TO i_temp_data-vvtext.
    ELSE.
    MOVE i_bsid-sgtxt TO i_temp_data-vtext.
    MOVE 'Financial Doc' TO i_temp_data-vvtext.
    ENDIF.
    ENDIF.
    *for doc type DG
    IF i_bsid-blart = 'DG' AND
    ( i_bsid-bschl GE '01' AND i_bsid-bschl LE '19' ).
    i_temp_data-bldat = i_bsid-zfbdt.
    i_temp_data-xblnr = i_bsid-vbeln.
    IF i_bsid-sgtxt IS INITIAL.
    *Changed our phone nuber to
    MOVE 'Contact Flightsafety' TO i_temp_data-vtext.
    ELSE.
    MOVE i_bsid-sgtxt TO i_temp_data-vtext.
    MOVE 'Financial Doc' TO i_temp_data-vvtext.
    ENDIF.
    ENDIF.
    *To display Debit memo and credit memo.
    IF i_bsid-blart = 'DG'.
    IF ( i_bsid-bschl GE '11' AND i_bsid-bschl LE '19' ).
    MOVE 'Credit Memo' TO i_temp_data-vvtext.
    ELSEIF ( i_bsid-bschl GE '01' AND i_bsid-bschl LE '09' ).
    MOVE 'Debit Memo' TO i_temp_data-vvtext.
    ENDIF.
    ENDIF.
    *for doc type DZ
    IF i_bsid-blart = 'DZ' AND
    ( i_bsid-bschl GE '01' AND i_bsid-bschl LE '19' ).
    IF i_bsid-sgtxt IS INITIAL.
    *changed our phone number to
    MOVE 'Contact Flightsafety' TO i_temp_data-vtext.
    ELSE.
    MOVE i_bsid-sgtxt TO i_temp_data-vtext.
    MOVE 'Cust Pmt' TO i_temp_data-vvtext.
    ENDIF.
    ENDIF.
    *Document type DZ and posting key 15
    IF i_bsid-blart = 'DZ' AND
    i_bsid-bschl EQ '15'.
    MOVE 'Cust Pmt' TO i_temp_data-vvtext.
    ENDIF.
    *Document type DZ and posting key 06.
    IF i_bsid-blart = 'DZ' AND
    i_bsid-bschl EQ '06'.
    MOVE 'Debit' TO i_temp_data-vvtext.
    ENDIF.
    *Document type DA and posting key 04, 14.
    IF i_bsid-blart = 'DA' AND
    i_bsid-bschl EQ '04' OR
    i_bsid-bschl EQ '14'.
    MOVE 'Cust Pmt' TO i_temp_data-vvtext.
    MOVE i_bsid-sgtxt TO i_temp_data-vtext.
    IF i_bsid-sgtxt IS INITIAL.
    MOVE 'Contact Flightsafety' TO i_temp_data-vtext.
    ENDIF.
    ENDIF.
    ENDIF.
    *billing period
    IF i_bsid-blart = 'RV' AND i_bsid-bschl = '01'.
    PERFORM billing_period USING i_temp_data-belnr
    i_temp_data-vbeln.
    ENDIF.
    AT END OF belnr.
    at end of zuonr.
    APPEND i_temp_data.
    CLEAR i_temp_data.
    ENDAT.
    ENDLOOP.
    PERFORM material_details.
    ENDFORM. " Get_Arrear_Days
    *& Form FORMAT_FINAL_DATA
    text
    FORM format_final_data.
    PERFORM pop_format_grp_curr_detail.
    CLEAR: itab_temp, i_total.
    REFRESH: itab_temp, i_total.
    itab_temp] = itab[.
    CLEAR itab.
    REFRESH itab.
    LOOP AT itab_temp.
    CLEAR itab.
    itab = itab_temp.
    CLEAR: itab-matnr.
    IF itab-belnr+0(2) = '14'.
    *Adding two 00 for the left alignment.
    CONCATENATE '00' itab-xblnr
    INTO itab-inv_chk.
    CONDENSE itab-inv_chk NO-GAPS.
    itab-inv_chk = itab-xblnr.
    itab-xblnr = itab-belnr.
    ELSE.
    itab-inv_chk = itab-belnr.
    ENDIF.
    COLLECT itab.
    ENDLOOP.
    CLEAR v_stat.
    SORT itab BY days inv_chk total DESCENDING.
    LOOP AT itab.
    *To display Aging totals in usd (if v_stat ne f) for
    *company code 1100,1300,2000.
    IF itab-bukrs NE '1100' AND
    itab-bukrs NE '1300' AND
    itab-bukrs NE '2000'.
    v_stat = 'F'.
    ENDIF.
    CLEAR: i_last-vvtext, tvzbt.
    MOVE-CORRESPONDING itab TO i_last.
    APPEND i_last.
    CLEAR i_last.
    ENDLOOP.
    ENDFORM. " FORMAT_FINAL_DATA
    *& Form POP_FORMAT_grp_CURR_DETAIL
    text
    FORM pop_format_grp_curr_detail.
    Populating the Final Internal table for report by Group Currency.
    CLEAR x_amt.
    SORT i_temp_data.
    LOOP AT i_temp_data.
    CLEAR: v_count.
    IF i_temp_data-sgtxt+0(10) = 'Spcfy in p'.
    i_temp_data-sgtxt = i_temp_data-sgtxt+32(18).
    MOVE i_temp_data-sgtxt TO i_temp_data-vtext.
    MODIFY i_temp_data.
    ENDIF.
    IF r_comp = 'X'.
    IF i_temp_data-days LT 0.
    x_amt-amt00_ls = x_amt-amt00_ls + i_temp_data-dmbtr.
    If between 1 and 30 Days.
    ELSEIF i_temp_data-days GE 0 AND i_temp_data-days LE 30.
    x_amt-00_30 = x_amt-00_30 + i_temp_data-dmbtr.
    If between 31 and 60 Days.
    ELSEIF i_temp_data-days GE 31 AND i_temp_data-days LE 60.
    x_amt-31_60 = x_amt-31_60 + i_temp_data-dmbtr.
    if between 61 and 90
    ELSEIF i_temp_data-days GE 61 AND i_temp_data-days LE 90.
    x_amt-61_90 = x_amt-61_90 + i_temp_data-dmbtr.
    if between 91 and 120
    ELSEIF i_temp_data-days GE 91 AND i_temp_data-days LE 120.
    x_amt-91_120 = x_amt-91_120 + i_temp_data-dmbtr.
    if > 120
    ELSEIF i_temp_data-days GT 120.
    x_amt-120pls = x_amt-120pls + i_temp_data-dmbtr.
    ENDIF.
    ELSE.
    if the group currency is selected
    IF i_temp_data-days LT 0.
    x_amt-amt00_ls = x_amt-amt00_ls + i_temp_data-dmbe2.
    If between 1 and 30 Days.
    ELSEIF i_temp_data-days GE 0 AND i_temp_data-days LE 30.
    x_amt-00_30 = x_amt-00_30 + i_temp_data-dmbe2.
    If between 31 and 60 Days.
    ELSEIF i_temp_data-days GE 31 AND i_temp_data-days LE 60.
    x_amt-31_60 = x_amt-31_60 + i_temp_data-dmbe2.
    if between 61 and 90
    ELSEIF i_temp_data-days GE 61 AND i_temp_data-days LE 90.
    x_amt-61_90 = x_amt-61_90 + i_temp_data-dmbe2.
    if between 91 and 120
    ELSEIF i_temp_data-days GE 91 AND i_temp_data-days LE 120.
    x_amt-91_120 = x_amt-91_120 + i_temp_data-dmbe2.
    if > 120
    ELSEIF i_temp_data-days GT 120.
    x_amt-120pls = x_amt-120pls + i_temp_data-dmbe2.
    ENDIF.
    ENDIF.
    Get Customer Name.
    SELECT SINGLE name1
    INTO itab-name1
    FROM kna1
    WHERE kunnr = i_temp_data-kunnr.
    Invoice and year
    AT END OF rebzg.
    READ TABLE i_temp_data INDEX sy-tabix.
    itab-zuonr = i_temp_data-zuonr.
    itab-bukrs = i_temp_data-bukrs.
    itab-kunnr = i_temp_data-kunnr.
    itab-belnr = i_temp_data-belnr.
    itab-gjahr = i_temp_data-gjahr.
    IF r_comp EQ 'X'.
    itab-waers = i_temp_data-waers.
    ELSE.
    itab-waers = 'USD'.
    ENDIF.
    itab-zfbdt = i_temp_data-zfbdt.
    itab-zterm = i_temp_data-zterm.
    itab-amt00_30 = x_amt-amt00_ls + x_amt-00_30.
    itab-amt31_60 = x_amt-31_60.
    itab-amt61_90 = x_amt-61_90.
    itab-amt91_120 = x_amt-91_120.
    itab-amt120pls = x_amt-120pls.
    itab-total = x_amt-amt00_ls + x_amt-00_30 +
    x_amt-31_60 + x_amt-61_90 +
    x_amt-91_120 + x_amt-120pls.
    itab-kunnr_c = i_temp_data-kunnr_c.
    itab-name_c = i_temp_data-name_c.
    itab-kidno = i_temp_data-kidno.
    itab-matnr = i_temp_data-matnr.
    itab-inv_date = i_temp_data-inv_date.
    itab-rebzg = i_temp_data-rebzg.
    itab-xblnr = i_temp_data-xblnr.
    itab-vtext = i_temp_data-vtext.
    itab-sgtxt = i_temp_data-sgtxt.
    itab-days = i_temp_data-days.
    itab-bldat = i_temp_data-bldat.
    itab-vvtext = i_temp_data-vvtext.
    itab-zzihrez_e = i_temp_data-zzihrez_e.
    itab-blart = i_temp_data-blart.
    itab-plant = i_temp_data-plant.
    Populating table.
    APPEND: itab.
    CLEAR : itab,
    x_amt.
    v_count = 1.
    ENDAT.
    IF v_count NE 1.
    itab-zuonr = i_temp_data-zuonr.
    itab-bukrs = i_temp_data-bukrs.
    itab-kunnr = i_temp_data-kunnr.
    itab-belnr = i_temp_data-belnr.
    itab-gjahr = i_temp_data-gjahr.
    itab-bldat = i_temp_data-bldat.
    IF r_comp EQ 'X'.
    itab-waers = i_temp_data-waers.
    ELSE.
    itab-waers = 'USD'.
    ENDIF.
    itab-zfbdt = i_temp_data-zfbdt.
    itab-zterm = i_temp_data-zterm.
    itab-kunnr_c = i_temp_data-kunnr_c.
    itab-name_c = i_temp_data-name_c.
    itab-kidno = i_temp_data-kidno.
    itab-matnr = i_temp_data-matnr.
    itab-inv_date = i_temp_data-inv_date.
    itab-rebzg = i_temp_data-rebzg.
    itab-xblnr = i_temp_data-xblnr.
    itab-vtext = i_temp_data-vtext.
    itab-sgtxt = i_temp_data-sgtxt.
    itab-days = i_temp_data-days.
    itab-zzihrez_e = i_temp_data-zzihrez_e.
    itab-plant = i_temp_data-plant.
    itab-vvtext = i_temp_data-vvtext.
    itab-blart = i_temp_data-blart.
    IF itab-matnr NE space.
    APPEND itab.
    CLEAR itab-plant.
    ELSE.
    ON CHANGE OF i_temp_data-kidno.
    READ TABLE i_temp_data INDEX sy-tabix.
    itab-zuonr = i_temp_data-zuonr.
    itab-bukrs = i_temp_data-bukrs.
    itab-kunnr = i_temp_data-kunnr.
    itab-belnr = i_temp_data-belnr.
    itab-gjahr = i_temp_data-gjahr.
    itab-bldat = i_temp_data-bldat.
    IF r_comp EQ 'X'.
    itab-waers = i_temp_data-waers.
    ELSE.
    itab-waers = 'USD'.
    ENDIF.
    itab-zfbdt = i_temp_data-zfbdt.
    itab-zterm = i_temp_data-zterm.
    itab-amt00_30 = x_amt-amt00_ls + x_amt-00_30.
    itab-amt31_60 = x_amt-31_60.
    itab-amt61_90 = x_amt-61_90.
    itab-amt91_120 = x_amt-91_120.
    itab-amt120pls = x_amt-120pls.
    itab-total = x_amt-amt00_ls + x_amt-00_30 +
    x_amt-31_60 + x_amt-61_90 +
    x_amt-91_120 + x_amt-120pls.
    itab-kunnr_c = i_temp_data-kunnr_c.
    itab-name_c = i_temp_data-name_c.
    itab-kidno = i_temp_data-kidno.
    itab-matnr = i_temp_data-matnr.
    itab-inv_date = i_temp_data-inv_date.
    itab-rebzg = i_temp_data-rebzg.
    itab-xblnr = i_temp_data-xblnr.
    itab-vtext = i_temp_data-vtext.
    itab-sgtxt = i_temp_data-sgtxt.
    itab-days = i_temp_data-days.
    itab-zzihrez_e = i_temp_data-zzihrez_e.
    itab-vvtext = i_temp_data-vvtext.
    itab-plant = i_temp_data-plant.
    APPEND itab.
    CLEAR: x_amt-amt00_ls, x_amt-00_30, x_amt-31_60,
    x_amt-61_90, x_amt-91_120 , x_amt-120pls.
    ENDON.
    ENDIF.
    CLEAR: itab.
    ENDIF.
    ENDLOOP.
    ENDFORM. " POP_FORMAT_grp_CURR_DETAIL
    *& Form material_details
    text
    --> p1 text
    <-- p2 text
    FORM material_details.
    SORT itab_details.
    DELETE ADJACENT DUPLICATES FROM itab_details.
    LOOP AT itab_details.
    CLEAR: v_counter, v_gjahr, v_kunnr, v_prodh, v_vbeln,
    v_vvtext, v_vtext.
    v_gjahr = itab_details-gjahr.
    v_kunnr = itab_details-kunnr.
    *Invoice Date/Billing date
    SELECT SINGLE fkdat FROM vbrk INTO v_inv_date
    WHERE vbeln = itab_details-xblnr.
    *material number, description and product hierarchy
    SELECT matnr arktx prodh FROM vbrp
    INTO (v_matnr, v_arktx, v_prodh)
    WHERE vbeln = itab_details-xblnr AND
    uepos = '00000'.
    CLEAR: v_vdatu, v_posnr, v_auart, v_prctr, v_zzihrez,
    v_kunnr_c, v_name1, v_name2, v_vtext, v_vvtext.
    *Find the contract/order no
    SELECT SINGLE vbelv posnv FROM vbfa INTO (v_vbeln, v_posnr)
    WHERE vbeln = itab_details-xblnr
    AND vbtyp_v IN ('C','G').
    *delivery date, document type, plant and reservation no
    SELECT SINGLE vbakvdatu vbakauart vbapprctr vbapzzihrez_e
    INTO (v_vdatu, v_auart, v_prctr, v_zzihrez)
    FROM vbak INNER JOIN vbap ON vbakvbeln = vbapvbeln
    WHERE vbap~vbeln = v_vbeln AND
    vbap~posnr = v_posnr AND
    vbap~abgru = space.
    *billing type
    SELECT SINGLE * FROM vbkd WHERE vbeln = v_vbeln.
    IF vbkd-bsark NE 'ZG01' OR vbkd-bsark NE 'ZO02'.
    SELECT SINGLE vtext FROM t176t INTO v_vvtext
    WHERE bsark = vbkd-bsark
    AND spras EQ sy-langu.
    ELSE.
    MOVE 'One Time' TO v_vvtext.
    ENDIF.
    *getting only the reservation number (no text)
    IF vbkd-ihrez_e+0(11) CO
    '0123456789'.
    ELSE.
    v_zzihrez = space.
    ENDIF.
    *location
    CONCATENATE '000000' v_zzihrez+0(4) INTO v_prctr.
    *plant name
    CLEAR v_plant.
    SELECT SINGLE ktext FROM cepct INTO v_plant WHERE
    prctr = v_prctr AND
    spras = sy-langu.
    *client no and name
    SELECT SINGLE vbpakunnr kna1name1 kna1~name2
    INTO (v_kunnr_c, v_name1, v_name2)
    FROM vbpa INNER JOIN kna1 ON
    vbpakunnr = kna1kunnr
    WHERE vbpa~vbeln = v_vbeln AND
    vbpa~parvw = 'Z3'.
    CONCATENATE v_name1 v_name2 INTO v_name_c
    SEPARATED BY space.
    READ TABLE i_temp_data WITH KEY bukrs = itab_details-bukrs
    belnr = itab_details-belnr
    gjahr = itab_details-gjahr.
    IF sy-subrc = 0.
    CLEAR: v_tabix.
    v_tabix = sy-tabix.
    IF v_counter IS INITIAL.
    MOVE v_plant TO i_temp_data-plant.
    MOVE v_zzihrez TO i_temp_data-zzihrez_e.
    MOVE v_kunnr_c TO i_temp_data-kunnr_c.
    MOVE v_name_c TO i_temp_data-name_c.
    MOVE v_gjahr TO i_temp_data-gjahr.
    MOVE v_kunnr TO i_temp_data-kunnr.
    IF v_auart EQ 'ZOTO' AND i_temp_data-inv_date IS INITIAL.
    MOVE v_inv_date TO i_temp_data-inv_date.
    ELSEIF i_temp_data-inv_date IS INITIAL.
    MOVE v_vdatu TO i_temp_data-inv_date.
    ENDIF.
    IF i_temp_data-vtext IS INITIAL.
    MOVE v_arktx TO i_temp_data-vtext.
    ENDIF.
    IF i_temp_data-vvtext IS INITIAL.
    MOVE v_vvtext TO i_temp_data-vvtext.
    ENDIF.
    MODIFY i_temp_data INDEX v_tabix.
    CLEAR i_temp_data.
    v_counter = 'T'.
    CLEAR: v_matnr,v_arktx,v_vbeln,v_name_c,v_vtext, v_prodh,
    v_kunnr_c, v_name1,v_name2, v_vdatu, v_vvtext.
    ELSE.
    CLEAR:i_temp_data-dmbe2, i_temp_data-dmbtr. " i_temp_data-wrbtr
    MOVE v_matnr TO i_temp_data-matnr.
    MOVE v_plant TO i_temp_data-plant.
    MOVE v_zzihrez TO i_temp_data-zzihrez_e.
    MOVE v_kunnr_c TO i_temp_data-kunnr_c.
    MOVE v_name_c TO i_temp_data-name_c.
    MOVE v_gjahr TO i_temp_data-gjahr.
    MOVE v_kunnr TO i_temp_data-kunnr.
    IF v_auart EQ 'ZOTO' AND i_temp_data-inv_date IS INITIAL.
    MOVE v_inv_date TO i_temp_data-inv_date.
    ELSEIF i_temp_data-inv_date IS INITIAL.
    MOVE v_vdatu TO i_temp_data-inv_date.
    ENDIF.
    MOVE v_arktx TO i_temp_data-vtext.
    APPEND i_temp_data.
    CLEAR i_temp_data.
    ENDIF.
    ENDIF.
    ENDSELECT.
    CLEAR:
    i_temp_data-kunnr_c,
    i_temp_data-name_c,i_temp_data-inv_date,
    i_temp_data-vtext.
    CLEAR: v_matnr,v_arktx,v_vbeln,v_name_c,
    v_kunnr_c, v_name1,v_name2,v_inv_date, v_vdatu,
    v_vtext, v_prodh.
    ENDLOOP.
    ENDFORM. " material_details
    *& Form get_address
    text
    FORM get_address.
    Get Address
    CLEAR: kna1, x_kna1, first_name, last_name,pafkt, lang, v_land.
    SELECT SINGLE * FROM kna1 INTO kna1 WHERE kunnr = i_last-kunnr.
    SELECT SINGLE name1 namev pafkt parla FROM knvk
    INTO (last_name, first_name, pafkt, lang)
    WHERE kunnr = i_last-kunnr
    AND abtnr = '0003'. "financial department
    IF sy-subrc NE 0.
    SELECT SINGLE name1 namev pafkt parla FROM knvk
    INTO (last_name, first_name, pafkt, lang)
    WHERE kunnr = i_last-kunnr.
    ENDIF.
    IF lang = ' '.
    lang = 'E'.
    ENDIF.
    SELECT SINGLE vtext FROM tpfkt INTO x_kna1-ptext
    WHERE pafkt = pafkt
    AND spras = lang.
    SELECT SINGLE name1 name2 street country FROM
    adrc INTO (x_kna1-name1, x_kna1-name2,
    x_kna1-street, v_land)
    WHERE addrnumber = kna1-adrnr.
    SELECT SINGLE landx FROM t005t INTO x_kna1-landx WHERE land1 = v_land
    AND spras = lang.
    TRANSLATE x_kna1-landx TO UPPER CASE. "#EC SYNTCHAR added by sony
    MOVE kna1-kunnr TO x_kna1-kunnr.
    MOVE kna1-ort01 TO x_kna1-ort01.
    MOVE kna1-regio TO x_kna1-regio.
    MOVE kna1-pstlz TO x_kna1-pstlz.
    MOVE p_bdate TO x_kna1-agdate.
    APPEND x_kna1.
    CLEAR: x_kna1.
    ENDFORM. " get_addres
    *& Form fetch_data_vender
    text
    --> p1 text
    <-- p2 text
    FORM fetch_data_vender.
    SELECT lifnr FROM kna1 INTO TABLE itab_vender
    WHERE kunnr IN s_kunnr.
    LOOP AT itab_vender.
    Fetch data from BSIK into Internal table I_BSIK.
    SELECT *
    FROM bsik
    APPENDING TABLE i_bsik
    WHERE bukrs IN s_bukrs AND
    lifnr EQ itab_vender-vender AND
    budat LE p_bdate AND
    blart IN ('KA', 'KG', 'KR', 'KZ', 'KF').
    Fetch data from BSAK into Internal table I_BSAK.
    SELECT *
    FROM bsak "#EC ENHOK "added by sony 06/05/08
    APPENDING TABLE i_bsik
    WHERE bukrs IN s_bukrs AND
    lifnr EQ itab_vender-vender AND
    budat LE p_bdate AND
    augdt GT p_bdate AND
    blart IN ('KA', 'KG', 'KR', 'KZ', 'KF').
    ENDLOOP.
    DELETE i_bsik WHERE ( bukrs = '1500' OR bukrs = '3000' ) AND
    ( umsks = 'E' OR umskz = 'E' ).
    ENDFORM. " fetch_data_vender
    *& Form GET_ARREAR_DAYS_vender
    text
    --> p1 text
    <-- p2 text
    FORM get_arrear_days_vender.
    SORT i_bsik BY mandt bukrs belnr.
    CLEAR: v_tabix.
    LOOP AT i_bsik.
    v_tabix = sy-tabix.
    SELECT SINGLE * FROM kna1 WHERE lifnr = i_bsik-lifnr.
    MOVE i_bsik-bukrs TO itab_details-bukrs.
    MOVE i_bsik-xblnr TO itab_details-xblnr.
    MOVE i_bsik-belnr TO itab_details-belnr.
    MOVE i_bsik-gjahr TO itab_details-gjahr.
    MOVE kna1-kunnr TO itab_details-kunnr.
    APPEND itab_details.
    CLEAR itab_details.
    CLEAR x_item.
    AT NEW bukrs.
    *company code details
    READ TABLE i_bsik INDEX sy-tabix.
    CLEAR x_t001.
    SELECT SINGLE * FROM t001
    INTO x_t001
    WHERE bukrs = i_bsik-bukrs.
    ENDAT.
    MOVE-CORRESPONDING i_bsik TO x_item.
    x_item-koart = 'D'. " Debitor - Customer Indicator
    x_item-konto = kna1-kunnr. " Debitor - Customer Number
    x_item-dmshb = bsik-dmbtr.
    x_item-wrshb = bsik-wrbtr.
    Function module to get ARREAR days.
    CALL FUNCTION 'ITEM_DERIVE_FIELDS'
    EXPORTING
    s_t001 = x_t001
    s_bsegp = x_bsegp
    key_date = p_bdate
    CHANGING
    s_item = x_item
    EXCEPTIONS
    bad_input = 1
    OTHERS = 2.
    IF sy-subrc = 0.
    Populate I_TEMP_DATA for further processing.
    i_temp_data-bukrs = i_bsik-bukrs.
    i_temp_data-kunnr = kna1-kunnr.
    i_temp_data-belnr = i_bsik-belnr.
    i_temp_data-bldat = i_bsik-bldat. "Document date in document
    i_temp_data-shkzg = i_bsik-shkzg.
    i_temp_data-zfbdt = i_bsik-zfbdt. " Base line date
    i_temp_data-zterm = i_bsik-zterm. "Terms of payment key
    i_temp_data-waers = i_bsik-waers.
    i_temp_data-days = x_item-verzn. " days in arrs
    i_temp_data-gjahr = i_bsik-gjahr. " year
    i_temp_data-kidno = i_bsik-kidno. " Payment Reference
    i_temp_data-rebzg = i_bsik-rebzg. " Number of the Invoice the
    "Transaction Belongs to
    i_temp_data-xblnr = i_bsik-xblnr.
    i_temp_data-sgtxt = i_bsik-sgtxt. " Item Text
    Changing the Sign
    IF i_bsik-shkzg = 'H'.
    i_temp_data-dmbe2 = -1 * i_bsik-dmbe2.
    i_temp_data-dmbtr = -1 * i_bsik-dmbtr.
    ELSE.
    i_temp_data-dmbe2 = i_bsik-dmbe2.
    i_temp_data-dmbtr = i_bsik-dmbtr.
    ENDIF.
    ENDIF.
    APPEND i_temp_data.
    CLEAR i_temp_data.
    ENDLOOP.
    PERFORM material_details.
    ENDFORM. " Get_Arrear_DaysENDFORM.
    " GET_ARREAR_DAYS_vender
    *& Form convert_pdf
    text
    --> p1 text
    <-- p2 text
    FORM convert_pdf.
    CLEAR: tsp01.
    CLEAR: mtab_pdf, mi_bytecount.
    REFRESH mtab_pdf.
    FREE mtab_pdf.
    ***convert to PDF format
    CALL FUNCTION 'CONVERT_OTF'
    EXPORTING
    format = 'PDF'
    IMPORTING
    bin_filesize = mi_bytecount
    TABLES
    otf = i_otf_final
    lines = mtab_pdf
    EXCEPTIONS
    err_max_linewidth = 1
    err_format = 2
    err_conv_not_possible = 3
    OTHERS = 4.
    IF sy-subrc 0.
    ENDIF.
    CONDENSE itab-kunnr NO-GAPS.
    CONCATENATE 'C:\' itab-kunnr '_' sy-datum '.pdf' INTO downfile.
    IF ch_down = 'X'.
    PERFORM download_pdf.
    ENDIF.
    IF ch_email = 'X'.
    PERFORM send_email.
    ENDIF.
    ENDFORM. " convert_pdf
    *& Form download_pdf
    text
    --> p1 text
    <-- p2 text
    FORM download_pdf.
    DATA: i_downfile TYPE string.
    i_downfile = downfile.
    CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
    bin_filesize = mi_bytecount
    filename = i_downfile
    filetype = 'BIN'
    IMPORTING
    FILELENGTH =
    TABLES
    data_tab = mtab_pdf[]
    EXCEPTIONS
    file_write_error = 1
    no_batch = 2
    gui_refuse_filetransfer = 3
    invalid_type = 4
    no_authority = 5
    unknown_error = 6
    header_not_allowed = 7
    separator_not_allowed = 8
    filesize_not_allowed = 9
    header_too_long = 10
    dp_error_create = 11
    dp_error_send = 12
    dp_error_write = 13
    unknown_dp_error = 14
    access_denied = 15
    dp_out_of_memory = 16
    disk_full = 17
    dp_timeout = 18
    file_not_found = 19
    dataprovider_exception = 20
    control_flush_error = 21
    OTHERS = 22
    IF sy-subrc 0.
    ENDIF.
    ENDFORM. " download_pdf
    *& Form send_email
    text
    --> p1 text
    <-- p2 text
    FORM send_email.
    CLEAR: packing_list[],
    pdf[],
    contents_txt[],
    contents_hex[],
    receivers[],
    att_pos,
    document_data,
    esubject,emsgs[],
    w_contents_hex.
    PERFORM packing_list.
    PERFORM set_data.
    IF v_check NE 'X'.
    PERFORM send_email_message.
    ENDIF.
    ENDFORM. " send_email
    *& Form packing_list
    text
    --> p1 text
    <-- p2 text
    FORM packing_list.
    Concatenate the PDF material into the attachments table.
    PERFORM append_pdf_to_attachments USING mi_bytecount.
    Describe the attachment
    CLEAR packing_list.
    REFRESH packing_list.
    packing_list-transf_bin = 'X'.
    ADD 1 TO att_pos.
    packing_list-body_start = att_pos.
    DESCRIBE TABLE contents_hex LINES att_pos.
    packing_list-body_num = att_pos.
    packing_list-doc_type = 'PDF'.
    CONCATENATE 'Statement Date'
    sy-datum4(2) '/' sy-datum6(2) '/'
    sy-datum+2(2) '-' 'Customer no -' itab-kunnr
    INTO packing_list-obj_descr.
    packing_list-obj_langu = 'E'.
    packing_list-doc_size = mi_bytecount.
    APPEND packing_list.
    ENDFORM. " packing_list
    *& Form set_data
    text
    --> p1 text
    <-- p2 text
    FORM set_data.
    CLEAR: sy-tfill.
    DESCRIBE TABLE contents_hex LINES sy-tfill.
    IF sy-tfill GT 0.
    DATA: lines TYPE TABLE OF tline WITH HEADER LINE.
    By this point, the attachments have been created. Now we supply body
    text and set up the recipients.
    CONCATENATE 'Customer Statement for Customer - '
    itab-kunnr esubject INTO esubject.
    The message header information
    CLEAR document_data.
    document_data-obj_name = 'ZWRAPPER'.
    document_data-obj_descr = esubject.
    document_data-obj_langu = 'E'.
    document_data-obj_prio = '1'.
    CLEAR: contents_txt, contents_txt], itext[, itext.
    IF sy-sysid NE 'R3P'.
    CONCATENATE 'Please ignore this mail. This is part of testing from '
    sy-sysid INTO contents_txt SEPARATED BY space.
    APPEND contents_txt.
    CLEAR: contents_txt.
    APPEND contents_txt.
    ENDIF.
    CLEAR vv_text.
    CONCATENATE 'Enter Body of the Email and SAVE it for customer '
    itab-kunnr itab-name1 INTO vv_text SEPARATED BY space.
    EDITOR-CALL FOR itext TITLE vv_text.
    LOOP AT itext.
    contents_txt = itext-text.
    APPEND contents_txt.
    ENDLOOP.
    Describe the body data. This descriptor has to be the first, in front
    of all the attachments.
    CLEAR packing_list.
    packing_list-transf_bin = space.
    packing_list-body_start = 1.
    DESCRIBE TABLE contents_txt LINES packing_list-body_num.
    packing_list-doc_type = 'RAW'.
    packing_list-obj_langu = 'E'.
    INSERT packing_list INDEX 1.
    Set up the recipients.
    CLEAR: receivers, receivers[], sy-tfill.
    CLEAR: usr21, adr6.
    *find email address.
    IF sy-sysid = 'R3P'.
    SELECT prsnr FROM knvk INTO knvk-prsnr WHERE kunnr = itab-kunnr.
    SELECT SINGLE adrnr name1 name2 FROM kna1 INTO
    (kna1-adrnr, kna1-name1, kna1-name2)
    WHERE kunnr = itab-kunnr.
    SELECT SINGLE smtp_addr INTO v_email FROM adr6
    WHERE addrnumber EQ kna1-adrnr.
    IF sy-subrc NE 0.
    CLEAR: v_email.
    ELSE.
    EXIT.
    ENDIF.
    ENDSELECT.
    ENDIF.
    *find the user email address.
    CLEAR: usr21, adr6.
    SELECT SINGLE * FROM usr21 WHERE bname = sy-uname.
    CLEAR adr6.
    SELECT SINGLE * FROM adr6 WHERE addrnumber = usr21-addrnumber AND
    persnumber = usr21-persnumber.
    v_ccemail = adr6-smtp_addr.
    CLEAR:i_fields.
    REFRESH:i_fields.
    i_fields-tabname = 'COMPMSG'.
    i_fields-fieldname = 'TEXT'.
    i_fields-fieldtext = 'Email'.
    i_fields-value = v_email.
    APPEND i_fields.
    CLEAR i_fields.
    i_fields-tabname = 'T100'.
    i_fields-fieldname = 'TEXT'.
    i_fields-fieldtext = 'CC to'.
    i_fields-value = v_ccemail.
    APPEND i_fields.
    CLEAR i_fields.
    CLEAR v_returncode.
    CALL FUNCTION 'POPUP_GET_VALUES'
    EXPORTING
    popup_title = 'Email Address.'
    start_column = '25'
    start_row = '2'
    IMPORTING
    returncode = v_returncode
    TABLES
    fields = i_fields
    EXCEPTIONS
    error_in_fields = 1
    OTHERS = 2.
    IF sy-subrc 0.
    ENDIF.
    IF v_returncode NE 'A'.
    *find the new condition value (table name and filed name took itfor char
    LOOP AT i_fields WHERE tabname = 'COMPMSG' AND fieldname = 'TEXT'.
    v_email = i_fields-value.
    ENDLOOP.
    LOOP AT i_fields WHERE tabname = 'T100'
    AND fieldname = 'TEXT'.
    v_ccemail = i_fields-value.
    ENDLOOP.
    ENDIF.
    receivers-receiver = v_email.
    receivers-rec_type = 'U'. "..assume it's an internet address
    APPEND receivers.
    receivers-receiver = v_ccemail.
    receivers-rec_type = 'U'.
    receivers-copy = 'X'.
    APPEND receivers.
    SORT receivers BY receiver.
    DELETE ADJACENT DUPLICATES FROM receivers COMPARING receiver.
    ENDIF.
    CLEAR: v_check.
    IF v_email = space.
    v_check = 'X'.
    MOVE itab-kunnr TO ioutput-kunnr.
    MOVE v_kname TO ioutput-kname.
    MOVE v_email TO ioutput-email.
    MOVE 'X' TO ioutput-error.

    Hi
    Looks like BASIS issue.
    Pls check the OSS Note - Note 787418 - Sent documents are not readable after upgrade
    Pls contact your BASIS person
    Regards
    MD

  • HT5275 When I download an attachment, it doesn't open in a new window.  It goes to my finder, but I must click on an email attachment at least 3 times in order to find it there.  Is there a way to change the preferences to simply open attachment in a new

    When I download an attachment, it doesn't open in a new window.  It goes to my finder, but I must click on an email attachment at least 3 times in order to find it there.  Is there a way to change the preferences to simply open attachment in a new window?

    http://www.apple.com/feedback/kaywerty wrote:
    A rather long winded way of asking if anybody knows if it's possible to have multi-windows open
    It's not possible.
    Suggestions here -> Apple Product feedback

  • When I open an email's attachment from Outlook, the email's attachment is no longer avail to open on my iPad and iPhone

    When opening an email's attachment in Outlook 2007, that email's attachment is no longer available to view on my iPhone and iPad.
    How do I correct this to keep the attachment available on iPad and iPhone, when the email's attachment is initially opened from Microsoft Outlook please??

    If you're talking about an old iCloud ID, you have to delete the old account, provide the password for the old ID when prompted to turn off Find My iPhone, then sign back in with the ID you wish to use.  If you don't know the password for your old ID, or if it isn't accepted, go to https//appleid.apple.com, click Manage my Apple ID and sign in with your current iCloud ID.  Tap edit next to the primary email account, tap Edit, change it back to your old email address and save the change.  Then edit the name of the account to change it back to your old email address.  You can now use your current password to turn off Find My iPhone on your device, even though it prompts you for the password for your old account ID. Then go to Settings>iCloud, tap Delete Account and choose Delete from My iDevice when prompted (your iCloud data will still be in iCloud).  Next, go back to https//appleid.apple.com and change your primary email address and iCloud ID name back to the way it was.  Now you can go to Settings>iCloud and sign in with your current iCloud ID and password.

  • I can not open attached documents sent on my email, sent to me or when I send to someone else ? Why

    I can not open attached documents sent on my email, sent to me or when I send them to others, ? Why ?

    Reload web page(s) and bypass the cache to refresh possibly outdated or corrupted files.
    *Press and hold Shift and left-click the Reload button.
    *Press "Ctrl + F5" or press "Ctrl + Shift + R" (Windows,Linux)
    *Press "Command + Shift + R" (MAC)
    Start Firefox in <u>[[Safe Mode|Safe Mode]]</u> to check if one of the extensions (Firefox/Tools > Add-ons > Extensions) or if hardware acceleration is causing the problem (switch to the DEFAULT theme: Firefox/Tools > Add-ons > Appearance).
    *Do not click the Reset button on the Safe mode start window or otherwise make changes.
    *https://support.mozilla.org/kb/Safe+Mode
    *https://support.mozilla.org/kb/Troubleshooting+extensions+and+themes

  • Why can't I open an email word attachment in pages anymore

    When opening an email word attachment I was always given the option to open an attachment in Pages or as a PDF or in Dropbox but this no longer happens. Can anyone tell me if the functionality has been closed off or is it now dealt with in a different way?

    Is the PDF Maker available in Excel? It is necessary to have PDF Maker workinig in OFFICE to be able to import those files.

  • I get email with adobe ? Do not open attachment  what app can I use

    Adobe  I get EMail. Can not open attachment (pictures etc) what apps can I use

    Adobe is a company, not a file format. What format are the attachments? PDF? Flash? The former should open without any problem. The latter will not work on your iPad as there is no Flash plug in for iOS.
    The more details you can give about your issue, the better the answers you'll get.
    Best of luck.

  • Mail (5.3) OS X 10.7.5 mail program crashing when opening an email with attachment. Any suggestions out there? I can open the mail program...send and receive emails...click on emails without attachments with no problem.

    I am having a problem successfully opening an email containing attachment. I can open the mail program...send and receive emails...and view emails that do not contain attachments. But whenever I click on an email containing an attachment, I get the spinning beach ball for a few seconds and then the entire program closes. Any suggestions before I make a one hour trip to the Apple store for help?

    I don't think an interactive portion of a PDF is an obscure problem (lots of designers I know use rollable PDF files for emailing 3D models) and while I understand that it's in a legacy program, there is no guarantee if I purchase Acrobat X, that the same problem won't exist. It's no an issue in Reader 10 but then again, it wasn't an issue in Reader 9 either. Since Adobe doesn't give trial versions for Mac (stupid), I have no way of checking this. The problem doesn't annoy me as much as being an Adobe product user who upgraded only to not have functionality and not have a way to have it resolved.

  • Opening email with attachment

    New to this device and forum. Trying to open email with attachment I click on the attachment and click save from the full menu and nothing happens. Can someone tell me what I am doing wrong? I can open and click and view easy on my pc. BB8330 with Verizon service. Thanks Jim

    hello,
    when you chose "save", it saved the message and not the attachment.
    saving a message is like tagging it so that you can find it more easily by going to the tagged messages folder (the name of that folder is "saved messages".
    what is the filetype of the attachment ? did you have a line called "Open attachment" ?
    The search box on top-right of this page is your true friend, and the public Knowledge Base too:

  • Email with attachment will not open

    The minute I tap to open an email on my Lumia 920 which has an attachment the display reverts to the desktop. I cannot even read the email because all I get is a flash of the email and it reverts to the desktop. All other emails open normally.
    Any help would be much appreciated.

    does it happen with EVERY email that has an attachment, from anyone? or just certain file types.

  • I open my work Lotus Notes through FireFox. since the upgrade if my email has attached I can't find them. The attachment windows is there but nothing is in it.

    Question
    I open my work Lotus Notes through FireFox. since the upgrade if my email has attached I can't find them. The attachment windows is there but nothing is in it.

    you haven't lost anything, it's virtually impossible to delete your Zotero library by accident.
    You may just need to show your add-on bar (View --> Toolbars ---> Add on Bar).
    To check if Zotero is disabled, go to Tools--> Add-ons --> Extensions.
    Make sure to check for Zotero updates, you may need the newest version (2.1.10) for FF6 compatibility.
    As a general piece of advice, if technical problems make you frantic, don't perform major software upgrades in the middle of a project. Also, support for Zotero is better on the Zotero forums than here.

  • I need help with opening attachment on email?

    I need help to set  association to open attachment on email?

    First i would suggest update Reader to XI.
    To set the default application you may visit this article: http://windows.microsoft.com/en-in/windows/change-default-programs#1TC=windows-7 this article is for windows 7 but it will hold good for vista too.
    let me know the result.
    ~Ajlan Huda.

  • How to open attachment on email sent from windows

    how to open attachment sent on e mail from windows onto macbook

    Control-click on the attachment.  You should see these options.  Decide how you wish to save the attachment from the choices presented.

  • HOW TO SEND A HEBREW EMAIL WITH ATTACHMENT USING DEMO_MAIL

    Hello All,
    This is Not a question , just attaching something I've implemented and might be interesting for few of us,
    This package I'm attaching allows to send Hebrew Language email + attaching files to it.
    This package is based on demo_mail package (combined here but you can search at google for more example information if needed).
    My Package is supplied as is , for any specific information regarding it , please contact me directly at : [email protected] or POST here.
    * Please also note , that this package allow file to be attach via URL (meaning you will have to define a link to this file, if you would like to implement a link to a local file , e.g : c:\temp\myfile , you will have to customize the package your self with database directories option etc ...)
    First I will attach an example of how to use it :
    ==================================
    begin
    demo_mail_heb.send_html_mail_attach(p_sender => '[email protected]',
    p_recipients => '[email protected]',
    p_subject => 'שלום וברכה עולם',
    p_data => '<hr><b>בוקר טוב</b><hr>',
    p_file_name => 'but_choose_file.gif',
    p_file_mime_type => 'application/pdf',
    p_file_URL => 'http://10.172.246.160:7777/i/but_choose_file.gif');
    end;
    Second Here is the Package (please note you will have to modify few settings in order to enable it , such as mail server address ..etc)
    ======================================================================================
    CREATE OR REPLACE PACKAGE demo_mail_heb IS
    ----------------------- Customizable Section -----------------------
    -- Customize the SMTP host, port and your domain name below.
    smtp_host VARCHAR2(256) := 'mail.oracle.com';
    smtp_port PLS_INTEGER := 25;
    smtp_domain VARCHAR2(256) := 'oracle.com';
    -- Customize the signature that will appear in the email's MIME header.
    -- Useful for versioning.
    MAILER_ID CONSTANT VARCHAR2(256) := 'Mailer by Oracle UTL_SMTP';
    --------------------- End Customizable Section ---------------------
    -- A unique string that demarcates boundaries of parts in a multi-part email
    -- The string should not appear inside the body of any part of the email.
    -- Customize this if needed or generate this randomly dynamically.
    BOUNDARY CONSTANT VARCHAR2(256) := '-----7D81B75CCC90D2974F7A1CBD';
    FIRST_BOUNDARY CONSTANT VARCHAR2(256) := '--' || BOUNDARY || utl_tcp.CRLF;
    LAST_BOUNDARY CONSTANT VARCHAR2(256) := '--' || BOUNDARY || '--' ||
    utl_tcp.CRLF;
    -- A MIME type that denotes multi-part email (MIME) messages.
    MULTIPART_MIME_TYPE CONSTANT VARCHAR2(256) := 'multipart/mixed; boundary="'||
    BOUNDARY || '"';
    MAX_BASE64_LINE_WIDTH CONSTANT PLS_INTEGER := 76 / 4 * 3;
    -- Sent clear Html Email
    procedure send_html_mail (p_sender in varchar2 default null,
    p_recipients in varchar2 default null,
    p_subject in varchar2 default null,
    p_data in varchar2 default null,
    p_mime_type in varchar2 default 'text/html; charset=windows-1255');
    -- Sent Html Email with Attachment
    procedure send_html_mail_attach (p_sender in varchar2 default null,
    p_recipients in varchar2 default null,
    p_subject in varchar2 default null,
    p_data in varchar2 default '<b>áå÷ø èåá òåìí - áãé÷ä</b',
    p_mime_type in varchar2 default demo_mail_heb.MULTIPART_MIME_TYPE,
    p_file_name in varchar2 default 'but_choose_file.gif',
    p_file_mime_type in varchar2 default 'application/pdf',
    p_file_URL in varchar2 default 'http://10.172.246.160:7777/i/but_choose_file.gif');
    -- A simple email API for sending email in plain text in a single call.
    -- The format of an email address is one of these:
    -- someone@some-domain
    -- "Someone at some domain" <someone@some-domain>
    -- Someone at some domain <someone@some-domain>
    -- The recipients is a list of email addresses separated by
    -- either a "," or a ";"
    PROCEDURE mail(sender IN VARCHAR2,
              recipients IN VARCHAR2,
              subject IN VARCHAR2,
              message IN VARCHAR2);
    -- Extended email API to send email in HTML or plain text with no size limit.
    -- First, begin the email by begin_mail(). Then, call write_text() repeatedly
    -- to send email in ASCII piece-by-piece. Or, call write_mb_text() to send
    -- email in non-ASCII or multi-byte character set. End the email with
    -- end_mail().
    FUNCTION begin_mail(sender IN VARCHAR2,
              recipients IN VARCHAR2,
              subject IN VARCHAR2,
              mime_type IN VARCHAR2 DEFAULT 'text/plain',
              priority IN PLS_INTEGER DEFAULT NULL)
              RETURN utl_smtp.connection;
    -- Write email body in ASCII
    PROCEDURE write_text(conn IN OUT NOCOPY utl_smtp.connection,
              message IN VARCHAR2);
    -- Write email body in non-ASCII (including multi-byte). The email body
    -- will be sent in the database character set.
    PROCEDURE write_mb_text(conn IN OUT NOCOPY utl_smtp.connection,
                   message IN VARCHAR2);
    -- Write email body in binary
    PROCEDURE write_raw(conn IN OUT NOCOPY utl_smtp.connection,
              message IN RAW);
    -- APIs to send email with attachments. Attachments are sent by sending
    -- emails in "multipart/mixed" MIME format. Specify that MIME format when
    -- beginning an email with begin_mail().
    -- Send a single text attachment.
    PROCEDURE attach_text(conn IN OUT NOCOPY utl_smtp.connection,
                   data IN VARCHAR2,
                   mime_type IN VARCHAR2 DEFAULT 'text/plain',
                   inline IN BOOLEAN DEFAULT TRUE,
                   filename IN VARCHAR2 DEFAULT NULL,
              last IN BOOLEAN DEFAULT FALSE);
    -- Send a binary attachment. The attachment will be encoded in Base-64
    -- encoding format.
    PROCEDURE attach_base64(conn IN OUT NOCOPY utl_smtp.connection,
                   data IN RAW,
                   mime_type IN VARCHAR2 DEFAULT 'application/octet',
                   inline IN BOOLEAN DEFAULT TRUE,
                   filename IN VARCHAR2 DEFAULT NULL,
                   last IN BOOLEAN DEFAULT FALSE);
    -- Send an attachment with no size limit. First, begin the attachment
    -- with begin_attachment(). Then, call write_text repeatedly to send
    -- the attachment piece-by-piece. If the attachment is text-based but
    -- in non-ASCII or multi-byte character set, use write_mb_text() instead.
    -- To send binary attachment, the binary content should first be
    -- encoded in Base-64 encoding format using the demo package for 8i,
    -- or the native one in 9i. End the attachment with end_attachment.
    PROCEDURE begin_attachment(conn IN OUT NOCOPY utl_smtp.connection,
                   mime_type IN VARCHAR2 DEFAULT 'text/plain',
                   inline IN BOOLEAN DEFAULT TRUE,
                   filename IN VARCHAR2 DEFAULT NULL,
                   transfer_enc IN VARCHAR2 DEFAULT NULL);
    -- End the attachment.
    PROCEDURE end_attachment(conn IN OUT NOCOPY utl_smtp.connection,
                   last IN BOOLEAN DEFAULT FALSE);
    -- End the email.
    PROCEDURE end_mail(conn IN OUT NOCOPY utl_smtp.connection);
    -- Extended email API to send multiple emails in a session for better
    -- performance. First, begin an email session with begin_session.
    -- Then, begin each email with a session by calling begin_mail_in_session
    -- instead of begin_mail. End the email with end_mail_in_session instead
    -- of end_mail. End the email session by end_session.
    FUNCTION begin_session RETURN utl_smtp.connection;
    -- Begin an email in a session.
    PROCEDURE begin_mail_in_session(conn IN OUT NOCOPY utl_smtp.connection,
                        sender IN VARCHAR2,
                        recipients IN VARCHAR2,
                        subject IN VARCHAR2,
    --                     mime_type IN VARCHAR2 DEFAULT 'text/plain; charset=windows-1255',
              mime_type IN VARCHAR2 DEFAULT 'text/plain',
                        priority IN PLS_INTEGER DEFAULT NULL);
    -- End an email in a session.
    PROCEDURE end_mail_in_session(conn IN OUT NOCOPY utl_smtp.connection);
    -- End an email session.
    PROCEDURE end_session(conn IN OUT NOCOPY utl_smtp.connection);
    END;
    CREATE OR REPLACE PACKAGE BODY demo_mail_heb IS
    -- Sent clear Html Email
    procedure send_html_mail (p_sender in varchar2 default null,
    p_recipients in varchar2 default null,
    p_subject in varchar2 default null,
    p_data in varchar2 default null,
    p_mime_type in varchar2 default 'text/html; charset=windows-1255')
    Is
    conn utl_smtp.connection;
    BEGIN
    conn := demo_mail_heb.begin_mail(
    sender => p_sender,
    recipients => p_recipients,
    subject => p_subject,
    mime_type => p_mime_type);
    demo_mail_heb.write_text(
    conn => conn,
    message => p_data);
    demo_mail_heb.end_mail( conn => conn );
    END;
    -- Sent Html Email with Attachment
    procedure send_html_mail_attach (p_sender in varchar2 default null,
    p_recipients in varchar2 default null,
    p_subject in varchar2 default null,
    p_data in varchar2 default '<b>áå÷ø èåá òåìí - áãé÷ä</b',
    p_mime_type in varchar2 default demo_mail_heb.MULTIPART_MIME_TYPE,
    p_file_name in varchar2 default 'but_choose_file.gif',
    p_file_mime_type in varchar2 default 'application/pdf',
    p_file_URL in varchar2 default 'http://10.172.246.160:7777/i/but_choose_file.gif')
    is
    conn utl_smtp.connection;
    req utl_http.req;
    resp utl_http.resp;
    data RAW(200);
    begin
    conn := demo_mail_heb.begin_mail(
    sender => p_sender,
    recipients => p_recipients,
    subject => p_subject,
    mime_type => p_mime_type);
    demo_mail_heb.attach_text(
    conn => conn,
    data => p_data,
    mime_type => 'text/html');
    demo_mail_heb.begin_attachment(
    conn => conn,
    mime_type => p_file_mime_type,
    inline => TRUE,
    filename => p_file_name,
    transfer_enc => 'base64');
    -- In writing Base-64 encoded text following the MIME format below,
    -- the MIME format requires that a long piece of data must be splitted
    -- into multiple lines and each line of encoded data cannot exceed
    -- 80 characters, including the new-line characters. Also, when
    -- splitting the original data into pieces, the length of each chunk
    -- of data before encoding must be a multiple of 3, except for the
    -- last chunk. The constant demo_mail_heb.MAX_BASE64_LINE_WIDTH
    -- (76 / 4 * 3 = 57) is the maximum length (in bytes) of each chunk
    -- of data before encoding.
    Utl_Http.set_proxy('www-proxy.us.oracle.com', 'oracle.com');
    req := utl_http.begin_request(p_file_URL);
    resp := utl_http.get_response(req);
    BEGIN
    LOOP
    utl_http.read_raw(resp, data, demo_mail_heb.MAX_BASE64_LINE_WIDTH);
    demo_mail_heb.write_raw(
    conn => conn,
    message => utl_encode.base64_encode(data));
    END LOOP;
    EXCEPTION
    WHEN utl_http.end_of_body THEN
    utl_http.end_response(resp);
    END;
    demo_mail_heb.end_attachment( conn => conn );
    demo_mail_heb.end_mail( conn => conn );
    end;
    -- Return the next email address in the list of email addresses, separated
    -- by either a "," or a ";". The format of mailbox may be in one of these:
    -- someone@some-domain
    -- "Someone at some domain" <someone@some-domain>
    -- Someone at some domain <someone@some-domain>
    FUNCTION get_address(addr_list IN OUT VARCHAR2) RETURN VARCHAR2 IS
    addr VARCHAR2(256);
    i pls_integer;
    FUNCTION lookup_unquoted_char(str IN VARCHAR2,
                        chrs IN VARCHAR2) RETURN pls_integer AS
    c VARCHAR2(5);
    i pls_integer;
    len pls_integer;
    inside_quote BOOLEAN;
    BEGIN
    inside_quote := false;
    i := 1;
    len := length(str);
    WHILE (i <= len) LOOP
         c := substr(str, i, 1);
         IF (inside_quote) THEN
         IF (c = '"') THEN
         inside_quote := false;
         ELSIF (c = '\') THEN
         i := i + 1; -- Skip the quote character
         END IF;
         GOTO next_char;
         END IF;
         IF (c = '"') THEN
         inside_quote := true;
         GOTO next_char;
         END IF;
         IF (instr(chrs, c) >= 1) THEN
         RETURN i;
         END IF;
         <<next_char>>
         i := i + 1;
    END LOOP;
    RETURN 0;
    END;
    BEGIN
    addr_list := ltrim(addr_list);
    i := lookup_unquoted_char(addr_list, ',;');
    IF (i >= 1) THEN
    addr := substr(addr_list, 1, i - 1);
    addr_list := substr(addr_list, i + 1);
    ELSE
    addr := addr_list;
    addr_list := '';
    END IF;
    i := lookup_unquoted_char(addr, '<');
    IF (i >= 1) THEN
    addr := substr(addr, i + 1);
    i := instr(addr, '>');
    IF (i >= 1) THEN
         addr := substr(addr, 1, i - 1);
    END IF;
    END IF;
    RETURN addr;
    END;
    -- Write a MIME header
    PROCEDURE write_mime_header(conn IN OUT NOCOPY utl_smtp.connection,
                   name IN VARCHAR2,
                   value IN VARCHAR2) IS
    BEGIN
    -- utl_smtp.write_data(conn, name || ': ' || value || utl_tcp.CRLF);
    utl_smtp.write_raw_data(conn, UTL_RAW.CAST_TO_RAW(name || ': ' ||value || utl_tcp.CRLF));
    END;
    -- Mark a message-part boundary. Set <last> to TRUE for the last boundary.
    PROCEDURE write_boundary(conn IN OUT NOCOPY utl_smtp.connection,
                   last IN BOOLEAN DEFAULT FALSE) AS
    BEGIN
    IF (last) THEN
    utl_smtp.write_data(conn, LAST_BOUNDARY);
    ELSE
    utl_smtp.write_data(conn, FIRST_BOUNDARY);
    END IF;
    END;
    PROCEDURE mail(sender IN VARCHAR2,
              recipients IN VARCHAR2,
              subject IN VARCHAR2,
              message IN VARCHAR2) IS
    conn utl_smtp.connection;
    BEGIN
    conn := begin_mail(sender, recipients, subject);
    write_text(conn, message);
    end_mail(conn);
    END;
    FUNCTION begin_mail(sender IN VARCHAR2,
              recipients IN VARCHAR2,
              subject IN VARCHAR2,
              mime_type IN VARCHAR2 DEFAULT 'text/plain',
              priority IN PLS_INTEGER DEFAULT NULL)
              RETURN utl_smtp.connection IS
    conn utl_smtp.connection;
    BEGIN
    conn := begin_session;
    begin_mail_in_session(conn, sender, recipients, subject, mime_type,
    priority);
    RETURN conn;
    END;
    PROCEDURE write_text(conn IN OUT NOCOPY utl_smtp.connection,
              message IN VARCHAR2) IS
    BEGIN
    utl_smtp.write_raw_data(conn, utl_raw.cast_to_raw(CONVERT(message,'IW8ISO8859P8')));
    END;
    PROCEDURE write_mb_text(conn IN OUT NOCOPY utl_smtp.connection,
                   message IN VARCHAR2) IS
    BEGIN
    utl_smtp.write_raw_data(conn, utl_raw.cast_to_raw(message));
    END;
    PROCEDURE write_raw(conn IN OUT NOCOPY utl_smtp.connection,
              message IN RAW) IS
    BEGIN
    utl_smtp.write_raw_data(conn, message);
    END;
    PROCEDURE attach_text(conn IN OUT NOCOPY utl_smtp.connection,
                   data IN VARCHAR2,
                   mime_type IN VARCHAR2 DEFAULT 'text/plain',
                   inline IN BOOLEAN DEFAULT TRUE,
                   filename IN VARCHAR2 DEFAULT NULL,
              last IN BOOLEAN DEFAULT FALSE) IS
    BEGIN
    begin_attachment(conn, mime_type, inline, filename);
    write_text(conn, data);
    end_attachment(conn, last);
    END;
    PROCEDURE attach_base64(conn IN OUT NOCOPY utl_smtp.connection,
                   data IN RAW,
                   mime_type IN VARCHAR2 DEFAULT 'application/octet',
                   inline IN BOOLEAN DEFAULT TRUE,
                   filename IN VARCHAR2 DEFAULT NULL,
                   last IN BOOLEAN DEFAULT FALSE) IS
    i PLS_INTEGER;
    len PLS_INTEGER;
    BEGIN
    begin_attachment(conn, mime_type, inline, filename, 'base64');
    -- Split the Base64-encoded attachment into multiple lines
    i := 1;
    len := utl_raw.length(data);
    WHILE (i < len) LOOP
    IF (i + MAX_BASE64_LINE_WIDTH < len) THEN
         utl_smtp.write_raw_data(conn,
         utl_encode.base64_encode(utl_raw.substr(data, i,
         MAX_BASE64_LINE_WIDTH)));
    ELSE
         utl_smtp.write_raw_data(conn,
         utl_encode.base64_encode(utl_raw.substr(data, i)));
    END IF;
    utl_smtp.write_data(conn, utl_tcp.CRLF);
    i := i + MAX_BASE64_LINE_WIDTH;
    END LOOP;
    end_attachment(conn, last);
    END;
    PROCEDURE begin_attachment(conn IN OUT NOCOPY utl_smtp.connection,
                   mime_type IN VARCHAR2 DEFAULT 'text/plain',
                   inline IN BOOLEAN DEFAULT TRUE,
                   filename IN VARCHAR2 DEFAULT NULL,
                   transfer_enc IN VARCHAR2 DEFAULT NULL) IS
    BEGIN
    write_boundary(conn);
    write_mime_header(conn, 'Content-Type', mime_type);
    IF (filename IS NOT NULL) THEN
    IF (inline) THEN
         write_mime_header(conn, 'Content-Disposition',
         'inline; filename="'||filename||'"');
    ELSE
         write_mime_header(conn, 'Content-Disposition',
         'attachment; filename="'||filename||'"');
    END IF;
    END IF;
    IF (transfer_enc IS NOT NULL) THEN
    write_mime_header(conn, 'Content-Transfer-Encoding', transfer_enc);
    END IF;
    utl_smtp.write_data(conn, utl_tcp.CRLF);
    END;
    PROCEDURE end_attachment(conn IN OUT NOCOPY utl_smtp.connection,
                   last IN BOOLEAN DEFAULT FALSE) IS
    BEGIN
    utl_smtp.write_data(conn, utl_tcp.CRLF);
    IF (last) THEN
    write_boundary(conn, last);
    END IF;
    END;
    PROCEDURE end_mail(conn IN OUT NOCOPY utl_smtp.connection) IS
    BEGIN
    end_mail_in_session(conn);
    end_session(conn);
    END;
    FUNCTION begin_session RETURN utl_smtp.connection IS
    conn utl_smtp.connection;
    BEGIN
    -- open SMTP connection
    conn := utl_smtp.open_connection(smtp_host, smtp_port);
    utl_smtp.helo(conn, smtp_domain);
    RETURN conn;
    END;
    PROCEDURE begin_mail_in_session(conn IN OUT NOCOPY utl_smtp.connection,
                        sender IN VARCHAR2,
                        recipients IN VARCHAR2,
                        subject IN VARCHAR2,
                        mime_type IN VARCHAR2 DEFAULT 'text/plain',
                   --     mime_type IN VARCHAR2 DEFAULT 'text/plain; charset=windows-1255',
                        priority IN PLS_INTEGER DEFAULT NULL) IS
    my_recipients VARCHAR2(32767) := recipients;
    my_sender VARCHAR2(32767) := sender;
    BEGIN
    -- Specify sender's address (our server allows bogus address
    -- as long as it is a full email address ([email protected]).
    utl_smtp.mail(conn, get_address(my_sender));
    -- Specify recipient(s) of the email.
    WHILE (my_recipients IS NOT NULL) LOOP
    utl_smtp.rcpt(conn, get_address(my_recipients));
    END LOOP;
    -- Start body of email
    utl_smtp.open_data(conn);
    -- Set "From" MIME header
    write_mime_header(conn, 'From', sender);
    -- Set "To" MIME header
    write_mime_header(conn, 'To', recipients);
    -- Set "Subject" MIME header
    write_mime_header(conn, 'Subject', subject);
    -- Set "Content-Type" MIME header
    write_mime_header(conn, 'Content-Type', mime_type);
    -- Set "X-Mailer" MIME header
    write_mime_header(conn, 'X-Mailer', MAILER_ID);
    -- Set priority:
    -- High Normal Low
    -- 1 2 3 4 5
    IF (priority IS NOT NULL) THEN
    write_mime_header(conn, 'X-Priority', priority);
    END IF;
    -- Send an empty line to denotes end of MIME headers and
    -- beginning of message body.
    utl_smtp.write_data(conn, utl_tcp.CRLF);
    IF (mime_type LIKE 'multipart/mixed%') THEN
    write_text(conn, 'This is a multi-part message in MIME format.' ||
         utl_tcp.crlf);
    END IF;
    END;
    PROCEDURE end_mail_in_session(conn IN OUT NOCOPY utl_smtp.connection) IS
    BEGIN
    utl_smtp.close_data(conn);
    END;
    PROCEDURE end_session(conn IN OUT NOCOPY utl_smtp.connection) IS
    BEGIN
    utl_smtp.quit(conn);
    END;
    END;

    Hello All,
    Small modification - use this package and not the above
    HERE IS A WORKING CODE FOR SENDING HEBREW MESSAGES (INCLUDING SUBJECT IN UTF-8 APPEAR IN ALL EMAIL CLIENTS I HAVE CHECKED) + ATTACHMENTS
    Code attached below is supplied as is with no support. anyhow if help is needed , please contact me via [email protected]
    ============================================================================
    CREATE OR REPLACE PACKAGE demo_mail_heb IS
    ----------------------- Customizable Section -----------------------
    -- Customize the SMTP host, port and your domain name below.
    smtp_host VARCHAR2(256) := pst_ajax.getParameter('EMAIL_SMTP_HOST');
    smtp_port PLS_INTEGER := pst_ajax.getParameter('EMAIL_SMTP_PORT');
    smtp_domain VARCHAR2(256) := pst_ajax.getParameter('EMAIL_SMTP_DOMAIN');
    -- Customize the signature that will appear in the email's MIME header.
    -- Useful for versioning.
    MAILER_ID CONSTANT VARCHAR2(256) := 'Mailer by Oracle UTL_SMTP';
    --------------------- End Customizable Section ---------------------
    -- A unique string that demarcates boundaries of parts in a multi-part email
    -- The string should not appear inside the body of any part of the email.
    -- Customize this if needed or generate this randomly dynamically.
    BOUNDARY CONSTANT VARCHAR2(256) := '-----7D81B75CCC90D2974F7A1CBD';
    FIRST_BOUNDARY CONSTANT VARCHAR2(256) := '--' || BOUNDARY || utl_tcp.CRLF;
    LAST_BOUNDARY CONSTANT VARCHAR2(256) := '--' || BOUNDARY || '--' ||
    utl_tcp.CRLF;
    -- A MIME type that denotes multi-part email (MIME) messages.
    MULTIPART_MIME_TYPE CONSTANT VARCHAR2(256) := 'multipart/mixed; boundary="'||
    BOUNDARY || '"';
    MAX_BASE64_LINE_WIDTH CONSTANT PLS_INTEGER := 76 / 4 * 3;
    -- Sent clear Html Email
    procedure send_html_mail (p_sender in varchar2 default null,
    p_recipients in varchar2 default null,
    p_subject in varchar2 default null,
    p_data in varchar2 default null,
    p_mime_type in varchar2 default 'text/html; charset=windows-1255');
    -- Sent Html Email with Attachment
    procedure send_html_mail_attach (p_sender in varchar2 default null,
    p_recipients in varchar2 default null,
    p_subject in varchar2 default null,
    p_data in varchar2 default '<b>áå÷ø èåá òåìí - áãé÷ä</b',
    p_mime_type in varchar2 default 'text/html; charset=windows-1255',
    p_file_name in varchar2 default 'but_choose_file.gif',
    p_file_mime_type in varchar2 default 'application/pdf',
    p_file_URL in varchar2 default 'http://10.172.246.160:7777/i/but_choose_file.gif');
    -- A simple email API for sending email in plain text in a single call.
    -- The format of an email address is one of these:
    -- someone@some-domain
    -- "Someone at some domain" <someone@some-domain>
    -- Someone at some domain <someone@some-domain>
    -- The recipients is a list of email addresses separated by
    -- either a "," or a ";"
    PROCEDURE mail(sender IN VARCHAR2,
              recipients IN VARCHAR2,
              subject IN VARCHAR2,
              message IN VARCHAR2);
    -- Extended email API to send email in HTML or plain text with no size limit.
    -- First, begin the email by begin_mail(). Then, call write_text() repeatedly
    -- to send email in ASCII piece-by-piece. Or, call write_mb_text() to send
    -- email in non-ASCII or multi-byte character set. End the email with
    -- end_mail().
    FUNCTION begin_mail(sender IN VARCHAR2,
              recipients IN VARCHAR2,
              subject IN VARCHAR2,
              mime_type IN VARCHAR2 DEFAULT 'text/plain',
              priority IN PLS_INTEGER DEFAULT NULL)
              RETURN utl_smtp.connection;
    -- Write email body in ASCII
    PROCEDURE write_text(conn IN OUT NOCOPY utl_smtp.connection,
              message IN VARCHAR2);
    -- Write email body in non-ASCII (including multi-byte). The email body
    -- will be sent in the database character set.
    PROCEDURE write_mb_text(conn IN OUT NOCOPY utl_smtp.connection,
                   message IN VARCHAR2);
    -- Write email body in binary
    PROCEDURE write_raw(conn IN OUT NOCOPY utl_smtp.connection,
              message IN RAW);
    -- APIs to send email with attachments. Attachments are sent by sending
    -- emails in "multipart/mixed" MIME format. Specify that MIME format when
    -- beginning an email with begin_mail().
    -- Send a single text attachment.
    PROCEDURE attach_text(conn IN OUT NOCOPY utl_smtp.connection,
                   data IN VARCHAR2,
                   mime_type IN VARCHAR2 DEFAULT 'text/plain',
                   inline IN BOOLEAN DEFAULT TRUE,
                   filename IN VARCHAR2 DEFAULT NULL,
              last IN BOOLEAN DEFAULT FALSE);
    -- Send a binary attachment. The attachment will be encoded in Base-64
    -- encoding format.
    PROCEDURE attach_base64(conn IN OUT NOCOPY utl_smtp.connection,
                   data IN RAW,
                   mime_type IN VARCHAR2 DEFAULT 'application/octet',
                   inline IN BOOLEAN DEFAULT TRUE,
                   filename IN VARCHAR2 DEFAULT NULL,
                   last IN BOOLEAN DEFAULT FALSE);
    -- Send an attachment with no size limit. First, begin the attachment
    -- with begin_attachment(). Then, call write_text repeatedly to send
    -- the attachment piece-by-piece. If the attachment is text-based but
    -- in non-ASCII or multi-byte character set, use write_mb_text() instead.
    -- To send binary attachment, the binary content should first be
    -- encoded in Base-64 encoding format using the demo package for 8i,
    -- or the native one in 9i. End the attachment with end_attachment.
    PROCEDURE begin_attachment(conn IN OUT NOCOPY utl_smtp.connection,
                   mime_type IN VARCHAR2 DEFAULT 'text/plain',
                   inline IN BOOLEAN DEFAULT TRUE,
                   filename IN VARCHAR2 DEFAULT NULL,
                   transfer_enc IN VARCHAR2 DEFAULT NULL);
    -- End the attachment.
    PROCEDURE end_attachment(conn IN OUT NOCOPY utl_smtp.connection,
                   last IN BOOLEAN DEFAULT FALSE);
    -- End the email.
    PROCEDURE end_mail(conn IN OUT NOCOPY utl_smtp.connection);
    -- Extended email API to send multiple emails in a session for better
    -- performance. First, begin an email session with begin_session.
    -- Then, begin each email with a session by calling begin_mail_in_session
    -- instead of begin_mail. End the email with end_mail_in_session instead
    -- of end_mail. End the email session by end_session.
    FUNCTION begin_session RETURN utl_smtp.connection;
    -- Handling the Email Subject Line
    function mimeheader_encode(
    p_str varchar2
    , p_charset varchar2 := 'UTF-8') return varchar2;
    -- Begin an email in a session.
    PROCEDURE begin_mail_in_session(conn IN OUT NOCOPY utl_smtp.connection,
                        sender IN VARCHAR2,
                        recipients IN VARCHAR2,
                        subject IN VARCHAR2,
    --                     mime_type IN VARCHAR2 DEFAULT 'text/plain; charset=windows-1255',
              mime_type IN VARCHAR2 DEFAULT 'text/plain',
                        priority IN PLS_INTEGER DEFAULT NULL);
    -- End an email in a session.
    PROCEDURE end_mail_in_session(conn IN OUT NOCOPY utl_smtp.connection);
    -- End an email session.
    PROCEDURE end_session(conn IN OUT NOCOPY utl_smtp.connection);
    END;
    CREATE OR REPLACE PACKAGE BODY demo_mail_heb IS
    -- Sent clear Html Email
    procedure send_html_mail (p_sender in varchar2 default null,
    p_recipients in varchar2 default null,
    p_subject in varchar2 default null,
    p_data in varchar2 default null,
    p_mime_type in varchar2 default 'text/html; charset=windows-1255')
    Is
    conn utl_smtp.connection;
    BEGIN
    conn := demo_mail_heb.begin_mail(
    sender => p_sender,
    recipients => p_recipients,
    subject => p_subject,
    mime_type => 'text/html; charset=UTF-8');--p_mime_type);
    demo_mail_heb.write_text(
    conn => conn,
    message => p_data);
    demo_mail_heb.end_mail( conn => conn );
    END;
    -- Sent Html Email with Attachment
    procedure send_html_mail_attach (p_sender in varchar2 default null,
    p_recipients in varchar2 default null,
    p_subject in varchar2 default null,
    p_data in varchar2 default '<b>áå÷ø èåá òåìí - áãé÷ä</b',
    p_mime_type in varchar2 default 'text/html; charset=windows-1255',
    p_file_name in varchar2 default 'but_choose_file.gif',
    p_file_mime_type in varchar2 default 'application/pdf',
    p_file_URL in varchar2 default 'http://10.172.246.160:7777/i/but_choose_file.gif')
    is
    conn utl_smtp.connection;
    req utl_http.req;
    resp utl_http.resp;
    data RAW(200);
    v_mime_type varchar2(32767):=demo_mail.MULTIPART_MIME_TYPE;
    begin
    conn := demo_mail_heb.begin_mail(
    sender => p_sender,
    recipients => p_recipients,
    subject => p_subject,
    mime_type => v_mime_type);
    demo_mail_heb.attach_text(
    conn => conn,
    data => p_data,
    mime_type => 'text/html');
    demo_mail_heb.begin_attachment(
    conn => conn,
    mime_type => p_file_mime_type,
    inline => TRUE,
    filename => p_file_name,
    transfer_enc => 'base64');
    -- In writing Base-64 encoded text following the MIME format below,
    -- the MIME format requires that a long piece of data must be splitted
    -- into multiple lines and each line of encoded data cannot exceed
    -- 80 characters, including the new-line characters. Also, when
    -- splitting the original data into pieces, the length of each chunk
    -- of data before encoding must be a multiple of 3, except for the
    -- last chunk. The constant demo_mail_heb.MAX_BASE64_LINE_WIDTH
    -- (76 / 4 * 3 = 57) is the maximum length (in bytes) of each chunk
    -- of data before encoding.
    req := utl_http.begin_request(p_file_URL);
    resp := utl_http.get_response(req);
    BEGIN
    LOOP
    utl_http.read_raw(resp, data, demo_mail_heb.MAX_BASE64_LINE_WIDTH);
    demo_mail_heb.write_raw(
    conn => conn,
    message => utl_encode.base64_encode(data));
    END LOOP;
    EXCEPTION
    WHEN utl_http.end_of_body THEN
    utl_http.end_response(resp);
    END;
    demo_mail_heb.end_attachment( conn => conn );
    demo_mail_heb.end_mail( conn => conn );
    end;
    -- Return the next email address in the list of email addresses, separated
    -- by either a "," or a ";". The format of mailbox may be in one of these:
    -- someone@some-domain
    -- "Someone at some domain" <someone@some-domain>
    -- Someone at some domain <someone@some-domain>
    FUNCTION get_address(addr_list IN OUT VARCHAR2) RETURN VARCHAR2 IS
    addr VARCHAR2(256);
    i pls_integer;
    FUNCTION lookup_unquoted_char(str IN VARCHAR2,
    chrs IN VARCHAR2) RETURN pls_integer AS
    c VARCHAR2(5);
    i pls_integer;
    len pls_integer;
    inside_quote BOOLEAN;
    BEGIN
    inside_quote := false;
    i := 1;
    len := length(str);
    WHILE (i <= len) LOOP
    c := substr(str, i, 1);
    IF (inside_quote) THEN
    IF (c = '"') THEN
    inside_quote := false;
    ELSIF (c = '\') THEN
    i := i + 1; -- Skip the quote character
    END IF;
    GOTO next_char;
    END IF;
    IF (c = '"') THEN
    inside_quote := true;
    GOTO next_char;
    END IF;
    IF (instr(chrs, c) >= 1) THEN
    RETURN i;
    END IF;
    <<next_char>>
    i := i + 1;
    END LOOP;
    RETURN 0;
    END;
    BEGIN
    addr_list := ltrim(addr_list);
    i := lookup_unquoted_char(addr_list, ',;');
    IF (i >= 1) THEN
    addr := substr(addr_list, 1, i - 1);
    addr_list := substr(addr_list, i + 1);
    ELSE
    addr := addr_list;
    addr_list := '';
    END IF;
    i := lookup_unquoted_char(addr, '<');
    IF (i >= 1) THEN
    addr := substr(addr, i + 1);
    i := instr(addr, '>');
    IF (i >= 1) THEN
    addr := substr(addr, 1, i - 1);
    END IF;
    END IF;
    RETURN addr;
    END;
    -- Write a MIME header
    PROCEDURE write_mime_header(conn IN OUT NOCOPY utl_smtp.connection,
    name IN VARCHAR2,
    value IN VARCHAR2) IS
    BEGIN
    -- utl_smtp.write_data(conn, name || ': ' || value || utl_tcp.CRLF);
    utl_smtp.write_raw_data(conn, UTL_RAW.CAST_TO_RAW(name || ': ' ||value || utl_tcp.CRLF));
    END;
    -- Mark a message-part boundary. Set <last> to TRUE for the last boundary.
    PROCEDURE write_boundary(conn IN OUT NOCOPY utl_smtp.connection,
    last IN BOOLEAN DEFAULT FALSE) AS
    BEGIN
    IF (last) THEN
    utl_smtp.write_data(conn, LAST_BOUNDARY);
    ELSE
    utl_smtp.write_data(conn, FIRST_BOUNDARY);
    END IF;
    END;
    PROCEDURE mail(sender IN VARCHAR2,
    recipients IN VARCHAR2,
    subject IN VARCHAR2,
    message IN VARCHAR2) IS
    conn utl_smtp.connection;
    BEGIN
    conn := begin_mail(sender, recipients, subject);
    write_text(conn, message);
    end_mail(conn);
    END;
    FUNCTION begin_mail(sender IN VARCHAR2,
    recipients IN VARCHAR2,
    subject IN VARCHAR2,
    mime_type IN VARCHAR2 DEFAULT 'text/plain',
    priority IN PLS_INTEGER DEFAULT NULL)
    RETURN utl_smtp.connection IS
    conn utl_smtp.connection;
    BEGIN
    conn := begin_session;
    begin_mail_in_session(conn, sender, recipients, subject, mime_type,
    priority);
    RETURN conn;
    END;
    PROCEDURE write_text(conn IN OUT NOCOPY utl_smtp.connection,
    message IN VARCHAR2) IS
    BEGIN
    utl_smtp.write_raw_data(conn, utl_raw.cast_to_raw(CONVERT(message,'IW8ISO8859P8')));
    -- utl_smtp.write_raw_data(conn, utl_raw.cast_to_raw(message));
    END;
    PROCEDURE write_mb_text(conn IN OUT NOCOPY utl_smtp.connection,
    message IN VARCHAR2) IS
    BEGIN
    utl_smtp.write_raw_data(conn, utl_raw.cast_to_raw(message));
    END;
    PROCEDURE write_raw(conn IN OUT NOCOPY utl_smtp.connection,
    message IN RAW) IS
    BEGIN
    utl_smtp.write_raw_data(conn, message);
    END;
    PROCEDURE attach_text(conn IN OUT NOCOPY utl_smtp.connection,
    data IN VARCHAR2,
    mime_type IN VARCHAR2 DEFAULT 'text/plain',
    inline IN BOOLEAN DEFAULT TRUE,
    filename IN VARCHAR2 DEFAULT NULL,
    last IN BOOLEAN DEFAULT FALSE) IS
    BEGIN
    begin_attachment(conn, mime_type, inline, filename);
    write_text(conn, data);
    end_attachment(conn, last);
    END;
    PROCEDURE attach_base64(conn IN OUT NOCOPY utl_smtp.connection,
    data IN RAW,
    mime_type IN VARCHAR2 DEFAULT 'application/octet',
    inline IN BOOLEAN DEFAULT TRUE,
    filename IN VARCHAR2 DEFAULT NULL,
    last IN BOOLEAN DEFAULT FALSE) IS
    i PLS_INTEGER;
    len PLS_INTEGER;
    BEGIN
    begin_attachment(conn, mime_type, inline, filename, 'base64');
    -- Split the Base64-encoded attachment into multiple lines
    i := 1;
    len := utl_raw.length(data);
    WHILE (i < len) LOOP
    IF (i + MAX_BASE64_LINE_WIDTH < len) THEN
    utl_smtp.write_raw_data(conn,
    utl_encode.base64_encode(utl_raw.substr(data, i,
    MAX_BASE64_LINE_WIDTH)));
    ELSE
    utl_smtp.write_raw_data(conn,
    utl_encode.base64_encode(utl_raw.substr(data, i)));
    END IF;
    utl_smtp.write_data(conn, utl_tcp.CRLF);
    i := i + MAX_BASE64_LINE_WIDTH;
    END LOOP;
    end_attachment(conn, last);
    END;
    PROCEDURE begin_attachment(conn IN OUT NOCOPY utl_smtp.connection,
    mime_type IN VARCHAR2 DEFAULT 'text/plain',
    inline IN BOOLEAN DEFAULT TRUE,
    filename IN VARCHAR2 DEFAULT NULL,
    transfer_enc IN VARCHAR2 DEFAULT NULL) IS
    BEGIN
    write_boundary(conn);
    write_mime_header(conn, 'Content-Type', mime_type);
    IF (filename IS NOT NULL) THEN
    IF (inline) THEN
    write_mime_header(conn, 'Content-Disposition',
    'inline; filename="'||filename||'"');
    ELSE
    write_mime_header(conn, 'Content-Disposition',
    'attachment; filename="'||filename||'"');
    END IF;
    END IF;
    IF (transfer_enc IS NOT NULL) THEN
    write_mime_header(conn, 'Content-Transfer-Encoding', transfer_enc);
    END IF;
    utl_smtp.write_data(conn, utl_tcp.CRLF);
    END;
    PROCEDURE end_attachment(conn IN OUT NOCOPY utl_smtp.connection,
    last IN BOOLEAN DEFAULT FALSE) IS
    BEGIN
    utl_smtp.write_data(conn, utl_tcp.CRLF);
    IF (last) THEN
    write_boundary(conn, last);
    END IF;
    END;
    PROCEDURE end_mail(conn IN OUT NOCOPY utl_smtp.connection) IS
    BEGIN
    end_mail_in_session(conn);
    end_session(conn);
    END;
    FUNCTION begin_session RETURN utl_smtp.connection IS
    conn utl_smtp.connection;
    BEGIN
    -- open SMTP connection
    conn := utl_smtp.open_connection(smtp_host, smtp_port);
    utl_smtp.helo(conn, smtp_domain);
    RETURN conn;
    END;
    -- Handling the Email Subject Line
    function mimeheader_encode(
    p_str varchar2
    , p_charset varchar2 := 'UTF-8') return varchar2 is
    l_str varchar2(2000);
    begin
    l_str:=utl_raw.cast_to_varchar2(utl_encode.quoted_printable_encode(utl_raw.cast_to_raw(p_str)));
    l_str:=replace(l_str,'='||chr(13)||chr(10),''); --unfold the data
    l_str:=replace(l_str,'?','=3f'); --quote question marks
    l_str:=replace(l_str,' ','=20'); --quote spaces
    l_str:='=?'||p_charset||'?Q?'||l_str||'?='; -- add prefix and suffix
    return l_str;
    end;
    PROCEDURE begin_mail_in_session(conn IN OUT NOCOPY utl_smtp.connection,
    sender IN VARCHAR2,
    recipients IN VARCHAR2,
    subject IN VARCHAR2,
    mime_type IN VARCHAR2 DEFAULT 'text/plain',
    -- mime_type IN VARCHAR2 DEFAULT 'text/plain; charset=windows-1255',
    priority IN PLS_INTEGER DEFAULT NULL) IS
    my_recipients VARCHAR2(32767) := recipients;
    my_sender VARCHAR2(32767) := sender;
    BEGIN
    -- Specify sender's address (our server allows bogus address
    -- as long as it is a full email address ([email protected]).
    utl_smtp.mail(conn, get_address(my_sender));
    -- Specify recipient(s) of the email.
    WHILE (my_recipients IS NOT NULL) LOOP
    utl_smtp.rcpt(conn, get_address(my_recipients));
    END LOOP;
    -- Start body of email
    utl_smtp.open_data(conn);
    -- Set "From" MIME header
    write_mime_header(conn, 'From', sender);
    -- Set "To" MIME header
    write_mime_header(conn, 'To', recipients);
    -- Set "Content-Type" MIME header
    write_mime_header(conn, 'Content-Type', mime_type);
    -- write_mime_header(conn, 'Content-Type', 'text/html; charset=UTF-8');
    -- Set "Subject" MIME header
    -- write_mime_header(conn, 'Subject', subject);
    -- write_mime_header(conn, 'Subject', CONVERT(subject,'IW8ISO8859P8'));
    write_mime_header(conn, 'Subject',mimeheader_encode(p_str => subject,p_charset => 'UTF-8'));
    -- write_mime_header(conn, 'Subject',CONVERT(subject,'IW8MSWIN1255'));
    -- Set "X-Mailer" MIME header
    write_mime_header(conn, 'X-Mailer', MAILER_ID);
    -- Set priority:
    -- High Normal Low
    -- 1 2 3 4 5
    IF (priority IS NOT NULL) THEN
    write_mime_header(conn, 'X-Priority', priority);
    END IF;
    -- Send an empty line to denotes end of MIME headers and
    -- beginning of message body.
    utl_smtp.write_data(conn, utl_tcp.CRLF);
    IF (mime_type LIKE 'multipart/mixed%') THEN
    write_text(conn, 'This is a multi-part message in MIME format.' ||
    utl_tcp.crlf);
    END IF;
    END;
    PROCEDURE end_mail_in_session(conn IN OUT NOCOPY utl_smtp.connection) IS
    BEGIN
    utl_smtp.close_data(conn);
    END;
    PROCEDURE end_session(conn IN OUT NOCOPY utl_smtp.connection) IS
    BEGIN
    utl_smtp.quit(conn);
    END;
    END;

  • Problem by  Sending an Email with attached Adobe Interactive Form (Code)

    Thanks. I have written Programm, but it does not work as i want it to do. I will send an Email with attached Adobe Interactive Firm to [email protected]. I tried it with "*lo_recipient = cl_sapuser_bcs=>create( sy-uname )" at the marked(bold, fat) position. It worked but the Email was send to my SAP-Account, but i want to send to [email protected], so I tried this (see at code in bold, fat):
    lo_rec TYPE adr6-smtp_addr VALUE '[email protected]'. " Empfänger Receiver
    lo_recipient = cl_cam_address_bcs=>create_internet_address( lo_rec ).
    But it doens`t send the email.
    Can anybody help me please???
    Kevin
    Here my Code:
    Report FP_EXAMPLE_01
    Printing of documents using PDF based forms
    REPORT z_example_02.
    Data declaration
    DATA: carr_id TYPE sbook-carrid,
    customer TYPE scustom,
    bookings TYPE ty_bookings,
    connections TYPE ty_connections,
    fm_name TYPE rs38l_fnam,
    fp_docparams TYPE sfpdocparams,
    fp_outputparams TYPE sfpoutputparams,
    error_string TYPE string,
    l_booking TYPE sbook,
    t_sums TYPE TABLE OF sbook,
    l_sums LIKE LINE OF t_sums,
    fp_formoutput TYPE fpformoutput.
    PARAMETER: p_custid TYPE scustom-id DEFAULT 38.
    SELECT-OPTIONS: s_carrid FOR carr_id DEFAULT 'AA' TO 'ZZ'.
    PARAMETER: p_form TYPE tdsfname DEFAULT 'FP_EXAMPLE_01'.
    PARAMETER: language TYPE sfpdocparams-langu DEFAULT 'E'.
    PARAMETER: country TYPE sfpdocparams-country DEFAULT 'US'.
    Get data from the following tables: scustom(Flight customer)
    sbook (Single flight reservation)
    spfli (Flight plan)
    SELECT SINGLE * FROM scustom INTO customer WHERE id = p_custid.
    CHECK sy-subrc = 0.
    SELECT * FROM sbook INTO TABLE bookings
    WHERE customid = p_custid
    AND carrid IN s_carrid
    ORDER BY PRIMARY KEY.
    SELECT * FROM spfli INTO TABLE connections
    FOR ALL ENTRIES IN bookings
    WHERE carrid = bookings-carrid
    AND connid = bookings-connid
    ORDER BY PRIMARY KEY.
    Print data:
    First get name of the generated function module
    CALL FUNCTION 'FP_FUNCTION_MODULE_NAME'
    EXPORTING
    i_name = p_form
    IMPORTING
    e_funcname = fm_name.
    IF sy-subrc <> 0.
    MESSAGE e001(fp_example).
    ENDIF.
    Set output parameters and open spool job
    fp_outputparams-nodialog = 'X'. " suppress printer dialog popup
    fp_outputparams-getpdf = 'X'. " launch print preview
    CALL FUNCTION 'FP_JOB_OPEN'
    CHANGING
    ie_outputparams = fp_outputparams
    EXCEPTIONS
    cancel = 1
    usage_error = 2
    system_error = 3
    internal_error = 4
    OTHERS = 5.
    Set form language and country (->form locale)
    fp_docparams-langu = language.
    fp_docparams-country = country.
    *fp_docparams-fillable = 'X'.
    *fp_docparams-langu = 'E'. "wird jetzt automatisch gesetzt, bzw. kann dynamisch verändert werden
    *fp_docparams-country = 'GB'. "wird jetzt automatisch gesetzt, bzw. kann dynamisch verändert werden
    currency key dependant summing
    LOOP AT bookings INTO l_booking.
    l_sums-forcuram = l_booking-forcuram.
    l_sums-forcurkey = l_booking-forcurkey.
    COLLECT l_sums INTO t_sums.
    ENDLOOP.
    Now call the generated function module
    CALL FUNCTION fm_name
    EXPORTING
    /1bcdwb/docparams = fp_docparams
    customer = customer
    bookings = bookings
    connections = connections
    t_sums = t_sums
    IMPORTING
    /1bcdwb/formoutput = fp_formoutput
    EXCEPTIONS
    usage_error = 1
    system_error = 2
    internal_error = 3
    OTHERS = 4.
    IF sy-subrc <> 0.
    CALL FUNCTION 'FP_GET_LAST_ADS_ERRSTR'
    IMPORTING
    e_adserrstr = error_string.
    IF NOT error_string IS INITIAL.
    we received a detailed error description
    WRITE:/ error_string.
    EXIT.
    ELSE.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
    ENDIF.
    Close spool job
    CALL FUNCTION 'FP_JOB_CLOSE'
    EXCEPTIONS
    usage_error = 1
    system_error = 2
    internal_error = 3
    OTHERS = 4.
    IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
    *********************Send the form*******************
    *********************to the Customer*****************
    *********************via Email***********************
    *IF i_down = abap_true.
    DATA: filename TYPE string,
    path TYPE string,
    fullpath TYPE string,
    default_extension TYPE string VALUE 'PDF'.
    Data:
    lt_att_content_hex TYPE solix_tab.
    *DATA: data_tab TYPE TABLE OF x255.
    CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
    EXPORTING
    buffer = fp_formoutput-pdf
    TABLES
    binary_tab = lt_att_content_hex.
    CLASS cl_bcs DEFINITION LOAD.
    DATA:
    lo_send_request TYPE REF TO cl_bcs VALUE IS INITIAL.
    lo_send_request = cl_bcs=>create_persistent( ).
    DATA:
    lt_message_body TYPE bcsy_text VALUE IS INITIAL.
    DATA: lo_document TYPE REF TO cl_document_bcs VALUE IS INITIAL.
    APPEND 'Dear Vendor,' TO lt_message_body.
    APPEND ' ' TO lt_message_body.
    APPEND 'Please fill the attached form and send it back to us.'
    TO lt_message_body.
    APPEND ' ' TO lt_message_body.
    APPEND 'Thank You,' TO lt_message_body.
    lo_document = cl_document_bcs=>create_document(
    i_type = 'RAW'
    i_text = lt_message_body
    i_subject = 'Vendor Payment Form' ).
    DATA: lx_document_bcs TYPE REF TO cx_document_bcs VALUE IS INITIAL.
    TRY.
    lo_document->add_attachment(
    EXPORTING
    i_attachment_type = 'PDF'
    i_attachment_subject = 'Vendor Payment Form'
    i_att_content_hex = lt_att_content_hex ).
    CATCH cx_document_bcs INTO lx_document_bcs.
    ENDTRY.
    lo_send_request->set_document( lo_document ).
    DATA:
    lo_sender TYPE REF TO if_sender_bcs VALUE IS INITIAL,
    lo_send TYPE adr6-smtp_addr VALUE '[email protected]'. "Absender SENDER
    lo_sender = cl_cam_address_bcs=>create_internet_address( lo_send ).
    Set sender
    lo_send_request->set_sender(
    EXPORTING
    i_sender = lo_sender ).
    Create recipient
    DATA:
    lo_recipient type ref to if_recipient_bcs value is initial.
    Data:
    lo_rec TYPE adr6-smtp_addr VALUE '[email protected]'. " Empfänger Receiver
    lo_recipient = cl_cam_address_bcs=>create_internet_address( lo_rec ).
    *lo_recipient = cl_sapuser_bcs=>create( sy-uname ).
    Set recipient
    lo_send_request->add_recipient(
    EXPORTING
    i_recipient = lo_recipient
    i_express = 'X' ).
    *lo_send_request->add_recipient(
    *EXPORTING
    *i_recipient = lo_recipient
    *i_express = 'X' ).
    Send email
    DATA: lv_sent_to_all(1) TYPE c VALUE IS INITIAL.
    lo_send_request->send(
    EXPORTING
    i_with_error_screen = 'X'
    RECEIVING
    result = lv_sent_to_all ).
    COMMIT WORK.
    MESSAGE 'The payment form has been emailed to the Vendor' TYPE 'I'.

    Hi Kevin,
    Please try this code to send your mail, i wrote it and works well in many system.
    Take care if in your profile you got an e-mail adress define .
    Take care also of trnasaction SCOT customizing, are you able to send mail to e-mail adress ?
    Let me know if it's works.
    Best regards.
    <i>**----
    CLASS-DEFINITIONS
    DATA: send_request       TYPE REF TO cl_bcs.
    DATA: document           TYPE REF TO cl_document_bcs.
    DATA: sender             TYPE REF TO cl_sapuser_bcs.
    DATA: recipient          TYPE REF TO if_recipient_bcs.
    INTERNAL TABLES
    DATA: l_mailtext TYPE soli_tab.
    DATA: iaddsmtp   TYPE TABLE OF bapiadsmtp.
    DATA: ireturn    TYPE TABLE OF bapiret2.
    VARIABLES
    DATA: mail_line  LIKE LINE OF l_mailtext.
    DATA: bapiadsmtp         TYPE bapiadsmtp.
    DATA: subject    TYPE so_obj_des.
    DATA : att_subject TYPE so_obj_des.
    DATA : w_except TYPE REF TO cx_root .
    CONSTANTS : c_defmail TYPE ad_smtpadr VALUE
                     '[email protected]' .
    FIELD-SYMBOLS : <smtp> TYPE bapiadsmtp.
    *Convert the pdf given by function module into Binary .
    CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
      EXPORTING
        buffer     = output-pdf "PDF file from function module
      TABLES
        binary_tab = hexa.
    *Set subject of the mail
    subject = 'Exemple de PDF interactif'.
    Set text of the mail
    mail_line = 'Merci de remplir le formulaire et nous le retourner'.
    APPEND mail_line TO l_mailtext .
    Set the name of the attached document
    att_subject = 'Template du PDF'.
    TRY.
    Create persistent send request
        send_request = cl_bcs=>create_persistent( ).
    Get sender object
        sender = cl_sapuser_bcs=>create( sy-uname ).
    Add sender
        CALL METHOD send_request->set_sender
          EXPORTING
            i_sender = sender.
    Read the E-Mail address for the user
        CALL FUNCTION 'BAPI_USER_GET_DETAIL'
          EXPORTING
            username = sy-uname
          TABLES
            return   = ireturn
            addsmtp  = iaddsmtp.
        LOOP AT iaddsmtp ASSIGNING <smtp> WHERE std_no = 'X'.
          CLEAR bapiadsmtp.
          MOVE <smtp> TO bapiadsmtp.
        ENDLOOP.
        CASE bapiadsmtp-e_mail.
          WHEN space.
    No adress main for user, so send it to the default mail adress
            recipient =
         cl_cam_address_bcs=>create_internet_address( c_defmail ).
          WHEN OTHERS.
            recipient =
         cl_cam_address_bcs=>create_internet_address( bapiadsmtp-e_mail ).
        ENDCASE.
    Add recipient with its respective attributes to send request
        CALL METHOD send_request->add_recipient
          EXPORTING
            i_recipient  = recipient
            i_express    = 'X'
            i_copy       = space
            i_blind_copy = space
            i_no_forward = space.
    Set that you don't need a Return Status E-mail
        CALL METHOD send_request->set_status_attributes
          EXPORTING
            i_requested_status = 'E'
            i_status_mail      = 'E'.
    set send immediately flag
        send_request->set_send_immediately( 'X' ).
    *Build Document
        document = cl_document_bcs=>create_document(
                            i_type    = 'RAW'
                            i_text    = l_mailtext
                            i_subject = subject ).
        add attachment to document
        CALL METHOD document->add_attachment
          EXPORTING
            i_attachment_type    = 'PDF'
            i_attachment_subject = att_subject
            i_att_content_hex    = hexa.
    Add document to send request
        CALL METHOD send_request->set_document( document ).
    Send document
        CALL METHOD send_request->send( ).
        COMMIT WORK.
      CATCH cx_send_req_bcs INTO w_except.
      CATCH cx_address_bcs INTO w_except.
      CATCH cx_document_bcs INTO w_except.
    ENDTRY.</i>

Maybe you are looking for

  • Locating missing iTune library on Apple TV

    I recently bought a new Apple TV and synced it with my iTune, no problem. My nephew came and in my absence fiddled with Apple TV and his computer. Now I can not acess my synced iTune library. I see the Apple TV and it shows available space of 144GB w

  • Dual boot of Solaris 10

    Hi, I am new to Unix world , Can I install Solaris 10 with Dual boot support. I have to keep Windows XP as well as Solaris. And my second question is that Solaris 10 is the Desktop OS or Server OS ? And what is the difference between SunOS 5.2 and So

  • Adf: Get Id foreach

    Hi, In the code below I have 3 for each as master-detail(Clients-->Proyects-->Tasks), and the tasks are drag source components. I'm trying programmatically to get the value of the Id of each one on Drop, I'm able to get the "Name" of each item but I

  • Rendered Standard previews, Hard disk full

    Hello, I'm using Lightroom 4.0 on Mac OS 10.7.3 and used the "Render Standard-Sized Previews" option to generate previews overnight. I had about 30 gigabytes of free space and woke up to find my hard disk full. Since restarting, discarding the *1:1*

  • No sound after 10.10.3 update...Why?

    I just updated to 10.10.3 and now I have no sound on my Mac Mini. when I adjust the volume control  there is no response..Any ideas?