در این قسمت از آموزش های SAP، قصد داریم نحوه ارسال ایمیل را در SAP بررسی نماییم. در اینجا یک Function Module ایجاد کرده و در هر کجا که نیاز بود از آن استفاده خواهیم کرد.

ایجاد Function Module

برای ایجاد Function Module ارسال ایمیل، مراحل زیر را طی فرمایید:

  1. تیکد SE37 را در نوار فرمان وارد کرده و Enter کنید. بلافاصله پنجره "Function builder: Initiative Screen" نمایان می شود.
  2. نام Function Module را تنظیم نمایید.
  3. برای ادامه روی دکمه Create کلیک نمایید. 

ارسال ایمیل در SAP

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

ارسال ایمیل در SAP

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

ارسال ایمیل در SAP

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

ارسال ایمیل در SAP

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

ارسال ایمیل در SAP

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

ارسال ایمیل در SAP

کد ارسال ایمیل

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.