08-06-2012 9:17 AM
Hi abap gurus,
i am able to sending mail with attachment but my requirement is that after sending mail in that Excel Sheet Attachment the Header should be in BOLD.
i have searched in SCN and found only code for mail sending with / without attachments. please post the code for the above requirement.
<removed by moderator>
My code is :
CONCATENATE 'COMPANY CODE'
'SUPPLIER NAME'
'SUPPLIER GSL'
'PAY SITE CODE'
'PAY SITE ADDRESS'
'PAY SITE CITY'
'PAY SITE STATE'
'PAY SITE COUNTRY'
'INVOICE NO'
'VOUCHER NO'
'PO NUMBER'
'PO LINE'
'PO BUYER SSO'
'INVOICE DATE'
'CANCELLED DATE'
'INVOICE ENTRY DATE'
'INVOICE AMT'
'CREATED BY'
'STATUS'
INTO IT_ATTACHMENT SEPARATED BY
CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
CONCATENATE CL_ABAP_CHAR_UTILITIES=>CR_LF IT_ATTACHMENT INTO IT_ATTACHMENT.
APPEND IT_ATTACHMENT.
* Selecting the mail id's
SELECT INTID
EMAIL
FROM ZTBIDL
INTO TABLE T_ZTBIDL
WHERE INTID = 'RICEF21' AND
OBJ_NAME = 'PIC'.
LOOP AT T_ZTBIDL INTO WA_ZTBIDL.
IT_RECEIVERS-RECEIVER = WA_ZTBIDL-EMAIL.
IT_RECEIVERS-REC_TYPE = 'U'.
IT_RECEIVERS-COM_TYPE = 'INT'.
IT_RECEIVERS-NOTIF_DEL = 'X'.
IT_RECEIVERS-NOTIF_NDEL = 'X'.
IT_RECEIVERS-EXPRESS = 'X'.
APPEND IT_RECEIVERS.
ENDLOOP.
*File Type
LD_FORMAT = 'XLS'.
**File Name
CONCATENATE 'PIC_' SY-DATUM INTO LD_ATTFILENAME.
* Fill the document data.
GD_DOC_DATA-DOC_SIZE = 1.
* Populate the subject/generic message attributes
GD_DOC_DATA-OBJ_LANGU = SY-LANGU.
GD_DOC_DATA-OBJ_NAME = 'SAPRPT'.
GD_DOC_DATA-OBJ_DESCR = PSUBJECT .
GD_DOC_DATA-SENSITIVTY = 'F'.
* Fill the document data and get size of attachment
CLEAR GD_DOC_DATA.
* Populate the subject/generic message attributes
GD_DOC_DATA-OBJ_LANGU = SY-LANGU.
READ TABLE IT_ATTACHMENT INDEX W_CNT.
GD_DOC_DATA-DOC_SIZE = ( W_CNT - 1 ) * 255 + STRLEN( IT_ATTACHMENT ).
GD_DOC_DATA-OBJ_NAME = 'SAPRPT'.
GD_DOC_DATA-OBJ_DESCR = PSUBJECT.
GD_DOC_DATA-SENSITIVTY = 'F'.
* Describe the body of the message
CLEAR IT_PACKING_LIST.
REFRESH IT_PACKING_LIST.
IT_PACKING_LIST-TRANSF_BIN = SPACE.
IT_PACKING_LIST-HEAD_START = 1.
IT_PACKING_LIST-HEAD_NUM = 0.
IT_PACKING_LIST-BODY_START = 1.
DESCRIBE TABLE IT_MESSAGE LINES IT_PACKING_LIST-BODY_NUM.
IT_PACKING_LIST-DOC_TYPE = 'RAW'.
APPEND IT_PACKING_LIST.
**Describe the attachment info
IT_PACKING_LIST-TRANSF_BIN = 'X'.
IT_PACKING_LIST-HEAD_START = 1.
IT_PACKING_LIST-HEAD_NUM = 1.
IT_PACKING_LIST-BODY_START = 1.
DESCRIBE TABLE IT_ATTACHMENT LINES IT_PACKING_LIST-BODY_NUM.
IT_PACKING_LIST-DOC_TYPE = LD_FORMAT.
IT_PACKING_LIST-OBJ_NAME = LD_ATTFILENAME.
IT_PACKING_LIST-OBJ_DESCR = LD_ATTFILENAME.
IT_PACKING_LIST-DOC_SIZE = IT_PACKING_LIST-BODY_NUM * 255.
APPEND IT_PACKING_LIST.
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = GD_DOC_DATA
PUT_IN_OUTBOX = 'X'
COMMIT_WORK = 'X'
TABLES
PACKING_LIST = IT_PACKING_LIST
CONTENTS_BIN = IT_ATTACHMENT
CONTENTS_TXT = IT_MESSAGE
RECEIVERS = IT_RECEIVERS.
ENDIF.
Message was edited by: Thomas Zloch
08-06-2012 10:20 AM
Hi Srini,
Check this link . Hope it helps .
http://www.erpgreat.com/abap/download-to-excel-with-format-border-color-cell-etc.htm
Thanks,
Pradeep.
08-06-2012 10:20 AM
Hi Srini,
Check this link . Hope it helps .
http://www.erpgreat.com/abap/download-to-excel-with-format-border-color-cell-etc.htm
Thanks,
Pradeep.
08-06-2012 10:38 AM
Hi Pradeep,
i have to get the BOLD Letters for Header from the mail Attachment in excel. it should not be from the report. please suggest me how to proceed further?.
08-06-2012 11:12 AM
Hi ,
I tried but due to some network issues i could not able to check its working fine or not.
Lets Try it.
DATA: att_size TYPE i, " att Size
att_itab_size TYPE i, " Attachment size
mailtxt_size TYPE i. " Text in mail size
DATA:
it_mailpack LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE, " Dist details
it_mailhead LIKE solisti1 OCCURS 1 WITH HEADER LINE," Header data
it_reclist LIKE somlreci1 OCCURS 0 WITH HEADER LINE, " Rec List
it_mailtxt LIKE solisti1 OCCURS 0 WITH HEADER LINE, " Mail Text
it_att_data LIKE solisti1 OCCURS 0 WITH HEADER LINE, " Attachment data
it_doc_att LIKE sodocchgi1. " Attri of new doc
*•Text in the mail.
it_mailtxt-line =
'<BODY BGCOLOR="#FFFFCC">' &
'<B> This is a test mail, Line Number--1</B><BR>'
.
APPEND it_mailtxt.
it_mailtxt-line = '<I> This is a test mail, Line Number--2' &
' This is a test mail, Line Number--2</I><BR>'.
APPEND it_mailtxt.
it_mailtxt-line = '<U> This is a test mail, Line Number--3' &
' This is a test mail, Line Number--3' &
' This is a test mail, Line Number--3</U>'.
APPEND it_mailtxt.
DESCRIBE TABLE it_mailtxt LINES mailtxt_size.
*•Create the att File
concatenate '<BODY><B>Attachment Line Number 1</B><BR>' space into
it_att_data-line.
APPEND it_att_data.
concatenate '<I>Attachment Line Number 2</I><BR>' space into
it_att_data-line.
APPEND it_att_data.
concatenate '<U>Attachment Line Number 3</U>' space into
it_att_data-line.
APPEND it_att_data.
DESCRIBE TABLE it_att_data LINES att_itab_size.
*•Attributes of new doc
CONCATENATE 'Attach' space 'mail'
INTO it_doc_att-obj_descr SEPARATED BY space.
it_doc_att-sensitivty = 'F'.
it_doc_att-doc_size = mailtxt_size * 255.
*•Create Pack to text in mail body.
it_mailpack-transf_bin = space.
it_mailpack-head_start = 1.
it_mailpack-head_num = 0.
it_mailpack-body_start = 1.
it_mailpack-body_num = mailtxt_size.
it_mailpack-doc_type = 'HTM'.
APPEND it_mailpack.
*•Create Pack for Attach.
it_mailpack-transf_bin = 'X'.
it_mailpack-head_start = 1.
it_mailpack-head_num = 1.
it_mailpack-body_start = 1.
it_mailpack-body_num = att_itab_size.
it_mailpack-doc_type = 'HTM'.
CONCATENATE 'My' space 'Attachment' INTO it_mailpack-obj_descr.
it_mailpack-doc_size = att_itab_size * 255.
APPEND it_mailpack.
it_reclist-receiver = 'mailid@domain.com'.
it_reclist-express = 'X'.
it_reclist-rec_type = 'U'.
*it_reclist-notif_del = 'X'. " request delivery notification
APPEND it_reclist.
*•Call FM to send email
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = it_doc_att
put_in_outbox = 'X'
TABLES
packing_list = it_mailpack
object_header = it_mailhead
contents_txt = it_mailtxt
contents_bin = it_att_data
receivers = it_reclist
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
elseif sy-subrc = 0.
message ' Successfully sent' type 'I'.
ENDIF.
08-06-2012 12:09 PM
Hi Pradeep,
i have pasted the above code and tried. i am not able to see any of my mail in SOST Transaction.
i think we can solve with oops Concept? please Help me.
08-06-2012 10:42 AM
08-06-2012 12:17 PM
Hi Srinivas,
Try with this below OOPS code for sending mail with attachment.
*REPORT zattach_email MESSAGE-ID zz
* LINE-SIZE 132
* NO STANDARD PAGE HEADING.
*----------------------------------------------------------------------*
* TABLES *
*----------------------------------------------------------------------*
TABLES: SOMLRECI1.
*----------------------------------------------------------------------*
* GLOBAL DATA DECLARATION *
*----------------------------------------------------------------------*
DATA: T_MAILHEX TYPE STANDARD TABLE OF SOLIX,
T_CONTENTS TYPE STANDARD TABLE OF SOLISTI1,
WA_CONTENTS TYPE SOLISTI1,
W_FILE TYPE DSVASDOCID,
W_EXTN(5) TYPE C,
W_MAIL_SUBJ TYPE STRING,
W_DOCUMENT TYPE REF TO CL_DOCUMENT_BCS.
*----------------------------------------------------------------------*
* CONSTANTS DECLARATION *
*----------------------------------------------------------------------*
CONSTANTS:
*-- Constants used in the body of the Email (HTML)
C_HTM TYPE CHAR3 VALUE 'HTM',
C_STYLE_START TYPE CHAR255 VALUE '<FONT face=Arial size=2>',
C_NEW_LINE TYPE CHAR255 VALUE '<br>',
C_LINK_START TYPE CHAR128 VALUE '<A href="www.w3schools.com">',
C_LINK_TEXT TYPE CHAR32 VALUE 'Link for learning HTML',
C_LINK_END TYPE CHAR4 VALUE '</A>',
C_SPACE(6) TYPE C VALUE ' ',
*-- Used as an Example for displaying space between texts in Email body
C_EMP1(6) TYPE C VALUE 101001,
C_EMP2(6) TYPE C VALUE 101002,
C_EMP3(6) TYPE C VALUE 101003.
*----------------------------------------------------------------------*
* SELECTION SCREEN *
*----------------------------------------------------------------------*
*-- Input Details - Block
SELECTION-SCREEN BEGIN OF BLOCK FILE WITH FRAME TITLE TEXT-T01.
PARAMETERS: P_ATTACH TYPE RLGRAP-FILENAME.
SELECTION-SCREEN END OF BLOCK FILE.
*-- Email ID of the Recipient
SELECTION-SCREEN BEGIN OF BLOCK MAIL WITH FRAME TITLE TEXT-T02.
SELECT-OPTIONS: S_MAILID FOR SOMLRECI1-RECEIVER NO INTERVALS.
SELECTION-SCREEN END OF BLOCK MAIL.
*----------------------------------------------------------------------*
* AT SELECTION SCREEN *
*----------------------------------------------------------------------*
*-- Providing F4 Help for the input file
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_ATTACH.
PERFORM FILE_PATH USING 'P_ATTACH'.
*&---------------------------------------------------------------------*
* START-OF-SELECTION *
*&---------------------------------------------------------------------*
START-OF-SELECTION.
IF P_ATTACH IS INITIAL.
MESSAGE I999(ZZ) WITH 'Please Enter at-least one file name'(001).
EXIT.
ENDIF.
*-- Upload data from Presentation Server to SAP
PERFORM UPLOAD_DATA.
*----------------------------------------------------------------------*
* END OF SELECTION *
*----------------------------------------------------------------------*
END-OF-SELECTION.
*-- Frame the Body of the Email
PERFORM FRAME_MAIL_BODY.
*-- Send Mail
PERFORM SEND_MAIL.
*&--------------------------------------------------------------------*
*& Form Name : File_path
*&--------------------------------------------------------------------*
*& Description : F4 help for File Name / Path
*&--------------------------------------------------------------------*
*& Parameters : FP_FILE --> File Name
*&--------------------------------------------------------------------*
FORM FILE_PATH USING FP_FILE TYPE ANY.
*-- Selects the directory list
CALL FUNCTION 'F4_DXFILENAME_4_DYNP'
EXPORTING
DYNPFIELD_FILENAME = FP_FILE
DYNAME = SY-CPROG
DYNUMB = SY-DYNNR
FILETYPE = 'P'
LOCATION = 'P'
SERVER = SPACE.
ENDFORM. " file_path
*&---------------------------------------------------------------------*
*& Form Name : Upload_Data *
*&---------------------------------------------------------------------*
*& Description : Upload data into SAP from Presentation Server *
*&---------------------------------------------------------------------*
*& Parameters : None *
*&---------------------------------------------------------------------*
FORM UPLOAD_DATA.
*-- Local data declaration
DATA: L_FILE TYPE STRING,
L_INDEX TYPE SY-TABIX,
*-- For holding the split file name
TL_SPLITFILE TYPE STANDARD TABLE OF RLGRAP-FILENAME,
WL_SPLITFILE TYPE RLGRAP-FILENAME.
L_FILE = P_ATTACH.
**-- Function module to split the Filename and Extension from the Path
CALL FUNCTION 'CH_SPLIT_FILENAME'
EXPORTING
COMPLETE_FILENAME = L_FILE
IMPORTING
EXTENSION = W_EXTN
NAME = W_FILE.
*-- Split the filename at '.'
SPLIT L_FILE AT '.' INTO TABLE TL_SPLITFILE.
DESCRIBE TABLE TL_SPLITFILE LINES L_INDEX.
*-- In case the filename contains more than one dot
IF L_INDEX GT 2.
CLEAR: WL_SPLITFILE, W_EXTN.
*-- Get the Extension of the file
READ TABLE TL_SPLITFILE INTO WL_SPLITFILE INDEX L_INDEX.
W_EXTN = WL_SPLITFILE.
DELETE TL_SPLITFILE INDEX L_INDEX.
DELETE TL_SPLITFILE INDEX 1.
CLEAR WL_SPLITFILE.
*-- Get the Actual filename
LOOP AT TL_SPLITFILE INTO WL_SPLITFILE.
CONCATENATE '.' WL_SPLITFILE INTO WL_SPLITFILE.
ENDLOOP.
CONCATENATE W_FILE WL_SPLITFILE INTO W_FILE.
ENDIF.
CONDENSE W_EXTN.
*-- Upload File
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = L_FILE
FILETYPE = 'BIN'
TABLES
DATA_TAB = T_MAILHEX
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
OTHERS = 17.
IF SY-SUBRC IS NOT INITIAL.
MESSAGE I999(ZZ) WITH 'Error in reading file for upload'(002)
W_FILE.
ENDIF.
ENDFORM. " upload_data
*&---------------------------------------------------------------------*
*& Form Name : frame_mail_body *
*&---------------------------------------------------------------------*
*& Description : To frame the body part of the Email to be sent *
*&---------------------------------------------------------------------*
*& Parameters : None *
*&---------------------------------------------------------------------*
FORM FRAME_MAIL_BODY.
*-- Local data declaration to hold the textpool
DATA: TL_TEXTPOOL TYPE STANDARD TABLE OF TEXTPOOL,
WL_TEXTPOOL TYPE TEXTPOOL.
*-- Read the Entire Textpool into an Internal table
READ TEXTPOOL SY-REPID INTO TL_TEXTPOOL LANGUAGE SY-LANGU.
IF SY-SUBRC IS INITIAL.
SORT TL_TEXTPOOL BY ID KEY.
ENDIF.
*-- Font start
CLEAR WA_CONTENTS.
WA_CONTENTS-LINE = C_STYLE_START.
APPEND WA_CONTENTS TO T_CONTENTS.
*-- New line
CLEAR WA_CONTENTS.
WA_CONTENTS-LINE = C_NEW_LINE.
APPEND WA_CONTENTS TO T_CONTENTS.
*-- Program name : Email Attachment
CLEAR: WL_TEXTPOOL, WA_CONTENTS.
READ TABLE TL_TEXTPOOL INTO WL_TEXTPOOL
WITH KEY ID = 'I' KEY = 'T03'
BINARY SEARCH.
IF SY-SUBRC EQ 0.
WA_CONTENTS-LINE = WL_TEXTPOOL-ENTRY.
*-- "#" Present in the Text Element will be replaced by the below value
REPLACE: '#' WITH 'Email Attachment' INTO WA_CONTENTS-LINE.
APPEND WA_CONTENTS TO T_CONTENTS.
ENDIF.
*-- New line
CLEAR WA_CONTENTS.
WA_CONTENTS-LINE = C_NEW_LINE.
APPEND WA_CONTENTS TO T_CONTENTS.
*-- New line
CLEAR WA_CONTENTS.
WA_CONTENTS-LINE = C_NEW_LINE.
APPEND WA_CONTENTS TO T_CONTENTS.
*-- You can also change or add the text here...
CLEAR: WL_TEXTPOOL, WA_CONTENTS.
READ TABLE TL_TEXTPOOL INTO WL_TEXTPOOL
WITH KEY ID = 'I' KEY = 'T04'
BINARY SEARCH.
IF SY-SUBRC EQ 0.
WA_CONTENTS-LINE = WL_TEXTPOOL-ENTRY.
APPEND WA_CONTENTS TO T_CONTENTS.
ENDIF.
*-- New line
CLEAR WA_CONTENTS.
WA_CONTENTS-LINE = C_NEW_LINE.
APPEND WA_CONTENTS TO T_CONTENTS.
*-- New line
CLEAR WA_CONTENTS.
WA_CONTENTS-LINE = C_NEW_LINE.
APPEND WA_CONTENTS TO T_CONTENTS.
*-- For giving spaces between texts, you can use...
CLEAR: WL_TEXTPOOL, WA_CONTENTS.
READ TABLE TL_TEXTPOOL INTO WL_TEXTPOOL
WITH KEY ID = 'I' KEY = 'T05'
BINARY SEARCH.
IF SY-SUBRC EQ 0.
WA_CONTENTS-LINE = WL_TEXTPOOL-ENTRY.
APPEND WA_CONTENTS TO T_CONTENTS.
ENDIF.
*-- New line
CLEAR WA_CONTENTS.
WA_CONTENTS-LINE = C_NEW_LINE.
APPEND WA_CONTENTS TO T_CONTENTS.
*-- For Ex; Employee Numbers :
CLEAR: WL_TEXTPOOL, WA_CONTENTS.
READ TABLE TL_TEXTPOOL INTO WL_TEXTPOOL
WITH KEY ID = 'I' KEY = 'T06'
BINARY SEARCH.
IF SY-SUBRC EQ 0.
WA_CONTENTS-LINE = WL_TEXTPOOL-ENTRY.
*-- How to give Spaces in between texts
CONCATENATE WA_CONTENTS-LINE C_SPACE C_EMP1 C_SPACE C_EMP2
C_SPACE C_EMP3 INTO WA_CONTENTS-LINE.
APPEND WA_CONTENTS TO T_CONTENTS.
ENDIF.
*-- New line
CLEAR WA_CONTENTS.
WA_CONTENTS-LINE = C_NEW_LINE.
APPEND WA_CONTENTS TO T_CONTENTS.
*-- New line
CLEAR WA_CONTENTS.
WA_CONTENTS-LINE = C_NEW_LINE.
APPEND WA_CONTENTS TO T_CONTENTS.
*-- For more Information on HTML..
CLEAR: WL_TEXTPOOL, WA_CONTENTS.
READ TABLE TL_TEXTPOOL INTO WL_TEXTPOOL
WITH KEY ID = 'I' KEY = 'T07'
BINARY SEARCH.
IF SY-SUBRC EQ 0.
WA_CONTENTS-LINE = WL_TEXTPOOL-ENTRY.
APPEND WA_CONTENTS TO T_CONTENTS.
ENDIF.
*-- New line
CLEAR WA_CONTENTS.
WA_CONTENTS-LINE = C_NEW_LINE.
APPEND WA_CONTENTS TO T_CONTENTS.
*-- New line
CLEAR WA_CONTENTS.
WA_CONTENTS-LINE = C_NEW_LINE.
APPEND WA_CONTENTS TO T_CONTENTS.
*-- Hyperlink
CLEAR WA_CONTENTS.
CONCATENATE C_LINK_START C_LINK_TEXT C_LINK_END INTO WA_CONTENTS-LINE.
APPEND WA_CONTENTS TO T_CONTENTS.
*-- Subject of the Mail
CONCATENATE TEXT-T08 W_MAIL_SUBJ INTO W_MAIL_SUBJ.
ENDFORM. " frame_mail_body
*&---------------------------------------------------------------------*
*& Form Name : Send_mail *
*&---------------------------------------------------------------------*
*& Description : To set the recipients and send the mail *
*&---------------------------------------------------------------------*
*& Parameters : None *
*&---------------------------------------------------------------------*
FORM SEND_MAIL.
*-- Local data declaration for sending mail
DATA: L_SEND_REQUEST TYPE REF TO CL_BCS,
L_DOCUMENT TYPE REF TO CL_DOCUMENT_BCS,
L_SENDER TYPE REF TO CL_SAPUSER_BCS,
L_SUB TYPE CHAR50,
L_RECIPIENT TYPE REF TO IF_RECIPIENT_BCS,
TL_CONTENTS TYPE STANDARD TABLE OF SOLI,
L_DOC_LEN TYPE SO_OBJ_LEN,
L_CNT TYPE SY-TABIX,
L_RCV_EMAIL TYPE ADR6-SMTP_ADDR,
L_RESULT TYPE SY-BINPT,
L_BCS_EXCEPTION TYPE REF TO CX_BCS,
L_SUBJ TYPE STRING,
WL_MAILID LIKE LINE OF S_MAILID.
TRY.
*-- Create persistent send request
L_SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ).
TL_CONTENTS[] = T_CONTENTS[].
*-- Get the length of the Document
DESCRIBE TABLE TL_CONTENTS LINES L_CNT.
READ TABLE TL_CONTENTS INTO WA_CONTENTS INDEX L_CNT.
L_DOC_LEN = ( L_CNT - 1 ) * 255 + STRLEN( WA_CONTENTS ).
*-- Subject of the mail
L_SUB = W_MAIL_SUBJ.
*-- Create Document
L_DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT(
I_TYPE = C_HTM
I_TEXT = TL_CONTENTS
I_LENGTH = L_DOC_LEN
I_SUBJECT = L_SUB
I_LANGUAGE = SY-LANGU
I_IMPORTANCE = '1' ).
*-- Subject of the mail
MOVE W_MAIL_SUBJ TO L_SUBJ.
W_DOCUMENT = L_DOCUMENT.
TRY.
*-- Set the Message Subject
CALL METHOD L_SEND_REQUEST->SET_MESSAGE_SUBJECT
EXPORTING
IP_SUBJECT = L_SUBJ.
CATCH CX_SY_DYN_CALL_ILLEGAL_METHOD.
ENDTRY.
*-- Add document to send request
CALL METHOD L_SEND_REQUEST->SET_DOCUMENT( L_DOCUMENT ).
*-- Do send delivery info for successful mails
CALL METHOD L_SEND_REQUEST->SET_STATUS_ATTRIBUTES
EXPORTING
I_REQUESTED_STATUS = 'E'
I_STATUS_MAIL = 'A'.
*-- Set sender
L_SENDER = CL_SAPUSER_BCS=>CREATE( SY-UNAME ).
CALL METHOD L_SEND_REQUEST->SET_SENDER
EXPORTING
I_SENDER = L_SENDER.
*-- To frame the attachments for the mail
PERFORM FRAME_ATTACHMENTS.
*-- Add the recipients to the Send mail
LOOP AT S_MAILID INTO WL_MAILID.
L_RCV_EMAIL = WL_MAILID-LOW.
CHECK NOT L_RCV_EMAIL IS INITIAL.
L_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS(
L_RCV_EMAIL ).
CALL METHOD L_SEND_REQUEST->ADD_RECIPIENT
EXPORTING
I_RECIPIENT = L_RECIPIENT
I_EXPRESS = 'X'.
ENDLOOP.
*-- Send Email
CALL METHOD L_SEND_REQUEST->SEND(
EXPORTING
I_WITH_ERROR_SCREEN = 'X'
RECEIVING
RESULT = L_RESULT ).
IF L_RESULT = 'X'.
MESSAGE S999(ZZ) WITH
'Approval Mail Sent Successfully'(003).
ENDIF.
CATCH CX_BCS INTO L_BCS_EXCEPTION.
IF L_RESULT NE 'X'.
MESSAGE S999(ZZ) WITH
'Approval Mail Not Successful'(004).
ENDIF.
ENDTRY.
COMMIT WORK. "Commit Work
ENDFORM. " send_mail
*&---------------------------------------------------------------------*
*& Form Name : frame_attachments *
*&---------------------------------------------------------------------*
*& Description : To frame the attachments for the mail to be sent *
*&---------------------------------------------------------------------*
*& Parameters : None *
*&---------------------------------------------------------------------*
FORM FRAME_ATTACHMENTS.
*-- Local Data declaration
DATA: L_SUBJECT TYPE SO_OBJ_DES,
L_ATT_TYPE TYPE SOODK-OBJTP.
*-- Subject of the Attachment
L_SUBJECT = W_FILE.
*-- Format of the Attachment
L_ATT_TYPE = W_EXTN.
IF T_MAILHEX[] IS NOT INITIAL.
TRY.
*-- Add Attachment to the Document
CALL METHOD W_DOCUMENT->ADD_ATTACHMENT
EXPORTING
I_ATTACHMENT_TYPE = L_ATT_TYPE
I_ATTACHMENT_SUBJECT = L_SUBJECT
I_ATT_CONTENT_HEX = T_MAILHEX.
CATCH CX_DOCUMENT_BCS.
ENDTRY.
ENDIF.
ENDFORM. " frame_attachments
Regards,
Bharathkumar.MG
08-06-2012 1:34 PM
Hi Bharat,
i know the logic for the sending mail with attachment using OOPS concept.
i have a requirement that in that excel attachment on the mail the Header should be in BOLD.
please help me on that.
08-06-2012 3:01 PM
Hi Srinivas,
The below code will satisfy your requirement..
REPORT zexcel_code.
******************************Tables***********************************
TABLES: objk, aufk.
TYPE-POOLS: ole2.
******************************Types*************************************
TYPES: BEGIN OF ty_ser,
kunnr TYPE kna1-kunnr,
name1 TYPE kna1-name1,
ort01 TYPE kna1-ort01,
END OF ty_ser.
TYPES: BEGIN OF ty_titles,
title(20) TYPE c,
field(20) TYPE c,
END OF ty_titles.
***************************Data Declaration*****************************
DATA: it_ser TYPE TABLE OF ty_ser,
wa_ser TYPE ty_ser,
v_lines TYPE i,
it_title TYPE STANDARD TABLE OF ty_titles.
DATA: fm_name TYPE rs38l_fnam,
v_line TYPE sy-tabix,
v_tabix TYPE sy-tabix,
v_titles TYPE sy-tabix,
v_field TYPE string,
filename TYPE string,
path TYPE string,
fullpath TYPE string,
v_text TYPE string,
v_file TYPE rlgrap-filename.
DATA: e_sheet TYPE ole2_object,
e_activesheet TYPE ole2_object,
e_newsheet TYPE ole2_object,
e_appl TYPE ole2_object,
e_work TYPE ole2_object,
e_cell TYPE ole2_object,
e_color TYPE ole2_object,
e_bold TYPE ole2_object.
DATA: data_titles TYPE REF TO data.
FIELD-SYMBOLS: <fs_spfli> LIKE LINE OF it_ser,
<fs_titles> LIKE LINE OF it_title,
<fs> TYPE any.
START-OF-SELECTION.
PERFORM get_data.
PERFORM get_titles.
PERFORM convert_to_excel.
*&---------------------------------------------------------------------*
*& Form get_titles
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_titles.
CREATE DATA data_titles TYPE ty_titles.
ASSIGN data_titles->* TO <fs_titles>.
<fs_titles>-title = 'Customer Number'.
<fs_titles>-field = 'KUNNR'.
APPEND <fs_titles> TO it_title.
<fs_titles>-title = 'Name'.
<fs_titles>-field = 'NAME1'.
APPEND <fs_titles> TO it_title.
<fs_titles>-title = 'COUNTRY'.
<fs_titles>-field = 'ORT01'.
APPEND <fs_titles> TO it_title.
ENDFORM. "get_titles
*&---------------------------------------------------------------------*
*& Form CONVERT_TO_EXCEL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM convert_to_excel.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = 'Select archive'
default_extension = 'xls'
file_filter = '*.xls'
CHANGING
filename = filename
path = path
fullpath = fullpath.
v_line = 1.
CREATE OBJECT e_appl 'EXCEL.APPLICATION'.
SET PROPERTY OF e_appl 'VISIBLE' = 1.
CALL METHOD OF
e_appl
'WORKBOOKS' = e_work.
CALL METHOD OF
e_work
'Add' = e_work.
GET PROPERTY OF e_appl 'ActiveSheet' = e_activesheet.
SET PROPERTY OF e_activesheet 'Name' = sy-datum.
LOOP AT it_ser ASSIGNING <fs_spfli>.
v_tabix = sy-tabix.
v_line = v_line + 1.
LOOP AT it_title ASSIGNING <fs_titles>.
v_titles = sy-tabix.
CALL METHOD OF
e_appl
'Cells' = e_cell
EXPORTING
#1 = 1
#2 = v_titles.
SET PROPERTY OF e_cell 'Value' = <fs_titles>-title.
GET PROPERTY OF e_cell 'Interior' = e_color.
SET PROPERTY OF e_color 'ColorIndex' = 35.
GET PROPERTY OF e_cell 'Font' = e_bold.
SET PROPERTY OF e_bold 'Bold' = 1.
CALL METHOD OF
e_appl
'Cells' = e_cell
EXPORTING
#1 = v_line
#2 = v_titles.
CONCATENATE '<fs_spfli>-' <fs_titles>-field
INTO v_field.
ASSIGN (v_field) TO <fs>.
IF v_titles = 2.
SET PROPERTY OF e_cell 'NumberFormat' = '@'.
ENDIF.
SET PROPERTY OF e_cell 'Value' = <fs>.
GET PROPERTY OF e_cell 'Interior' = e_color.
SET PROPERTY OF e_cell 'ColumnWidth' = 20.
SET PROPERTY OF e_color 'ColorIndex' = 0.
GET PROPERTY OF e_cell 'Font' = e_bold.
SET PROPERTY OF e_bold 'Bold' = 0.
ENDLOOP.
ENDLOOP.
CALL METHOD OF e_work 'SAVEAS'
EXPORTING
#1 = fullpath.
FREE OBJECT e_appl.
ENDFORM. " CONVERT_TO_EXCEL
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_data.
SELECT kunnr name1 ort01 FROM kna1 INTO CORRESPONDING FIELDS OF TABLE it_ser UP TO 10 ROWS.
ENDFORM. " GET_DATA
Let me know if it helps. Any comments are appreciated.
<removed by moderator>
Regards,
Bharathkumar.MG
Message was edited by: Thomas Zloch
08-06-2012 4:08 PM
Hi Bharat,
i have executed your code it is working fine but the output should come from the mail attachment (SOST T-Code).
please help me . <removed by moderator>.
Message was edited by: Thomas Zloch
08-06-2012 5:20 PM
Hi Srinivas,
Thanks for your reply. Am not getting your exact requirement.
SOST transaction will have the status log of mail which has triggered already like whether it has sent or waiting or error.
Could you please explain this discussion in deep to provide answer.
Regards,
Bharathkumar.MG
08-07-2012 9:24 AM
Hi Bharat,
the below is for sending mail with attachment as Excel sheet. i need in that excel sheet to have Header Fields in BOLD.
NOTE : customer number
name
country
the above 3 fields should be in BOLD with attachment as Excel sheet.
LV_MESSAGE = 'Mail For Cancelled Invoices.'.
APPEND LV_MESSAGE TO IT_MESSAGE.
DATA:L_YEAR(4),
L_MON(2),
L_DAY(2),
L_DATE(20),
L_NOTE(255).
L_YEAR = SY-DATUM+0(4).
L_MON = SY-DATUM+4(2).
L_DAY = SY-DATUM+6(2).
CONCATENATE L_DAY L_MON L_YEAR INTO P_DATE SEPARATED BY '-'.
CONCATENATE 'Date:' P_DATE INTO L_DATE SEPARATED BY SPACE.
CONCATENATE TEXT-020 TEXT-021 INTO L_NOTE SEPARATED BY SPACE.
CONCATENATE 'FI REPORT'
L_DATE
INTO IT_ATTACHMENT SEPARATED BY CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
CONCATENATE CL_ABAP_CHAR_UTILITIES=>CR_LF IT_ATTACHMENT INTO IT_ATTACHMENT.
APPEND IT_ATTACHMENT.
CONCATENATE '' ' ' INTO IT_ATTACHMENT SEPARATED BY CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
CONCATENATE CL_ABAP_CHAR_UTILITIES=>CR_LF IT_ATTACHMENT INTO IT_ATTACHMENT.
APPEND IT_ATTACHMENT.
CONCATENATE L_NOTE ' ' INTO IT_ATTACHMENT SEPARATED BY CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
CONCATENATE CL_ABAP_CHAR_UTILITIES=>CR_LF IT_ATTACHMENT INTO IT_ATTACHMENT.
APPEND IT_ATTACHMENT.
CONCATENATE '' ' ' INTO IT_ATTACHMENT SEPARATED BY CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
CONCATENATE CL_ABAP_CHAR_UTILITIES=>CR_LF IT_ATTACHMENT INTO IT_ATTACHMENT.
APPEND IT_ATTACHMENT.
CONCATENATE 'customer number'
'name'
'country'
INTO IT_ATTACHMENT SEPARATED BY
CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
CONCATENATE CL_ABAP_CHAR_UTILITIES=>CR_LF IT_ATTACHMENT INTO IT_ATTACHMENT.
APPEND IT_ATTACHMENT.
LOOP AT IT_SER INTO WA_SER.
CONCATENATE WA_SER-KUNNR
WA_SER-NAME1
WA_SER-ORT01
INTO IT_ATTACHMENT SEPARATED BY
CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
CONCATENATE CL_ABAP_CHAR_UTILITIES=>CR_LF IT_ATTACHMENT INTO IT_ATTACHMENT.
APPEND IT_ATTACHMENT.
ENDLOOP.
* Selecting the mail id's
SELECT INTID
EMAIL
FROM ZTBIDL
INTO TABLE T_ZTBIDL
WHERE INTID = 'RICEF21' AND
OBJ_NAME = 'PIC'.
LOOP AT T_ZTBIDL INTO WA_ZTBIDL.
IT_RECEIVERS-RECEIVER = WA_ZTBIDL-EMAIL.
IT_RECEIVERS-REC_TYPE = 'U'.
IT_RECEIVERS-COM_TYPE = 'INT'.
IT_RECEIVERS-NOTIF_DEL = 'X'.
IT_RECEIVERS-NOTIF_NDEL = 'X'.
IT_RECEIVERS-EXPRESS = 'X'.
APPEND IT_RECEIVERS.
ENDLOOP.
*File Type
LD_FORMAT = 'XLS'.
**File Name
CONCATENATE 'PIC_' SY-DATUM INTO LD_ATTFILENAME.
* Fill the document data.
GD_DOC_DATA-DOC_SIZE = 1.
* Populate the subject/generic message attributes
GD_DOC_DATA-OBJ_LANGU = SY-LANGU.
GD_DOC_DATA-OBJ_NAME = 'SAPRPT'.
GD_DOC_DATA-OBJ_DESCR = PSUBJECT .
GD_DOC_DATA-SENSITIVTY = 'F'.
* Fill the document data and get size of attachment
CLEAR GD_DOC_DATA.
* Populate the subject/generic message attributes
GD_DOC_DATA-OBJ_LANGU = SY-LANGU.
READ TABLE IT_ATTACHMENT INDEX W_CNT.
GD_DOC_DATA-DOC_SIZE = ( W_CNT - 1 ) * 255 + STRLEN( IT_ATTACHMENT ).
GD_DOC_DATA-OBJ_NAME = 'SAPRPT'.
GD_DOC_DATA-OBJ_DESCR = PSUBJECT.
GD_DOC_DATA-SENSITIVTY = 'F'.
* Describe the body of the message
CLEAR IT_PACKING_LIST.
REFRESH IT_PACKING_LIST.
IT_PACKING_LIST-TRANSF_BIN = SPACE.
IT_PACKING_LIST-HEAD_START = 1.
IT_PACKING_LIST-HEAD_NUM = 0.
IT_PACKING_LIST-BODY_START = 1.
DESCRIBE TABLE IT_MESSAGE LINES IT_PACKING_LIST-BODY_NUM.
IT_PACKING_LIST-DOC_TYPE = 'RAW'.
APPEND IT_PACKING_LIST.
**Describe the attachment info
IT_PACKING_LIST-TRANSF_BIN = 'X'.
IT_PACKING_LIST-HEAD_START = 1.
IT_PACKING_LIST-HEAD_NUM = 1.
IT_PACKING_LIST-BODY_START = 1.
DESCRIBE TABLE IT_ATTACHMENT LINES IT_PACKING_LIST-BODY_NUM.
IT_PACKING_LIST-DOC_TYPE = LD_FORMAT.
IT_PACKING_LIST-OBJ_NAME = LD_ATTFILENAME.
IT_PACKING_LIST-OBJ_DESCR = LD_ATTFILENAME.
IT_PACKING_LIST-DOC_SIZE = IT_PACKING_LIST-BODY_NUM * 255.
APPEND IT_PACKING_LIST.
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = GD_DOC_DATA
PUT_IN_OUTBOX = 'X'
COMMIT_WORK = 'X'
TABLES
PACKING_LIST = IT_PACKING_LIST
CONTENTS_BIN = IT_ATTACHMENT
CONTENTS_TXT = IT_MESSAGE
RECEIVERS = IT_RECEIVERS.