FUNCTION ZZF_SENT_MAIL.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(IN_TITLE) TYPE CHAR50 OPTIONAL
*" VALUE(IN_EMAIL) TYPE CHAR40 OPTIONAL
*" VALUE(IN_COMMIT) TYPE CHAR1 DEFAULT 'X'
*" VALUE(IN_HTML) TYPE CHAR1 DEFAULT SPACE
*" TABLES
*" ET_BCSY_TEXT TYPE BCSY_TEXT OPTIONAL
*"----------------------------------------------------------------------
*类: CL_BCS 发送邮件主要用到的功能类, 包括创建发送请求, 添加发送内容,添加发送地址, 到最终的发送指令发出.
*类: CL_DOCUMENT_BCS, 用来放置发送的内容.
*类: CX_BCS, 不用多说,这是个异常类, 用于捕捉发送邮件过程中出现的异常.
*接口: IF_RECIPIENT_BCS, 用来做邮件地址的存储转换.
DATA: SEND_REQUEST TYPE REF TO CL_BCS,
SENDER TYPE REF TO CL_CAM_ADDRESS_BCS,
DOCUMENT TYPE REF TO CL_DOCUMENT_BCS,
FAIL TYPE REF TO CX_BCS,
RECIPIENT TYPE REF TO IF_RECIPIENT_BCS.

DATA: LS TYPE STRING,
MAILTO TYPE AD_SMTPADR,
MAIN_TEXT TYPE BCSY_TEXT,
TITLE TYPE SO_OBJ_DES.
DATA:LV_MAIL_TEXT_TYPE TYPE SO_OBJ_TP.

*LS = 'IN_TITLE'.

* LOOP AT ET_BCSY_TEXT ASSIGNING FIELD-SYMBOL(<FS_ET_BCSY_TEXT>).
* TRANSLATE <FS_ET_BCSY_TEXT> TO LOWER CASE.
* ENDLOOP.

APPEND LINES OF ET_BCSY_TEXT TO MAIN_TEXT.
TITLE = IN_TITLE.
MAILTO = IN_EMAIL.


IF IN_HTML EQ 'X'.
LV_MAIL_TEXT_TYPE = 'HTM'.
ELSE.
LV_MAIL_TEXT_TYPE = 'RAW'.
ENDIF.



TRY.
* 第一步: 创建发送请求
SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ).

*第二步: 创建整理发送内容
DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT(
I_TYPE = LV_MAIL_TEXT_TYPE
I_TEXT = MAIN_TEXT
I_SUBJECT = TITLE ).
*第三步: 添加邮件内容到发送请求
SEND_REQUEST->SET_DOCUMENT( DOCUMENT ).

"设置发送人
SENDER = cl_cam_address_bcs=>create_internet_address(
'ihr@sinochem.com' ).
send_request->set_sender( sender ).

* 第四步: 邮件地址转换
RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( MAILTO ).
*第五步: 添加邮件地址到发送请求
SEND_REQUEST->ADD_RECIPIENT( RECIPIENT ).
*第六步: 正式发送并提交作业
SEND_REQUEST->SEND( I_WITH_ERROR_SCREEN = 'X' ).
* IF IN_COMMIT EQ 'X'.
COMMIT WORK AND WAIT.
* ENDIF.


CATCH CX_BCS INTO FAIL.
ENDTRY.

ENDFUNCTION.

调用示例

1、工资发布发邮件

LOOP AT GT_LINES ASSIGNING FIELD-SYMBOL(<FW_LINE>).
LS_ZZT_LONG_TEXT-ZLONG_TEXT_NO = SY-UNAME.
LS_ZZT_LONG_TEXT-ZLONG_TEXT = <FW_LINE>-ZLONG_TEXT.
LS_ZZT_LONG_TEXT-UPNAM = SY-UNAME.
LS_ZZT_LONG_TEXT-UPDAT = SY-DATUM.
LS_ZZT_LONG_TEXT-uptim = sy-UZEIT.
APPEND LS_ZZT_LONG_TEXT TO LT_ZZT_LONG_TEXT.

LS_BCSY_TEXT-line = <FW_LINE>-ZLONG_TEXT.
APPEND LS_BCSY_TEXT TO LT_BCSY_TEXT.

AT LAST.
IF SY-MANDT EQ '300'.
"LS_BCSY_TEXT-LINE = 'http://nyhrdev1.sinochem.com:8000/sap/bc/ui2/flp?sap-client=300&sap-language=ZH#RemunerationStatement-displayExt'.
LS_BCSY_TEXT-LINE = 'http://webseal.sinochem.com/ihr/hcm_sso'.
ELSEIF SY-MANDT EQ '500'.
"LS_BCSY_TEXT-LINE = 'http://sehrqas.sinochemenergy.com/hcm#RemunerationStatement-displayExt'.
LS_BCSY_TEXT-LINE = 'http://webseal.sinochem.com/ihr/hcm_sso'.
ELSEIF SY-MANDT EQ '800'.
"LS_BCSY_TEXT-LINE = 'http://ihr.sinochemenergy.com/hcm?sap-client=800&sap-language=ZH#RemunerationStatement-displayExt'.
LS_BCSY_TEXT-LINE = 'http://webseal.sinochem.com/ihr/hcm_sso'.
ENDIF.

APPEND LS_BCSY_TEXT TO LT_BCSY_TEXT.
ENDAT.
ENDLOOP.
GS_MAIL-PERNR = GS_PAYDT-PERNR.
GS_MAIL-EMAIL = <FS_PA0105>-USRID.


LV_EMAIL_FM = GS_MAIL-EMAIL.
CALL FUNCTION 'ZZF_SENT_MAIL'
EXPORTING
IN_TITLE = LV_TITLE
IN_EMAIL = LV_EMAIL_FM
"IN_HTML = 'X'
TABLES
ET_BCSY_TEXT = LT_BCSY_TEXT
.
GS_MAIL-ICON = '@08@'.
GS_MAIL-MESSAGE = '发布成功'.
APPEND GS_MAIL TO GT_MAIL.

2、发送审批邮件

*&---------------------------------------------------------------------*
*& Form SENT_EMAIL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LT_BCSY_TEXT
*& --> <FS_SWHACTOR>_OBJID
*& --> I_WI_RHTEXT
*& --> LV_ENAME
*&---------------------------------------------------------------------*
FORM SENT_EMAIL_APPROVE USING P_OBJID
P_I_WI_RHTEXT
P_LV_ENAME
LV_URL

.


DATA:LV_TITLE TYPE CHAR50,
LV_EMAIL_FM TYPE CHAR40,
LT_BCSY_TEXT TYPE BCSY_TEXT.

"发送待办邮件
SELECT SINGLE *
INTO @DATA(LV_EMAIL_APPROVE)
FROM PA0105 AS 0105_1
WHERE SUBTY = '0014'
AND PERNR EQ (
SELECT PERNR
FROM PA0105 AS 0105_2
WHERE SUBTY = '0001'
AND USRID = @P_OBJID ).
IF SY-SUBRC EQ 0.
LV_TITLE = '审批提醒:' && P_I_WI_RHTEXT && '-' && P_LV_ENAME && '-' && SY-DATUM+0(4) && '-' && SY-DATUM+4(2) && '-' && SY-DATUM+6(2)." '统一待办-创建办结'.
LV_EMAIL_FM = lv_email_approve-usrid.
TRANSLATE LV_EMAIL_FM TO LOWER CASE.
LT_BCSY_TEXT = VALUE #(
( LINE = '审批提醒:您有新的工作流需要审批,' )
( LINE = '请到收件箱中审批:' && '<html><body><a href="' && LV_URL && '">' && P_I_WI_RHTEXT && '</a></body></html>' )
).
CALL FUNCTION 'ZZF_SENT_MAIL'
EXPORTING
IN_TITLE = LV_TITLE
IN_EMAIL = LV_EMAIL_FM
IN_HTML = 'X'
TABLES
ET_BCSY_TEXT = LT_BCSY_TEXT
.
ELSE.
"发送待办邮件
SELECT SINGLE *
INTO @LV_EMAIL_APPROVE
FROM PA0105 AS 0105_1
WHERE SUBTY = '0006'
AND PERNR EQ (
SELECT PERNR
FROM PA0105 AS 0105_2
WHERE SUBTY = '0001'
AND USRID = @P_OBJID ).
IF SY-SUBRC EQ 0.
LV_TITLE = '审批提醒:' && P_I_WI_RHTEXT && '-' && P_LV_ENAME && '-' && SY-DATUM+0(4) && '-' && SY-DATUM+4(2) && '-' && SY-DATUM+6(2)." '统一待办-创建办结'.
LV_EMAIL_FM = lv_email_approve-usrid.
TRANSLATE LV_EMAIL_FM TO LOWER CASE.
LT_BCSY_TEXT = VALUE #(
( LINE = '审批提醒:您有新的工作流需要审批,' )
( LINE = '请到收件箱中审批:' && '<html><body><a href="' && LV_URL && '">' && P_I_WI_RHTEXT && '</a></body></html>' )
).
CALL FUNCTION 'ZZF_SENT_MAIL'
EXPORTING
IN_TITLE = LV_TITLE
IN_EMAIL = LV_EMAIL_FM
IN_HTML = 'X'
TABLES
ET_BCSY_TEXT = LT_BCSY_TEXT
.
ENDIF.
ENDIF.
ENDFORM.

3、工作流发送邮件

*&---------------------------------------------------------------------*
*& Form WF_SENT_MAIL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LR_USRID
*& --> LV_MAIL_CONTEN
*&---------------------------------------------------------------------*
FORM wf_sent_mail TABLES "p_usrid STRUCTURE GS_USRID
LT_MAIL STRUCTURE GS_MAIL
USING p_mail_content
APPLY_NAME
APPLY_PERNR
APPLY_EMAIL
APPLY_PLANS
APPLY_PROVE_TYPE
ZZAPPLY_REASON
ZZREASON_LONG_TEXT
APPLY_TYPE_TEXT

.

DATA:LV_TITLE TYPE CHAR50,
LV_EMAIL_FM TYPE CHAR40,
LT_BCSY_TEXT TYPE BCSY_TEXT,
LT_BCSY_TEXT_END TYPE BCSY_TEXT,
LV_APPLY_PROVE_TYPE_TEXT TYPE STRING,
LV_ZZAPPLY_REASON_TEXT TYPE STRING.

DATA:LV_URL TYPE STRING.


IF sy-mandt EQ '300'.
LV_URL = 'http://webseal.sinochem.com/nyhrdev1/hcm_sso'.

ELSEIF SY-MANDT EQ '500'.
LV_URL = 'http://webseal.sinochem.com/nyhrqas1/hcm_sso'.
ELSEif sy-MANDT eq '800'.
LV_URL = 'http://webseal.sinochem.com/ihr/hcm_sso'.
ENDIF.
"人事范围
SELECT SINGLE NAME1
INTO @DATA(LV_NAME1)
FROM PA0001 JOIN T500P ON PA0001~WERKS EQ T500P~PERSA
WHERE PERNR EQ @APPLY_PERNR
AND BEGDA LE @SY-DATUM
AND ENDDA GE @SY-DATUM.

"职位名称
SELECT SINGLE MC_STEXT
INTO @DATA(lv_PLANC_STEXT)
FROM HRP1000
WHERE OTYPE EQ 'S'
AND OBJID EQ @APPLY_PLANS.



LV_TITLE = '证明申请提醒' && '-' && SY-DATUM+0(4) && '-' && SY-DATUM+4(2) && '-' && SY-DATUM+6(2).

SELECT *
INTO TABLE @DATA(LT_DD07T)
FROM DD07T
WHERE DOMNAME IN ( 'ZD_ZZPROVE_TYPE', 'ZD_ZZAPPLY_REASON' )
AND DDLANGUAGE EQ @SY-LANGU
and DOMVALUE_L IN ( @APPLY_PROVE_TYPE,@ZZAPPLY_REASON ).

SORT LT_DD07T BY DOMNAME DOMVALUE_L.

LOOP AT LT_DD07T ASSIGNING FIELD-SYMBOL(<FS_DD07T>).
IF <FS_DD07T>-DOMNAME = 'ZD_ZZPROVE_TYPE' AND <FS_DD07T>-DOMVALUE_L = APPLY_PROVE_TYPE.
LV_APPLY_PROVE_TYPE_TEXT = <FS_DD07T>-DDTEXT.
ELSEIF <FS_DD07T>-DOMNAME = 'ZD_ZZAPPLY_REASON' AND <FS_DD07T>-DOMVALUE_L = ZZAPPLY_REASON.
LV_ZZAPPLY_REASON_TEXT = <FS_DD07T>-DDTEXT.
ENDIF.
ENDLOOP.



LOOP AT LT_MAIL ASSIGNING FIELD-SYMBOL(<FS_MAIL>).
LV_EMAIL_FM = <FS_MAIL>-EMAIL.
TRANSLATE LV_EMAIL_FM TO LOWER CASE.

LT_BCSY_TEXT = VALUE #(
"&nbsp&nbsp&nbsp
( LINE = '<html><body><p>' && '尊敬的' && <FS_MAIL>-UNAME && ':</p></body></html>' )
( LINE = '<html><body><p>' && APPLY_NAME && '员工已经成功提交申请开具' && LV_APPLY_PROVE_TYPE_TEXT && ',申请原因是:' && LV_ZZAPPLY_REASON_TEXT && ZZREASON_LONG_TEXT && '。' && '</p></body></html>' )
( LINE = '<html><body><p>' && '员工信息如下:' && '</p></body></html>' )
( LINE = '<html><body><p>' && '</p></body></html>' )
( LINE = '<html><body><p>' && '姓名:' && APPLY_NAME && '</p></body></html>' )
( LINE = '<html><body><p>' && '员工编号:' && APPLY_PERNR && '</p></body></html>' )
( LINE = '<html><body><p>' && '邮箱:' && APPLY_EMAIL && '</p></body></html>' )
( LINE = '<html><body><p>' && '单位名称:' && LV_NAME1 && '</p></body></html>' )
( LINE = '<html><body><p>' && '职位:' && lv_PLANC_STEXT && '</p></body></html>' )
( LINE = '<html><body><p>' && '</p></body></html>' )
"( LINE = '请登录' && '<html><body><a href="' && LV_URL && '">' && 'iHR系统' && '</a></body></html>' && '选择' && APPLY_TYPE_TEXT && '磁贴,选择员工并下载打印。' )
).

IF <FS_MAIL>-apprlevel = 0.
LT_BCSY_TEXT_END = VALUE #(
( LINE = '<html><body><p>' && '请等待本单位人力部门邮件或电话沟通处理结果。' && '</p></body></html>' )
( LINE = '<html><body><p>' && '</p></body></html>' )
( LINE = '<html><body><p>' && 'iHR' && '</p></body></html>' )
).
APPEND LINES OF LT_BCSY_TEXT_END TO LT_BCSY_TEXT.
ELSE.
LT_BCSY_TEXT_END = VALUE #(
( LINE = '请及时登录' && '<html><body><a href="' && LV_URL && '">' && 'iHR系统打印证明并盖章处理' && '</a></body></html>' )
( LINE = '<html><body><p>' && '</p></body></html>' )
( LINE = '<html><body><p>' && 'iHR' && '</p></body></html>' )
).
APPEND LINES OF LT_BCSY_TEXT_END TO LT_BCSY_TEXT.
ENDIF.


CALL FUNCTION 'ZZF_SENT_MAIL'
EXPORTING
IN_TITLE = LV_TITLE
IN_EMAIL = LV_EMAIL_FM
IN_HTML = 'X'
TABLES
ET_BCSY_TEXT = LT_BCSY_TEXT
.
ENDLOOP.




ENDFORM.