SAP ABAP ile Mail Gönderme İşlemi
SAP sistemi üzerinden mail gönderme işlemi için adımlar:
Adım 1: Mail için ‘cl_bcs’ sınıfından obje yaratıyoruz ve ilk olarak mail konusunu veriyoruz.
DATA: lo_msg TYPE REF TO cl_bcs.
lo_msg = cl_bcs=>create_persistent( ).
lo_msg->set_message_subject(
'Mail Gönderme Hk.' ).
Adım 2: Set sender metodu ile gönderici adresini veriyoruz. Bu adresi yaratmak için gönderici objesinin metodunu kullanıyoruz.
lo_sender = cl_cam_address_bcs=>
create_internet_address(
i_address_string = 'sender.name@nagarro.com' ).
TRY.
lo_msg->set_sender( lo_sender ).
CATCH cx_send_req_bcs.
ENDTRY.
*lo_sender if_sender_bcs classından
yaratılan gönderici objesi
Adım 3: Mail alıcısını ekliyoruz. Birden fazla alıcıya göndermek için örnekteki gibi adreslerin toplandığı bir tablodan döngü içerisinde alınabilir.
LOOP AT lt_recipients
INTO DATA(ls_recipients).
TRY.
lo_recipient = cl_cam_address_bcs=>
create_internet_address(
ls_recipients-mail_adresi ).
CATCH cx_address_bcs INTO lr_oref.
ENDTRY.
TRY.
lo_msg->add_recipient(
i_recipient = lo_recipient
).
*lo_recipient if_recipient_bcs classından
yaratılan gönderici objesi
CATCH cx_send_req_bcs.
ENDTRY.
ENDLOOP.
Adım 4: Mail içeriği için doküman ekleyelim. Mail body, düz yazı formatında ya da html formatında yaratılabilir. Örnekte html için bir text yaratıyoruz.
lv_html_str = |<html>Dear Team,<br>
We would like to inform you that {someone} has
been assigned as the Coordinator for following
notification. Details are as follows:| &&
|<br/><br/><head><meta charset="utf-8"></head>
<body><ul><li>Notification ID:| &&
|{ lv_notifid }| && |</li><li>Assignment Date:| &&
|{ sy-datum }| && |</li></ul><br>Please take the
necessary actions.<br>Best regards,</html>|.
Adım 5: Yarattığımız text ile html dokümanı oluşturmak için solix_tab tipine çeviriyoruz.
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING
text = lv_html_str
IMPORTING
buffer = lv_xhtml_str
EXCEPTIONS
failed = 1
OTHERS = 2.
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = lv_xhtml_str
TABLES
binary_tab = lt_hx.
Adım 6: Tablomuzu kullanarak html tipindeki dokümanı yaratıyoruz.
TRY.
lr_doc = cl_document_bcs=>create_document(
i_type = 'HTM'
i_hex = lt_hx
i_subject = lv_subj ).
CATCH cx_document_bcs INTO lr_oref .
ENDTRY.
Adım 7: Mesajınıza ek bir dosya eklemek için add_attachment metodunu kullanıyoruz.
lr_doc->add_attachment(
EXPORTING
i_attachment_type = 'XLS'
i_attachment_subject = 'ATTACHMENT_NAME'
i_att_content_hex = lt_content_hex
).
*lt_content_hex solix_tab tipinde excel
Verilerini tutan değişkenimiz.
Adım 8: Mail objemize dokümanı ekliyoruz.
TRY.
lo_msg->set_document( lr_doc ).
CATCH cx_send_req_bcs.
ENDTRY.
Adım 9: Send metodu ile mail gönderme komutunu veriyoruz.
TRY.
lo_msg->send( ).
CATCH cx_bcs_send.
ENDTRY.
Mail durumunu kontrol etmek için SOST işlem koduna gidiyoruz. Sayfayı yenileyerek en mailimizi seçip display butonuna basarak mail içeriğimizi ve durumunu kontrol edebiliriz.
Mail gönderme işlemi için örnek program:
DATA: lo_recipient TYPE REF TO if_recipient_bcs VALUE IS INITIAL,
lo_sender TYPE REF TO if_sender_bcs VALUE IS INITIAL,
lo_doc TYPE REF TO cl_document_bcs,
lv_html_str TYPE string,
lv_xhtml_str TYPE xstring,
lt_hx TYPE solix_tab.
DATA: lo_msg TYPE REF TO cl_bcs.
lo_msg = cl_bcs=>create_persistent( ).
lo_msg->set_message_subject( 'Mail Gönderme Temp.' ).
lo_sender = cl_cam_address_bcs=>create_internet_address(
i_address_string = 'zeynep.bolat@nagarro.com' ).
lo_msg->set_sender( lo_sender ).
lo_recipient = cl_cam_address_bcs=>create_internet_address(
i_address_string = 'zeynep.bolat@nagarro.com' ).
lo_msg->add_recipient( lo_recipient ).
lv_html_str =
|<html><br/><br/><head><meta charset="utf-8"></head>| &&
|Merhaba,<br>Bu bir örnek mail taslağıdır.<br></html>|.
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING
text = lv_html_str
IMPORTING
buffer = lv_xhtml_str
EXCEPTIONS
failed = 1
OTHERS = 2.
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = lv_xhtml_str
TABLES
binary_tab = lt_hx.
TRY .
lo_doc = cl_document_bcs=>create_document(
i_type = 'HTM'
i_hex = lt_hx
i_subject = 'Mail Taslağı' ).
CATCH cx_document_bcs.
ENDTRY.
TRY.
lo_msg->set_document( lo_doc ).
CATCH cx_send_req_bcs.
ENDTRY.
TRY.
lo_msg->send( ).
COMMIT WORK.
CATCH cx_bcs_send.
ENDTRY.
Yazan : Zeynep Bolat