Sending email in SAP ABAP using Cl_BCS class

Step1:Design selection-screen for email id input Normal Top^

This tutorial explains you sending emails using SAP ABAP programming language.

Go to SE38, create a program ZSAPN_SEND_EMAIL, save it in a local object.

Design a screen to enter email id, email subject, send immediatly flag.
PARAMETERS : P_EMAIL TYPE ADR6-SMTP_ADDR. "Emai input
PARAMETERS: P_SUB TYPE CHAR50. "email subject
PARAMETERS : P_SEND AS CHECKBOX. "send immediatly flag

Send email in SAP ABAP

Step2:Set email subject and body Important Top^

Declare and prepare email object for cl_bcs

*Prepare Mail Object
DATA:  LO_SEND_REQUEST TYPE REF TO CL_BCS VALUE IS INITIAL.
CLASS CL_BCS DEFINITION LOAD.
LO_SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ).

Technically email is a binary document, we need to add document to the email object.Document contains parameters like email type (HTM, TXT etc), email subject, email body.

EMAIL BODY: We can send email body of 255 characters per line, email body might be more than 255 characters, so we need to pass it in the form of lines in an internal table (see example below).

Limitation: While using CL_BCS class to send email, we can set maximum 50 character subject only.
* Message body and subject
DATA: LO_DOCUMENT TYPE REF TO CL_DOCUMENT_BCS VALUE IS INITIAL. "document object
DATA : I_TEXT TYPE BCSY_TEXT. "Table for body
DATA : W_TEXT LIKE LINE OF I_TEXT. "work area for message body
*Set body
W_TEXT-LINE = 'This is the first tutorial of sending email using SAP ABAP programming by SAPNuts.com'.
APPEND W_TEXT TO I_TEXT.
CLEAR W_TEXT.
W_TEXT-LINE = 'SAPNuts.com is the best SAP ABAP learning portal'.
APPEND W_TEXT TO I_TEXT.
CLEAR W_TEXT.
*Create Email document
LO_DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT( "create document
I_TYPE = 'TXT' "Type of document HTM, TXT etc
I_TEXT =  I_TEXT "email body internal table
I_SUBJECT = P_SUB ). "email subject here p_sub input parameter
Pass the email document with subject, body and type to send request.
* Pass the document to send request
  LO_SEND_REQUEST->SET_DOCUMENT( LO_DOCUMENT ).

 
Step3:Set Sender and Recipient to send request Important Top^

For every email, there is a sender and reciever (recipient), set sender and recipient for send request.

TRY...ENDTRY is used for exception handleing in Object Oriented programming.
*Set Sender
DATA: LO_SENDER TYPE REF TO IF_SENDER_BCS VALUE IS INITIAL.
TRY.
  LO_SENDER = CL_SAPUSER_BCS=>CREATE( SY-UNAME ). "sender is the logged in user
* Set sender to send request
  LO_SEND_REQUEST->SET_SENDER(
  EXPORTING
  I_SENDER = LO_SENDER ).
*    CATCH CX_ADDRESS_BCS.
****Catch exception here
ENDTRY.
Set recipient for the send request
**Set recipient
DATA: LO_RECIPIENT TYPE REF TO IF_RECIPIENT_BCS VALUE IS INITIAL.
LO_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( P_EMAIL ). "Here Recipient is email input p_email
TRY.
  LO_SEND_REQUEST->ADD_RECIPIENT(
      EXPORTING
      I_RECIPIENT = LO_RECIPIENT
      I_EXPRESS = 'X' ).
*  CATCH CX_SEND_REQ_BCS INTO BCS_EXCEPTION .
**Catch exception here
ENDTRY.

Step4:Set send email for send request Important Top^

In some servers network management team (BASIS) set mail sending frequency to reduce server load in SMTP(Simple Mail Transfer Protocol) configuration, in such cases the mails will be sent based on server load (may be some time later depends on server load)...In such cases we can set send immediately for the send request.

*Set immediate sending
TRY.
  CALL METHOD LO_SEND_REQUEST->SET_SEND_IMMEDIATELY
    EXPORTING
      I_SEND_IMMEDIATELY = 'X'.
*    CATCH CX_SEND_REQ_BCS INTO BCS_EXCEPTION .
**Catch exception here
ENDTRY.
Finally send email using send request.
TRY.
** Send email
  LO_SEND_REQUEST->SEND(
  EXPORTING
  I_WITH_ERROR_SCREEN = 'X' ).
  COMMIT WORK.
  IF SY-SUBRC = 0.
    WRITE :/ 'Mail sent successfully'.
  ENDIF.
*    CATCH CX_SEND_REQ_BCS INTO BCS_EXCEPTION .
*catch exception here
ENDTRY.

Step5:Code to send email in SAP ABAP programming Important Top^

The final code for sending email in SAP ABAP using CL_BCS class is below.

Send email in SAP ABAP

REPORT ZSAPN_SEND_EMAIL.
*Prepare Mail Object
DATA:  LO_SEND_REQUEST TYPE REF TO CL_BCS VALUE IS INITIAL.
CLASS CL_BCS DEFINITION LOAD.
DATA: LO_DOCUMENT TYPE REF TO CL_DOCUMENT_BCS VALUE IS INITIAL. "document object
DATA : I_TEXT TYPE BCSY_TEXT. "Table for body
DATA : W_TEXT LIKE LINE OF I_TEXT. "work area for message body
DATA: LO_SENDER TYPE REF TO IF_SENDER_BCS VALUE IS INITIAL. "sender
DATA: LO_RECIPIENT TYPE REF TO IF_RECIPIENT_BCS VALUE IS INITIAL. "recipient
**Selection screen
PARAMETERS : P_EMAIL TYPE ADR6-SMTP_ADDR. "Emai input
PARAMETERS: P_SUB TYPE CHAR50. "email subject
PARAMETERS : P_SEND AS CHECKBOX. "send immediatly flag

START-OF-SELECTION.
  LO_SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ).
* Message body and subject
*Set body
  W_TEXT-LINE = 'This is the first tutorial of sending email using SAP ABAP programming by SAPNuts.com'.
  APPEND W_TEXT TO I_TEXT.
  CLEAR W_TEXT.
  W_TEXT-LINE = 'SAPNuts.com is the best SAP ABAP learning portal'.
  APPEND W_TEXT TO I_TEXT.
  CLEAR W_TEXT.
  LO_DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT( "create document
  I_TYPE = 'TXT' "Type of document HTM, TXT etc
  I_TEXT =  I_TEXT "email body internal table
  I_SUBJECT = P_SUB ). "email subject here p_sub input parameter
* Pass the document to send request
  LO_SEND_REQUEST->SET_DOCUMENT( LO_DOCUMENT ).


  TRY.
    LO_SENDER = CL_SAPUSER_BCS=>CREATE( SY-UNAME ). "sender is the logged in user
* Set sender to send request
    LO_SEND_REQUEST->SET_SENDER(
    EXPORTING
    I_SENDER = LO_SENDER ).
*    CATCH CX_ADDRESS_BCS.
****Catch exception here
  ENDTRY.
**Set recipient
  LO_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( P_EMAIL ). "Here Recipient is email input p_email
  TRY.
    LO_SEND_REQUEST->ADD_RECIPIENT(
        EXPORTING
        I_RECIPIENT = LO_RECIPIENT
        I_EXPRESS = 'X' ).
*  CATCH CX_SEND_REQ_BCS INTO BCS_EXCEPTION .
**Catch exception here
  ENDTRY.

  TRY.
    CALL METHOD LO_SEND_REQUEST->SET_SEND_IMMEDIATELY
      EXPORTING
        I_SEND_IMMEDIATELY = P_SEND. "here selection screen input p_send
*    CATCH CX_SEND_REQ_BCS INTO BCS_EXCEPTION .
**Catch exception here
  ENDTRY.
  TRY.
** Send email
    LO_SEND_REQUEST->SEND(
    EXPORTING
    I_WITH_ERROR_SCREEN = 'X' ).
    COMMIT WORK.
    IF SY-SUBRC = 0. "mail sent successfully
      WRITE :/ 'Mail sent successfully'.
    ENDIF.
*    CATCH CX_SEND_REQ_BCS INTO BCS_EXCEPTION .
*catch exception here
 ENDTRY.

Tutorial Comments
Total Comments:  Add your Comment
14 May 2014

Thank you very very very much...it is really an useful information to understand the sending email in root level, for oops learners.....Thanks you once again and please keep share the information on many like same...wishing you all the best......

05 Nov 2015

Good Sharing ! Everybody will write the program using OOPS Concept Good Sharing for every

08 Apr 2016

what is used of create_persistent method ???

08 May 2016

Good Sharing ! Everybody will write the program using OOPS Concept Good Sharing for every

30 May 2016

Main Pagli hu..................................................................

27 Jul 2016

Excellent tutorial!!!! I liked.

04 Aug 2016

Exceptionally written....Too Good

23 Aug 2016

Excellent Tutorial......................

07 Sep 2016

Hello, I have written the same code. But i get blank mail body infact it is attached as pdf (un-formtted text) please refer below code: FUNCTION ZMAIL_PR_CREATED . *"---------------------------------------------------------------------- *"*"Local Interface: *" IMPORTING *" REFERENCE(LV_SEND_USER_ID) TYPE FITP_USER-UNAME OPTIONAL *" REFERENCE(LV_REC_MAIL_ID) TYPE AD_SMTPADR OPTIONAL *" REFERENCE(LV_SEND_MAIL_ID) TYPE AD_SMTPADR OPTIONAL *" REFERENCE(LV_BANFN) TYPE BANFN *"---------------------------------------------------------------------- *FUNCTION-pool ZMAIL_PO_CREATED. *Prepare Mail Object DATA: LO_SEND_REQUEST TYPE REF TO CL_BCS VALUE IS INITIAL. CLASS CL_BCS DEFINITION LOAD. LO_SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ). * Message body and subject DATA: LO_DOCUMENT TYPE REF TO CL_DOCUMENT_BCS VALUE IS INITIAL. "document object DATA : I_TEXT TYPE BCSY_TEXT. "Table for body DATA : W_TEXT LIKE LINE OF I_TEXT. "work area for message body DATA: lx_document_bcs TYPE REF TO cx_document_bcs. DATA: lx_ADDRESS_BCS TYPE REF TO CX_ADDRESS_BCS. DATA: P_SUB TYPE CHAR50, "email subject P_EMAIL TYPE ADR6-SMTP_ADDR. "Email input DATA: wa_eban_temp TYPE eban, wa_zt16fc TYPE zt16fc. *CONCATENATE 'PR Created : 'lv_banfn ' Wating for ' wa_zt16fc-zfrgct ' Release' INTO p_sub. SELECT SINGLE * from eban into wa_eban_temp WHERE banfn = lv_banfn. SELECT SINGLE * from zt16fc INTO wa_zt16fc WHERE frggr = wa_eban_temp-frggr and frgco = wa_eban_temp-FRGSt. P_EMAIL = wa_zt16fc-ZMAIL_ID. CONCATENATE 'PR Created : 'lv_banfn ', ' wa_zt16fc-zfrgct ' Release' INTO p_sub. *Set body CONCATENATE 'Dear ' wa_zt16fc-zfrgct ',' INTO W_TEXT-LINE. *W_TEXT-LINE = 'Dear,'. APPEND W_TEXT TO I_TEXT. CLEAR W_TEXT. W_TEXT-LINE = ' '. APPEND W_TEXT TO I_TEXT. CLEAR W_TEXT. CONCATENATE 'PR' lv_banfn 'Created In System, Waiting for your release' INTO W_TEXT-LINE. APPEND W_TEXT TO I_TEXT. CLEAR W_TEXT.W_TEXT-LINE = ' '. APPEND W_TEXT TO I_TEXT. CLEAR W_TEXT. W_TEXT-LINE = 'This is the system generated mail for your notification'. APPEND W_TEXT TO I_TEXT. CLEAR W_TEXT. W_TEXT-LINE = 'Do Not Reply'. APPEND W_TEXT TO I_TEXT. CLEAR W_TEXT. *Create Email document LO_DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT( "create document I_TYPE = 'TXT' "Type of document HTM, TXT etc I_TEXT = I_TEXT "email body internal table I_SUBJECT = P_SUB ). "email subject here p_sub input parameter * Pass the document to send request LO_SEND_REQUEST->SET_DOCUMENT( LO_DOCUMENT ). * Declare internal table and work area for MARA, add logic to get data from MARA. DATA : IT_eban TYPE TABLE OF eban, WA_eban TYPE eban. DATA : IT_makt TYPE TABLE OF makt, " WA_makt TYPE makt. TYPES: BEGIN OF ty_final. include structure eban. types:maktx TYPE maktx, qty TYPE c, unit_price TYPE c, value_price TYPE c, END OF ty_final. DATA : IT_final TYPE TABLE OF ty_final, "internal table for Ekko WA_final LIKE LINE OF it_final. SELECT * from eban INTO TABLE it_eban WHERE banfn = lv_banfn. LOOP AT it_eban INTO wa_eban. wa_final-banfn = wa_eban-banfn. wa_final-matnr = wa_eban-matnr. SELECT SINGLE * from makt INTO wa_makt WHERE matnr = wa_eban-matnr. wa_final-maktx = wa_makt-maktx. wa_final-bsart = wa_eban-bsart. wa_final-ernam = wa_eban-ernam. wa_final-afnam = wa_eban-afnam. wa_final-menge = wa_eban-menge. wa_final-qty = wa_eban-menge. wa_final-meins = wa_eban-meins. wa_final-preis = wa_eban-preis. wa_final-unit_price = wa_final-preis. wa_final-rlwrt = wa_eban-rlwrt. wa_final-value_price = wa_final-rlwrt. APPEND wa_final to it_final. CLEAR: wa_final, wa_makt, wa_eban. ENDLOOP. *Declare strings, convert internal table data into string with horizantal tab (tab) and new line. DATA : LV_STRING TYPE STRING, "declare string LV_DATA_STRING TYPE STRING. "declare string CONCATENATE 'PR NO.' 'Materal Name' 'Material No' 'Dco. Type' 'Requisitioner' 'Quantity' 'UOM' 'Unit_Price' 'Value' INTO LV_STRING SEPARATED BY CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB. CONCATENATE LV_DATA_STRING LV_STRING INTO LV_DATA_STRING SEPARATED BY CL_ABAP_CHAR_UTILITIES=>NEWLINE. LOOP AT IT_final INTO WA_final. CONCATENATE WA_final-banfn WA_final-maktx WA_final-matnr WA_final-bsart WA_final-afnam WA_final-qty WA_final-meins WA_final-unit_price WA_final-value_price INTO LV_STRING SEPARATED BY CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB. * CONCATENATE 'Vendor NO.' 'Vendor Name''Document Type' 'Created BY' 'Value' INTO LV_STRING SEPARATED BY CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB. CONCATENATE LV_DATA_STRING LV_STRING INTO LV_DATA_STRING SEPARATED BY CL_ABAP_CHAR_UTILITIES=>NEWLINE. CLEAR: WA_final, LV_STRING. ENDLOOP. *Convert string data into xstring using function module HR_KR_STRING_TO_XSTRING. DATA LV_XSTRING TYPE XSTRING . **Convert string to xstring CALL FUNCTION 'HR_KR_STRING_TO_XSTRING' EXPORTING * codepage_to = '8300' UNICODE_STRING = LV_DATA_STRING * OUT_LEN = IMPORTING XSTRING_STREAM = LV_XSTRING EXCEPTIONS INVALID_CODEPAGE = 1 INVALID_STRING = 2 OTHERS = 3. IF SY-SUBRC <> 0. IF SY-SUBRC = 1 . ELSEIF SY-SUBRC = 2 . WRITE:/ 'invalid string ' . ENDIF. ENDIF. *Convert xstring data to binary data using function module SCMS_XSTRING_TO_BINARY . DATA: LIT_BINARY_CONTENT TYPE SOLIX_TAB. ***Xstring to binary CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' EXPORTING BUFFER = LV_XSTRING TABLES BINARY_TAB = LIT_BINARY_CONTENT. *Create attachment with attachment name, attachment type (ex: XLS, TXT etc) and attachment data . DATA L_ATTSUBJECT TYPE SOOD-OBJDES. **add attachment name CLEAR L_ATTSUBJECT . CONCATENATE 'PR Report' SY-DATUM INTO L_ATTSUBJECT. * Create Attachment TRY. LO_DOCUMENT->ADD_ATTACHMENT( EXPORTING I_ATTACHMENT_TYPE = 'XLS' I_ATTACHMENT_SUBJECT = L_ATTSUBJECT I_ATT_CONTENT_HEX = LIT_BINARY_CONTENT ). CATCH cx_document_bcs INTO lx_document_bcs. ENDTRY. *Set Sender and Recipient to send request *For every email, there is a sender and reciever (recipient), set sender and recipient for send request. *Set Sender DATA: LO_SENDER TYPE REF TO IF_SENDER_BCS VALUE IS INITIAL. TRY. LO_SENDER = CL_SAPUSER_BCS=>CREATE( SY-UNAME ). "sender is the logged in user * Set sender to send request LO_SEND_REQUEST->SET_SENDER( EXPORTING I_SENDER = LO_SENDER ). * CATCH CX_ADDRESS_BCS INTO lx_ADDRESS_BCS. ****Catch exception here ENDTRY. *Set recipient for the send request **Set recipient DATA: LO_RECIPIENT TYPE REF TO IF_RECIPIENT_BCS VALUE IS INITIAL. LO_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( P_EMAIL ). "Here Recipient is email input p_email TRY. LO_SEND_REQUEST->ADD_RECIPIENT( EXPORTING I_RECIPIENT = LO_RECIPIENT I_EXPRESS = 'X' ). * CATCH CX_SEND_REQ_BCS INTO BCS_EXCEPTION . **Catch exception here ENDTRY. *Set send email for send request *Set immediate sending TRY. CALL METHOD LO_SEND_REQUEST->SET_SEND_IMMEDIATELY EXPORTING I_SEND_IMMEDIATELY = 'X'. * CATCH CX_SEND_REQ_BCS INTO BCS_EXCEPTION . **Catch exception here ENDTRY. *Finally send email using send request. TRY. ** Send email LO_SEND_REQUEST->SEND( EXPORTING I_WITH_ERROR_SCREEN = 'X' ). COMMIT WORK. IF SY-SUBRC = 0. WRITE :/ 'Mail sent successfully'. ENDIF. * CATCH CX_SEND_REQ_BCS INTO BCS_EXCEPTION . *catch exception here ENDTRY. ENDFUNCTION.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 可以使用 Python 的 smtplib 模块来发送电子邮件。首先,需要准备好要发送的电子邮件的内容,包括发件人地址、收件人地址、主题和正文。然后,使用 smtplib 模块的 SMTP 类来连接到 SMTP 服务器,并使用 login() 方法登录。接着,使用 sendmail() 方法来发送电子邮件。最后,使用 quit() 方法来断开与 SMTP 服务器的连接。 例如,下面是一段示例代码,展示了如何使用 Python 发送一封简单的电子邮件: ```python import smtplib # 要发送的电子邮件内容 from_addr = 'send[email protected]' to_addr = '[email protected]' subject = 'Test Email' body = 'This is a test email sent from Python.' # 连接到 SMTP 服务器 smtp_server = smtplib.SMTP('smtp.example.com') # 登录到 SMTP 服务器 smtp_server.login('username', 'password') # 构造电子邮件 msg = f'Subject: {subject}\n\n{body}' # 发送电子邮件 smtp_server.sendmail(from_addr, to_addr, msg) # 断开与 SMTP 服务器的连接 smtp_server.quit() ``` 注意,在上面的代码中,需要替换 `send[email protected]` 和 `[email protected]` 为实际的发件人地址和收件人地址,并替换 `smtp.example.com` 为实际的 SMTP 服务器地址。此外,需要替换 `username` 和 `password` 为登录 SMTP 服务器的用 ### 回答2: 使用Python发送电子邮件,你可以使用SMTP(简单邮件传输协议)库。 首先,你需要导入smtplib库,以便与SMTP服务器进行通信。然后,创建一个SMTP对象,并登录到你的电子邮件帐户。你需要提供SMTP服务器的主机名和端口号,以及你的电子邮件地址和密码。 接下来,你可以通过调用sendmail()方法来发送邮件。你需要提供发件人,收件人和邮件内容。邮件内容可以通过构建一个MIMEText对象来实现。 以下是一个简单的示例代码,演示如何向一个收件人发送电子邮件: ```python import smtplib from email.mime.text import MIMEText def send_email(): sender = '[email protected]' receiver = '[email protected]' subject = 'Hello from Python' body = 'This is a test email.' msg = MIMEText(body) msg['Subject'] = subject msg['From'] = sender msg['To'] = receiver smtp_server = 'smtp.example.com' smtp_port = 587 username = 'your_username' password = 'your_password' server = smtplib.SMTP(smtp_server, smtp_port) server.starttls() server.login(username, password) server.sendmail(sender, receiver, msg.as_string()) server.quit() send_email() ``` 在上面的示例中,你需要将示例电子邮件地址,SMTP服务器和登录凭据替换为你自己的信息。 这只是一个简单的示例,你可以根据自己的需求进行进一步的定制,比如添加附件、使用HTML格式的邮件等。 总之,使用Python发送电子邮件是非常简单的,只需要使用Python的smtplib库和MIMEText对象即可实现。 ### 回答3: 使用Python发送电子邮件非常简便和方便。下面是一个基本的步骤。 首先,需要导入smtplib和email模块,分别用于发送邮件和构造邮件。可以使用以下代码导入这些模块: ``` import smtplib from email.mime.text import MIMEText ``` 然后,需要配置SMTP服务器的信息,包括SMTP服务器地址、端口号和认证信息。例如,如果使用Gmail作为SMTP服务器,可以使用以下代码进行配置: ``` smtp_server = 'smtp.gmail.com' smtp_port = 587 username = 'your_email@gmail.com' password = 'your_password' ``` 接下来,可以构造邮件内容。例如,可以使用MIMEText对象创建一个简单的纯文本邮件: ``` message = MIMEText('This is the email content.', 'plain') message['From'] = 'send[email protected]' message['To'] = '[email protected]' message['Subject'] = 'Email Subject' ``` 如果要发送HTML格式的邮件,可以将'MIMEText'改为'MIMEText(html_content, 'html')',其中'html_content'是包含HTML内容的字符串。 最后,使用smtplib模块发送邮件。可以使用以下代码发送邮件: ``` with smtplib.SMTP(smtp_server, smtp_port) as server: server.starttls() server.login(username, password) server.send_message(message) ``` 在这个例子中,首先使用starttls()方法启用TLS加密连接,然后使用login()方法进行身份验证,并最后使用send_message()方法发送邮件。 以上就是使用Python发送电子邮件的基本步骤。根据需要,还可以添加更多的功能,例如添加附件或发送多个收件人。参考Python文档以了解更多细节和选项。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChampaignWolf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值