در این قسمت از آموزش های SAP، قصد داریم نحوه ارسال ایمیل را در SAP بررسی نماییم. در اینجا یک Function Module ایجاد کرده و در هر کجا که نیاز بود از آن استفاده خواهیم کرد.
ایجاد Function Module
برای ایجاد Function Module ارسال ایمیل، مراحل زیر را طی فرمایید:
- تیکد SE37 را در نوار فرمان وارد کرده و Enter کنید. بلافاصله پنجره "Function builder: Initiative Screen" نمایان می شود.
- نام Function Module را تنظیم نمایید.
- برای ادامه روی دکمه Create کلیک نمایید.

- فیلدهای Function Group را تنظیم نمایید.
- فیلد Short text را تنظیم نمایید.
- روی دکمه Save کلیک نمایید.

- روی تب import کلیک کنید.
- مطابق تصویر زیر، فیلدهای Parameter Name (نام پارامترهای ورودی) و Associated Type (نوع مرتبط) را تنظیم نمایید.

- روی تب Export کلیک کنید.
- مطابق تصویر زیر، فیلدهای Parameter Name (نام پارامترهای خروجی) و Associated Type (نوع مرتبط) را تنظیم نمایید.

- روی تب Exceptions کلیک کنید.
- نام Exceptions و Short Text را مانند شکل زیر وارد نمایید.

- روی تب Source Code کلیک کنید.
- کد مربوط به Function را در بین FUNCTION و ENDFUNCTION که در زیر نشان داده شده است اضافه کنید.

کد ارسال ایمیل
FUNCTION ZGE_SEND_EMAIL.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(TO_MAIL) TYPE AD_SMTPADR
*" REFERENCE(CC_MAIL) TYPE AD_SMTPADR OPTIONAL
*" REFERENCE(BCC_MAIL) TYPE AD_SMTPADR OPTIONAL
*" REFERENCE(SENDER_MAIL) TYPE AD_SMTPADR OPTIONAL
*" REFERENCE(MAIL_TEXT) TYPE BCSY_TEXT OPTIONAL
*" REFERENCE(MAIL_SUBJECT) TYPE STRING
*" REFERENCE(I_COMMIT) TYPE CHAR1 DEFAULT SPACE
*" EXPORTING
*" REFERENCE(SENT_TO_ALL) TYPE OS_BOOLEAN
*" REFERENCE(RESULT_RETURN) TYPE BAPIRET2
*" EXCEPTIONS
*" SENDING_ERROR
*" DATA_ERROR
*" NO_RECEIVER
*" NO_MAIL_SUBJECT
*"----------------------------------------------------------------------
DATA: send_request TYPE REF TO cl_bcs,
mailsubject TYPE so_obj_des,
mailtext TYPE bcsy_text,
document TYPE REF TO cl_document_bcs,
sender TYPE REF TO cl_cam_address_bcs,
recipient_to TYPE REF TO cl_cam_address_bcs,
recipient_cc TYPE REF TO cl_cam_address_bcs,
recipient_bcc TYPE REF TO cl_cam_address_bcs,
bcs_exception TYPE REF TO cx_bcs,
my_text TYPE string.
CLEAR result_return.
TRY.
send_request = cl_bcs=>create_persistent( ).
IF to_mail IS NOT INITIAL.
recipient_to = cl_cam_address_bcs=>create_internet_address( to_mail ). "Receiver Set
send_request->add_recipient( i_recipient = recipient_to ).
IF cc_mail IS NOT INITIAL.
recipient_cc = cl_cam_address_bcs=>create_internet_address( cc_mail ). "CC Set
send_request->add_recipient( i_recipient = recipient_cc i_copy = 'X' ).
ENDIF.
IF bcc_mail IS NOT INITIAL.
recipient_bcc = cl_cam_address_bcs=>create_internet_address( bcc_mail ). "BCC Set
send_request->add_recipient( i_recipient = recipient_bcc i_blind_copy = 'X' ).
ENDIF.
IF sender_mail IS NOT INITIAL.
sender = cl_cam_address_bcs=>create_internet_address( sender_mail ). "Sender Set
send_request->set_sender( sender ).
ENDIF.
IF mail_subject IS NOT INITIAL.
mailsubject = mail_subject. "Subject Set
mailtext = mail_text. "Email Text Set
document = cl_document_bcs=>create_document(
i_type = 'RAW'
i_text = mailtext
i_subject = mailsubject ).
send_request->set_document( document ).
sent_to_all = send_request->send( ).
IF sent_to_all NE 'X'.
result_return-message = 'Email Not Sent To All Recipient'.
result_return-type = 'E'.
RAISE sending_error.
ENDIF.
if I_COMMIT is NOT INITIAL .
COMMIT WORK.
endif.
ELSE.
result_return-message = 'Mail Subject Not Set Yet'.
result_return-type = 'E'.
RAISE no_mail_subject.
ENDIF.
ELSE.
result_return-message = 'Receiver Not Set Yet'.
result_return-type = 'E'.
RAISE no_receiver.
ENDIF.
CATCH cx_bcs INTO bcs_exception.
result_return-message = 'Problem In Input Data'.
result_return-type = 'E'.
RAISE data_error.
ENDTRY.
ENDFUNCTION.




