‎2007 Dec 20 4:24 AM
Hi all
I need to send mail using sap ,any idia of it,please help me.BUT we are using exchange server,any idia.
Thanks
kanishka
‎2007 Dec 20 4:29 AM
‎2007 Dec 20 4:34 AM
If u want to send mails outside, use FM
SO_DOCUMENT_SEND_API1, if u want to send within SAP, in
RECEIVERS parameters specify the SAP inbox address
and if u want to see mails in SAP inbox, u can check in SBWP tcode
‎2007 Dec 20 4:43 AM
hi,
i have pasted a code here which is used to attach a excel file and send as a mail....try this and analyze this in debugger
REPORT ZIND_GOODS_XLS_EMAIL MESSAGE-ID zmdm.
----
Tables
----
TABLES: mara,marc,mard,mkpf,mseg,likp,t156ht,kna1,lfa1, vbfa, lips.
----
Structures and Internal tables
----
DATA: BEGIN OF itab OCCURS 0,
lgort LIKE mseg-lgort, " St Location
name1 LIKE kna1-name1, " Ship to Name
ebeln LIKE mseg-ebeln, " PO Num
bktxt LIKE mkpf-bktxt, " Delivery Header
ort01 LIKE kna1-ort01, " Ship to City
budat LIKE mkpf-budat, " Posting date
bwart LIKE mseg-bwart, " Movement Type
btext LIKE t156ht-btext, " Movement Type Text
mblnr LIKE mkpf-mblnr, " Mat Doc Number
xblnr LIKE mkpf-xblnr, " Dlvy No
matnr LIKE mseg-matnr, " Material No
maktx LIKE makt-maktx, " Mat Desc
menge LIKE mseg-menge, " Qty
dmbtr LIKE mseg-dmbtr, " Amount in local currency
*dmbtr(15) type c,
kunnr LIKE mseg-kunnr, " Customer NO
lifnr LIKE mseg-lifnr, " Vendor No
kdauf LIKE mseg-kdauf, "Sales order
mat_kdauf LIKE mseg-mat_kdauf, "SAles order for mvt type 653 "0001
meins LIKE mseg-meins,
werks LIKE mseg-werks,
END OF itab.
DATA : BEGIN OF t_fin OCCURS 0,
lgort LIKE mseg-lgort, " St Location
lifnr LIKE mseg-lifnr, " Customer Or Vendor
name1 LIKE kna1-name1, " Ship to Name
ebeln LIKE mseg-ebeln, " PO Num "0001
ebeln LIKE vbak-bstnk, " PO num "0001
bktxt LIKE mkpf-bktxt, " Delivery Header
ort01 LIKE kna1-ort01, " Ship to City
budat LIKE mkpf-budat, " Posting date
bwart LIKE mseg-bwart, " Movement Type
btext LIKE t156ht-btext," Movement Type Text
mblnr LIKE mkpf-mblnr, " Mat Doc Number
xblnr LIKE mkpf-xblnr, " Dlvy No
matnr LIKE mseg-matnr, " Material No
maktx LIKE makt-maktx, " Mat Desc
menge(13) TYPE C, " Qty
dmbtr(13) TYPE C, " Amount in local currency
END OF t_fin.
*
DATA : T_FIN TYPE STANDARD TABLE OF IT_FIN INITIAL SIZE 0 WITH HEADER LINE,
WA_FIN TYPE IT_FIN.
**********
TYPES : BEGIN OF T_CHARTABLES,
LGORT(4) TYPE C,
LIFNR(10) TYPE C,
NAME1(35) TYPE C,
EBELN(20) TYPE C,
BKTXT(25) TYPE C,
ort01(35) TYPE C,
BUDAT(8) TYPE C,
BWART(3) TYPE C,
BTEXT(20) TYPE C,
MBLNR(10) TYPE C,
XBLNR(16) TYPE C,
MATNR(18) TYPE C,
MAKTX(40) TYPE C,
MENGE(13) TYPE C,
DMBTR(13) TYPE C,
END OF T_CHARTABLES.
DATA : WA_CHARTABLES TYPE T_CHARTABLES.
DATA: it_message TYPE STANDARD TABLE OF solisti1 INITIAL SIZE 0
WITH HEADER LINE.
DATA: it_attach TYPE STANDARD TABLE OF solisti1 INITIAL SIZE 0
WITH HEADER LINE.
DATA: t_packing_list LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,
t_contents LIKE solisti1 OCCURS 0 WITH HEADER LINE,
t_receivers LIKE somlreci1 OCCURS 0 WITH HEADER LINE,
t_attachment LIKE solisti1 OCCURS 0 WITH HEADER LINE,
t_object_header LIKE solisti1 OCCURS 0 WITH HEADER LINE,
w_cnt TYPE i,
w_sent_all(1) TYPE c,
w_doc_data LIKE sodocchgi1,
gd_error TYPE sy-subrc,
gd_reciever TYPE sy-subrc.
************
----
Selection-screen
----
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_werks FOR marc-werks OBLIGATORY,
s_lgort FOR mard-lgort DEFAULT '0010',
s_matnr FOR mara-matnr,
s_matkl FOR mara-matkl,
s_budat FOR mkpf-budat,
s_bwart FOR mseg-bwart.
SELECTION-SCREEN END OF BLOCK blk1.
PARAMETERS: p_email TYPE somlreci1-receiver
DEFAULT 'mailme.kar@gmail.com'.
AT SELECTION-SCREEN.
PERFORM 50_check_authority.
PERFORM 75_EMAIL_VALIDITY.
----
START-OF-SELECTION.
----
START-OF-SELECTION.
PERFORM 100_collect_dbrecs.
PERFORM 200_process_dbrecs.
PERFORM 300_xls_data_table.
----
END-OF-SELECTION.
----
END-OF-SELECTION.
perform 400_populate_email_mess_body.
PERFORM send_file_as_email_attachment
tables it_message
it_attach
using p_email
'Example .xls documnet attachment'
'XLS'
'filename'
'GOODS'
' '
' '
changing gd_error
gd_reciever.
PERFORM initiate_mail_execute_program.
&----
*& Form 50_check_authority
&----
form 50_check_authority .
TABLES: t001w.
SELECT werks
FROM t001w
INTO t001w-werks
WHERE werks IN s_werks.
AUTHORITY-CHECK OBJECT 'M_MATE_WRK'
ID 'ACTVT' FIELD '03'
ID 'WERKS' FIELD t001w-werks.
IF sy-subrc <> 0.
MESSAGE e000 WITH text-a00.
ENDIF.
ENDSELECT.
AUTHORITY-CHECK OBJECT 'M_MATE_BUK'
ID 'WERKS' FIELD s_bukrs.
endform. " 50_check_authority
&----
*& Form 100_collect_dbrecs
&----
form 100_collect_dbrecs .
TYPES : BEGIN OF stype_fields,
fieldname TYPE name_feld,
END OF stype_fields.
TYPES : stab_fields TYPE STANDARD TABLE
OF stype_fields
WITH DEFAULT KEY.
DATA : l_t_fields TYPE stab_fields.
create table with the fields to be transported
APPEND 'MSEG~AUFNR' TO l_t_fields.
APPEND 'MKPF~BKTXT' TO l_t_fields.
APPEND 'MKPF~BLDAT' TO l_t_fields.
APPEND 'MSEG~BPMNG' TO l_t_fields.
APPEND 'MSEG~BPRME' TO l_t_fields.
APPEND 'MSEG~BSTME' TO l_t_fields.
APPEND 'MSEG~BSTMG' TO l_t_fields.
APPEND 'MKPF~BUDAT' TO l_t_fields.
APPEND 'MSEG~BWART' TO l_t_fields.
APPEND 'MSEG~EBELN' TO l_t_fields.
APPEND 'MSEG~EBELP' TO l_t_fields.
APPEND 'MSEG~KUNNR' TO l_t_fields.
APPEND 'MSEG~LGORT' TO l_t_fields. " St Location
APPEND 'MSEG~LIFNR' TO l_t_fields. " Vendor Num
APPEND 'MSEG~MATNR' TO l_t_fields. " Mat No
APPEND 'MSEG~KDAUF' TO l_t_fields.
APPEND 'MSEG~MAT_KDAUF' TO l_t_fields. "sales order for mvt type 653 "0001
APPEND 'MKPF~MBLNR' TO l_t_fields.
APPEND 'MSEG~MEINS' TO l_t_fields.
APPEND 'MSEG~MENGE' TO l_t_fields.
APPEND 'MSEG~WERKS' TO l_t_fields.
APPEND 'MKPF~XBLNR' TO l_t_fields.
APPEND 'MKPF~BKTXT' TO l_t_fields.
APPEND 'MSEG~DMBTR' TO l_t_fields.
SELECT (l_t_fields)
INTO CORRESPONDING FIELDS OF TABLE itab
FROM mkpf INNER JOIN mseg
ON mkpfmandt = msegmandt
AND mkpfmblnr = msegmblnr
AND mkpfmjahr = msegmjahr
WHERE mkpf~budat IN s_budat
AND mseg~bwart IN s_bwart
AND mseg~lgort IN s_lgort
AND mseg~matnr IN s_matnr
AND mseg~werks IN s_werks.
endform. " 100_collect_dbrecs
&----
*& Form 200_process_dbrecs
&----
form 200_process_dbrecs .
DATA: l_adrnr TYPE adrc-addrnumber. "0002
LOOP AT itab.
CLEAR: mara-matkl,t_fin.
SELECT SINGLE matkl INTO mara-matkl
FROM mara
WHERE matnr EQ itab-matnr.
IF sy-subrc EQ 0.
IF mara-matkl IN s_matkl.
MOVE: itab-ebeln TO t_fin-ebeln. "0001
IF NOT itab-kunnr IS INITIAL.
*mod 0002
SELECT SINGLE name1 ort01
INTO (itab-name1,itab-ort01)
FROM kna1
WHERE kunnr EQ itab-kunnr.
*end of 0002
*Begin of mod 0001
SELECT SINGLE kdauf FROM lips
INTO lips-kdauf
WHERE vbeln EQ itab-xblnr.
SELECT SINGLE vbelv FROM vbfa
INTO vbfa-vbelv
WHERE vbeln EQ itab-xblnr
AND vbtyp_n EQ 'J'.
SELECT SINGLE vgbel FROM lips
INTO lips-vgbel
WHERE vbeln EQ itab-xblnr.
IF sy-subrc EQ 0.
SELECT SINGLE bstnk FROM vbak
INTO t_fin-ebeln
WHERE vbeln EQ lips-vgbel.
*begin of 0002
CLEAR: l_adrnr.
SELECT SINGLE adrnr INTO l_adrnr
FROM vbpa
WHERE vbeln EQ vbfa-vbelv
AND parvw EQ 'WE'.
IF sy-subrc EQ 0.
SELECT SINGLE name1 mc_city1
INTO (itab-name1, itab-ort01)
FROM adrc
WHERE addrnumber EQ l_adrnr.
ENDIF.
*end of 0002
ENDIF.
*End of mod 0001
t_fin-lifnr = itab-kunnr.
MOVE: kna1-name1 to itab-name1,
kna1-ort01 to itab-ort01.
ELSEIF NOT itab-lifnr IS INITIAL.
SELECT SINGLE name1 ort01
INTO (itab-name1,itab-ort01)
FROM lfa1
WHERE lifnr EQ itab-lifnr.
t_fin-lifnr = itab-lifnr.
ELSEIF NOT itab-kdauf IS INITIAL.
SELECT SINGLE kunnr bstnk "0001
INTO (itab-kunnr,t_fin-ebeln) "0001
FROM vbak
WHERE vbeln EQ itab-kdauf.
IF sy-subrc EQ 0. "0001
*Begin 0002
SELECT SINGLE name1 ort01
INTO (itab-name1,itab-ort01)
FROM kna1
WHERE kunnr EQ itab-kunnr.
CLEAR: l_adrnr.
SELECT SINGLE adrnr INTO l_adrnr
FROM vbpa
WHERE vbeln EQ itab-kdauf
AND parvw EQ 'WE'.
IF sy-subrc EQ 0.
SELECT SINGLE name1 mc_city1
INTO (itab-name1, itab-ort01)
FROM adrc
WHERE addrnumber EQ l_adrnr.
ENDIF.
*end of 0002
t_fin-lifnr = itab-kunnr.
ENDIF. "0001
*Begin of mod 0001
ELSEIF NOT itab-mat_kdauf IS INITIAL AND itab-bwart EQ '653' .
SELECT SINGLE kunnr bstnk
INTO (itab-kunnr,t_fin-ebeln)
FROM vbak
WHERE vbeln EQ itab-mat_kdauf.
IF sy-subrc EQ 0.
SELECT SINGLE name1 ort01
INTO (itab-name1,itab-ort01)
FROM kna1
WHERE kunnr EQ itab-kunnr.
t_fin-lifnr = itab-kunnr.
ENDIF.
*End of mod 0001
ENDIF.
SELECT SINGLE btext INTO itab-btext
FROM t156ht
WHERE bwart EQ itab-bwart
AND spras EQ sy-langu.
SELECT SINGLE maktx INTO itab-maktx
FROM makt
WHERE matnr EQ itab-matnr
AND spras EQ sy-langu.
MODIFY itab.
MOVE: itab-lgort TO t_fin-lgort,
itab-name1 TO t_fin-name1,
itab-bktxt TO t_fin-bktxt,
itab-ort01 TO t_fin-ort01,
itab-budat TO t_fin-budat,
itab-bwart TO t_fin-bwart,
itab-btext TO t_fin-btext,
itab-mblnr TO t_fin-mblnr,
itab-xblnr TO t_fin-xblnr,
itab-matnr TO t_fin-matnr,
itab-maktx TO t_fin-maktx,
itab-menge TO t_fin-menge,
itab-dmbtr TO t_fin-dmbtr.
APPEND t_fin.
CLEAR t_fin.
ELSE.
DELETE itab.
ENDIF.
ENDIF.
ENDLOOP.
endform. " 200_process_dbrecs
&----
*& Form 75_EMAIL_VALIDITY
&----
form 75_EMAIL_VALIDITY .
CONDENSE P_EMAIL NO-GAPS.
if NOT P_EMAIL <> space OR NOT P_EMAIL CS '@' OR NOT P_EMAIL CA '.'.
message 'Please Enter the Mail-Id in Proper Format' type 'W001'.
endif.
endform. " 75_EMAIL_VALIDITY
&----
*& Form 300_xls_data_table
&----
form 300_xls_data_table .
constants:
con_tab type c value cl_abap_char_utilities=>HORIZONTAL_TAB,
con_cret type c value cl_abap_char_utilities=>CR_LF.
CONCATENATE 'LGORT' 'LIFNR' 'BWART' 'MATNR' 'MENGE' 'DMBTR' 'NAME1' 'EBELN' 'BKTXT' 'BUDAT' 'MBLNR' 'XBLNR' 'ORT01' 'BTEXT' 'MAKTX'
INTO it_attach SEPARATED BY con_tab.
CONCATENATE con_cret it_attach INTO it_attach.
APPEND it_attach.
LOOP AT t_FIN INTO wa_CHARTABLES.
CONCATENATE wa_charTABLES-LGORT wa_charTABLES-LIFNR WA_CHARTABLES-BWART WA_CHARTABLES-MATNR
WA_CHARTABLES-MENGE WA_CHARTABLES-DMBTR WA_CHARTABLES-NAME1 WA_CHARTABLES-EBELN
WA_CHARTABLES-BKTXT WA_CHARTABLES-BUDAT WA_CHARTABLES-MBLNR WA_CHARTABLES-XBLNR
WA_CHARTABLES-ORT01 WA_CHARTABLES-BTEXT WA_CHARTABLES-MAKTX
INTO it_attach SEPARATED BY con_tab.
CONCATENATE con_cret it_attach INTO it_attach.
APPEND it_attach.
ENDLOOP.
endform. " 300_xls_data_table
&----
*& Form 400_populate_email_mess_body
&----
form 400_populate_email_mess_body .
REFRESH it_message.
it_message = 'Please find attached a list Goods Movement Report'.
APPEND it_message.
endform. " 400_populate_email_mess_body
&----
*& Form send_file_as_email_attachment
&----
form send_file_as_email_attachment tables pit_message
pit_attach
using p_email
p_mtitle
p_format
p_filename
p_attdescription
p_sender_address
p_sender_addres_type
changing p_error
p_reciever.
DATA: ld_error TYPE sy-subrc,
ld_reciever TYPE sy-subrc,
ld_mtitle LIKE sodocchgi1-obj_descr,
ld_email LIKE somlreci1-receiver,
ld_format TYPE so_obj_tp ,
ld_attdescription TYPE so_obj_nam ,
ld_attfilename TYPE so_obj_des ,
ld_sender_address LIKE soextreci1-receiver,
ld_sender_address_type LIKE soextreci1-adr_typ,
ld_receiver LIKE sy-subrc.
ld_email = p_email.
ld_mtitle = p_mtitle.
ld_format = p_format.
ld_attdescription = p_attdescription.
ld_attfilename = p_filename.
ld_sender_address = p_sender_address.
ld_sender_address_type = p_sender_addres_type.
Fill the document data.
w_doc_data-doc_size = 1.
Populate the subject/generic message attributes
w_doc_data-obj_langu = sy-langu.
w_doc_data-obj_name = 'SAPRPT'.
w_doc_data-obj_descr = ld_mtitle .
w_doc_data-sensitivty = 'F'.
Fill the document data and get size of attachment
CLEAR w_doc_data.
READ TABLE it_attach INDEX w_cnt.
w_doc_data-doc_size =
( w_cnt - 1 ) * 255 + STRLEN( it_attach ).
w_doc_data-obj_langu = sy-langu.
w_doc_data-obj_name = 'SAPRPT'.
w_doc_data-obj_descr = ld_mtitle.
w_doc_data-sensitivty = 'F'.
CLEAR t_attachment.
REFRESH t_attachment.
t_attachment[] = pit_attach[].
Describe the body of the message
CLEAR t_packing_list.
REFRESH t_packing_list.
t_packing_list-transf_bin = space.
t_packing_list-head_start = 1.
t_packing_list-head_num = 0.
t_packing_list-body_start = 1.
DESCRIBE TABLE it_message LINES t_packing_list-body_num.
t_packing_list-doc_type = 'RAW'.
APPEND t_packing_list.
Create attachment notification
t_packing_list-transf_bin = 'X'.
t_packing_list-head_start = 1.
t_packing_list-head_num = 1.
t_packing_list-body_start = 1.
DESCRIBE TABLE t_attachment LINES t_packing_list-body_num.
t_packing_list-doc_type = ld_format.
t_packing_list-obj_descr = ld_attdescription.
t_packing_list-obj_name = ld_attfilename.
t_packing_list-doc_size = t_packing_list-body_num * 255.
APPEND t_packing_list.
Add the recipients email address
CLEAR t_receivers.
REFRESH t_receivers.
t_receivers-receiver = ld_email.
t_receivers-rec_type = 'U'.
t_receivers-com_type = 'INT'.
t_receivers-notif_del = 'X'.
t_receivers-notif_ndel = 'X'.
APPEND t_receivers.
CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
EXPORTING
document_data = w_doc_data
put_in_outbox = 'X'
sender_address = ld_sender_address
sender_address_type = ld_sender_address_type
commit_work = 'X'
IMPORTING
sent_to_all = w_sent_all
TABLES
packing_list = t_packing_list
contents_bin = t_attachment
contents_txt = it_message
receivers = t_receivers
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8.
Populate zerror return code
ld_error = sy-subrc.
Populate zreceiver return code
LOOP AT t_receivers.
ld_receiver = t_receivers-retrn_code.
ENDLOOP.
endform. " send_file_as_email_attachment
&----
*& Form initiate_mail_execute_program
&----
form initiate_mail_execute_program .
WAIT UP TO 2 SECONDS.
SUBMIT rsconn01 WITH mode = 'INT'
WITH output = 'X'
AND RETURN.
endform.
hope this will be useful...
regards,
karthik