Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Sending mails

Former Member
0 Likes
543

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

3 REPLIES 3
Read only

kiran_k8
Active Contributor
0 Likes
515

Perera,

Check SBWP transaction.

K.Kiran.

Read only

Former Member
0 Likes
515

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

Read only

Former Member
0 Likes
515

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