1. 程式人生 > >abap寫傳送郵件程式

abap寫傳送郵件程式

最近專案中有需求要通過ABAP開發往外網發郵件,上網查了一些資料,下面是開發過程中整理的一些資料及程式碼,希望對需要的兄弟有幫助。
ABAP發郵件需要兩大塊:一是Basis配置郵件伺服器,二是ABAP寫傳送郵件程式碼,下面分別介紹一下:
一、Step By Step配置SAP郵件伺服器,通過配置,不僅能向Sap User 傳送郵件,也能傳送外部郵件,具體步驟如下:
1、RZ10配置
Step1:執行事務碼RZ10,顯示如圖1所示介面,分別進行圖1中1、2、3步操作。

                                                     圖1

Step2:進入修改介面,如下圖2所示,點圖2中紅色箭頭所指示的“引數”按鈕。

                                                                       圖2

Step3:新建引數icm/server_port_1 賦值為“PROT=SMTP,PORT=25”。 預設情況下已經有一個引數檔案icm/server_port_0 = PORT=HTTP,PORT=XXXX(每個服務可能不一樣),那麼這裡的<*>就是要根據你的引數檔案的具體情況,如果已經有了_0,這裡你就需要設成_1,以此類推,PORT一般設定成25。 這裡還有一個選項是TIMEOUT可以設定等待郵件伺服器回覆時間的最大值。 這裡我的引數檔案時:icm/server_port_1 = PROT=SMTP,PORT=25  如下圖3中所示

                                                                             圖3

Step4:返回到圖2介面,並點選圖2中紅色箭頭所指示的“引數”按鈕。新建引數is/SMTP/virt_host_0 賦值為“ *:25;”。is/SMTP/virt_host_<*> = <host>:<port>,<port>,...;  定義虛擬郵件主機,主要用來接收郵件的,_<*>的設定同上。要注意,引數值最後是有一個分號的。這裡我的引數檔案是is/SMTP/virt_host_0 = *:25;完成後儲存,啟用。 配置完需要重啟服務,引數才能生效。如下圖4所示:

                                                                 圖4

2、SU01配置。
Step1: 對於每一個client,需要建立一個使用者作為郵件的接收者,建立了使用者liuxy,使用者型別設定為service,並給該使用者賦profile S_A.SCON。如下圖5,圖6所示

                                                                                圖5

                                                                                圖6

Step2:配置Email資訊,如下圖7所示:

                                                                               圖7

3、SICF配置。
執行事務碼SICF進入如下圖8介面,點圖中執行按鈕,進入圖9介面。

                                                                    圖8

Step2:雙擊圖9中紅色框內的SAPconnect,進入圖10介面

                                                                                          圖9

Step3:下圖中Host data 主機資料,對於 Profile Parameter Number(檔案引數編號),輸入 "is/STMP/virt_host_<*>"中的<*>的值,一般可能是0,如果不存在的話,下面會有提示的。

                                                                  圖10

Step4:登陸資料(logon data),客戶端:當前客戶端編號;使用者:前面su01中建立的service使用者;語言:中文,如下圖11所示。

                                                                          圖11

Step5:處理器清單(Handler List),輸入CL_SMTP_EXT_SAPCONNECT,如下圖12所示

                                                                        圖12

Step6:完成以上配置後,返回到圖9介面,儲存啟用。

4、SCOT配置。

                                                                         圖13

Step1: 選單欄 設定----Default domain,此處我寫的是公司內網的郵件伺服器。  這個郵件的預設域名比如sap.com,那麼如果在你傳送郵件的時候收件人地址如果只寫test的話,系統會自動加上@sap.com,如果收件人地址是全的話,這個domain不維護關係也不大.
Step2: 維護SMTP節點:檢視----節點Nodes—開啟節點或者雙擊上上圖SMTP後彈出對話方塊,維護 以下資訊勾上 "Node in user".在MAIL HOST和MAIL PORT下面,指定傳送郵件伺服器的地址,比如如果是163的話,就應該是smtp.163.com。這裡MAIL HOST填寫我公司郵件伺服器地址,MAIL PORT填寫25選中Internet的Set,彈出新對話方塊,指定接收地址的地址區域,一般用*表示所有郵件都用SMTP來發送。其他資訊用預設。
這裡SAPconnect的資訊可以有兩種方式顯示的,如果雙擊SMTP節點彈出的是JOB的資訊的話,選擇選單中SYSTEM STATUS,切換到為另一種顯示方式即可。

Step3: Send job,選擇選單中的檢視View-->職務Jobs,可以檢查是否已經有Jobs被排程了 選擇Jobs->Create,並指定Job名稱,點執行按鈕,選擇SAP&CONNECTALL變式,並選擇Schedule Job。選擇 Schedule periodiacally定期計劃,指定時間間隔,比如10分鐘,選擇建立。到這裡,基本配置成功了。
Step4: 可以在SBWP中,選擇傳送郵件,來測試配置是否成功,輸入收件人的郵件地址,點擊發送。如果配置成功的話,收一下郵件,應該收到了來自登陸SAP GUI的賬號中配置的郵件地址的郵件了。

二、ABAP程式碼,以下是從網上copy程式碼
DATA GV_METHOD1      LIKE SY-UCOMM.
DATA GS_USER         LIKE SOUDNAMEI1.
DATA GS_USER_DATA    LIKE SOUDATAI1.
DATA GV_OWNER        LIKE SOUD-USRNAM.
DATA GT_RECEIPIENTS  LIKE SOOS1 OCCURS 0 WITH HEADER LINE.
DATA GS_DOCUMENT     LIKE SOOD4 .
DATA GS_HEADER2      LIKE SOOD2.
DATA GS_FOLMAM       LIKE SOFM2.
DATA GT_OBJCNT       LIKE SOLI OCCURS 0 WITH HEADER LINE.
DATA GT_OBJHEAD      LIKE SOLI OCCURS 0 WITH HEADER LINE.
DATA GT_OBJPARA      LIKE SELC OCCURS 0 WITH HEADER LINE.
DATA GT_OBJPARB      LIKE SOOP1 OCCURS 0 WITH HEADER LINE.
DATA GT_ATTACHMENTS  LIKE SOOD5 OCCURS 0 WITH HEADER LINE.
DATA GT_REFERENCES   LIKE SOXRL OCCURS 0 WITH HEADER LINE.
DATA GS_RECIVER      LIKE SOOS6 .
DATA GV_AUTHORITY    LIKE SOFA-USRACC.
DATA GS_REF_DOCUMENT LIKE SOOD4.
DATA GS_NEW_PARENT   LIKE SOODK.
DATA: BEGIN OF GT_FILES OCCURS 10 ,
        TEXT(4096) TYPE C,
      END OF GT_FILES.

DATA : GV_FOLD_NUMBER(12) TYPE C,
       GV_FOLD_YR(2)      TYPE C,
       GV_FOLD_TYPE(3)    TYPE C.

DATA: GS_FOLDER_ID LIKE SOODK,
       GS_ORDER_ID LIKE SOODK.

DATA: GV_MAIL_TITLE(50).

DATA: GT_RECEIVERS LIKE SOOS1 OCCURS 0 WITH HEADER LINE.


INITIALIZATION.


START-OF-SELECTION.

  GV_MAIL_TITLE = '這是郵件標題'.


** 發件人資訊 edit
  PERFORM SO_USER_READ.

**郵件資訊、屬性定義
  PERFORM DOCUMENT_REPOSITORY.

**附件生成
  PERFORM CREAT_ATTACHMENTS.

**send mail
  PERFORM SEND.

*&---------------------------------------------------------------------*
*&      Form  SO_USER_READ
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SO_USER_READ .

  GS_USER-SAPNAME = SY-UNAME.
  CALL FUNCTION 'SO_USER_READ_API1'
    EXPORTING
      USER            = GS_USER
    IMPORTING
      USER_DATA       = GS_USER_DATA
    EXCEPTIONS
      USER_NOT_EXIST  = 1
      PARAMETER_ERROR = 2
      X_ERROR         = 3
      OTHERS          = 4.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  GV_FOLD_TYPE   = GS_USER_DATA-OUTBOXFOL+0(3).
  GV_FOLD_YR     = GS_USER_DATA-OUTBOXFOL+3(2).
  GV_FOLD_NUMBER = GS_USER_DATA-OUTBOXFOL+5(12).


  CLEAR: GT_FILES[], GT_FILES.
  REFRESH : GT_OBJCNT,
  GT_OBJHEAD,
  GT_OBJPARA,
  GT_OBJPARB,
  GT_RECEIPIENTS,
  GT_ATTACHMENTS,
  GT_REFERENCES,
  GT_FILES.
  CLEAR  :    GS_DOCUMENT,
  GS_HEADER2,
  GT_OBJCNT,
  GT_OBJHEAD,
  GT_OBJPARA,
  GT_OBJPARB,
  GT_RECEIPIENTS,
  GT_ATTACHMENTS,
  GT_REFERENCES,
  GT_FILES.


ENDFORM.                    " SO_USER_READ
*&---------------------------------------------------------------------*
*&      Form  DOCUMENT_REPOSITORY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DOCUMENT_REPOSITORY .
  GV_METHOD1 = 'SAVE'.
  GS_DOCUMENT-FOLTP   = GV_FOLD_TYPE.
  GS_DOCUMENT-FOLYR   = GV_FOLD_YR.
  GS_DOCUMENT-FOLNO   = GV_FOLD_NUMBER.
  GS_DOCUMENT-OBJTP   = GS_USER_DATA-OBJECT_TYP.
*g_document-OBJYR   = '27'.
*g_document-OBJNO   = '000000002365'.
*g_document-OBJNAM = 'MESSAGE'.
  GS_DOCUMENT-OBJDES   = 'mail of sap by program'.
  GS_DOCUMENT-FOLRG   = 'O'.
*g_document-okcode   = 'CHNG'.
  GS_DOCUMENT-OBJLEN = '0'.
*  g_document-file_ext = 'TXT'.
  GS_HEADER2-OBJDES = GV_MAIL_TITLE.
*  g_header-file_ext = 'TXT'.

  CALL FUNCTION 'SO_DOCUMENT_REPOSITORY_MANAGER'
    EXPORTING
      METHOD       = GV_METHOD1
      OFFICE_USER  = SY-UNAME
      REF_DOCUMENT = GS_REF_DOCUMENT
      NEW_PARENT   = GS_NEW_PARENT
    IMPORTING
      AUTHORITY    = GV_AUTHORITY
    TABLES
      OBJCONT      = GT_OBJCNT
      OBJHEAD      = GT_OBJHEAD
      OBJPARA      = GT_OBJPARA
      OBJPARB      = GT_OBJPARB
      RECIPIENTS   = GT_RECEIPIENTS
      ATTACHMENTS  = GT_ATTACHMENTS
      REFERENCES   = GT_REFERENCES
      FILES        = GT_FILES
    CHANGING
      DOCUMENT     = GS_DOCUMENT
      HEADER_DATA  = GS_HEADER2.

ENDFORM.                    " DOCUMENT_REPOSITORY
*&---------------------------------------------------------------------*
*&      Form  CREAT_ATTACHMENTS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CREAT_ATTACHMENTS .

* File from the pc to send..
  GV_METHOD1 = 'ATTCREATEFROMPC'.

*  GV_SAVE_PATHT = P_FILE.
  GT_FILES-TEXT = 'C:\20150318101349.XLS'.

  APPEND GT_FILES.

  CALL FUNCTION 'SO_DOCUMENT_REPOSITORY_MANAGER'
    EXPORTING
      METHOD       = GV_METHOD1
      OFFICE_USER  = GV_OWNER
      REF_DOCUMENT = GS_REF_DOCUMENT
      NEW_PARENT   = GS_NEW_PARENT
    IMPORTING
      AUTHORITY    = GV_AUTHORITY
    TABLES
      OBJCONT      = GT_OBJCNT
      OBJHEAD      = GT_OBJHEAD
      OBJPARA      = GT_OBJPARA
      OBJPARB      = GT_OBJPARB
      RECIPIENTS   = GT_RECEIPIENTS
      ATTACHMENTS  = GT_ATTACHMENTS
      REFERENCES   = GT_REFERENCES
      FILES        = GT_FILES
    CHANGING
      DOCUMENT     = GS_DOCUMENT
      HEADER_DATA  = GS_HEADER2.

ENDFORM.                    " CREAT_ATTACHMENTS
*&---------------------------------------------------------------------*
*&      Form  SEND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SEND .
  CLEAR: GS_FOLDER_ID,GS_ORDER_ID.
  GS_FOLDER_ID-OBJTP = GS_DOCUMENT-FOLTP .
  GS_FOLDER_ID-OBJYR = GS_DOCUMENT-FOLYR.
  GS_FOLDER_ID-OBJNO = GS_DOCUMENT-FOLNO.

  GS_ORDER_ID-OBJTP = GS_DOCUMENT-OBJTP.
  GS_ORDER_ID-OBJYR = GS_DOCUMENT-OBJYR.
  GS_ORDER_ID-OBJNO = GS_DOCUMENT-OBJNO.


*收件人資訊可以新增多個收件人-----------------------------------
  REFRESH GT_RECEIVERS.
  GT_RECEIVERS-RECESC = 'U'.
  GT_RECEIVERS-SNDEX  = 'X'.
  GT_RECEIVERS-RECEXTNAM = '[email protected]'.
  APPEND GT_RECEIVERS.


  CALL FUNCTION 'SO_OBJECT_SEND'
    EXPORTING
      FOLDER_ID                  = GS_FOLDER_ID
      OBJECT_ID                  = GS_ORDER_ID
    TABLES
      OBJCONT                    = GT_OBJCNT
      OBJHEAD                    = GT_OBJHEAD
      OBJPARA                    = GT_OBJPARA
      OBJPARB                    = GT_OBJPARB
      RECEIVERS                  = GT_RECEIVERS
      PACKING_LIST               = GT_ATTACHMENTS
    EXCEPTIONS
      ACTIVE_USER_NOT_EXIST      = 1
      COMMUNICATION_FAILURE      = 2
      COMPONENT_NOT_AVAILABLE    = 3
      FOLDER_NOT_EXIST           = 4
      FOLDER_NO_AUTHORIZATION    = 5
      FORWARDER_NOT_EXIST        = 6
      NOTE_NOT_EXIST             = 7
      OBJECT_NOT_EXIST           = 8
      OBJECT_NOT_SENT            = 9
      OBJECT_NO_AUTHORIZATION    = 10
      OBJECT_TYPE_NOT_EXIST      = 11
      OPERATION_NO_AUTHORIZATION = 12
      OWNER_NOT_EXIST            = 13
      PARAMETER_ERROR            = 14
      SUBSTITUTE_NOT_ACTIVE      = 15
      SUBSTITUTE_NOT_DEFINED     = 16
      SYSTEM_FAILURE             = 17
      TOO_MUCH_RECEIVERS         = 18
      USER_NOT_EXIST             = 19
      X_ERROR                    = 20
      OTHERS                     = 21.

  COMMIT WORK.

******直接傳送郵件的程式碼********
  SUBMIT RSCONN01 WITH MODE ='INT'
  WITH OUTPUT = 'X'
  AND RETURN.
ENDFORM.                    " SEND

相關推薦

abap傳送郵件程式

最近專案中有需求要通過ABAP開發往外網發郵件,上網查了一些資料,下面是開發過程中整理的一些資料及程式碼,希望對需要的兄弟有幫助。 ABAP發郵件需要兩大塊:一是Basis配置郵件伺服器,二是ABAP寫傳送郵件程式碼,下面分別介紹一下: 一、Step By Step配置SA

Linux使用mail功能自動傳送郵件程式以及經常遇到的問題

在實現Linux中mail功能自動傳送郵件時,需要傳送中文內容,以及中文主題的郵件。 整個實現過程中遇到了三大問題,如下: 1、如何傳送html格式的郵件內容? 2、如何傳送中文內容的郵件? 3、如何傳送中文標題的郵件?(在解決這個問題時話費不少時間) 4、傳送的郵件內容以

關於伺服器上傳送郵件程式傳送失敗的解決方案

麥咖啡是一款不錯的防毒軟體,但是,剛安裝後,按照預設設定,在使用的過程中,會出現一些問題,如Foxmail傳送不了郵件了。很多時候,Foxmail發不了郵件,會對Foxmail軟體本身及網路找很多原因,結果一無所獲。那麼,根據實踐,得出如下結論:McAfee對於傳送郵件有一定的控制,主要是針對郵件病毒私自在主

【JavaMail開發總結】配置檔案形式--傳送郵件程式

        在上一篇中簡單的實現了一個傳送郵件功能的程式,今天用配置檔案的方式來實現,大致思路一致,示例程式碼如下: package com.javamail.test.demo; import java.io.IOException; import java.io.I

利用sendgrid的web api一個傳送郵件的指令碼

在開始使用API之前,您需要執行以下操作: 1.建立SendGrid 帳戶。 2.建立API金鑰。 # -*- coding: utf-8 -*- """ @author:七月 @file: 郵件傳送測試.py @time: 2018/10/10 @email: ""

Linux指令碼編寫程式監控系統資訊並設定報警自動傳送郵件

yum -y install mailx yum -y install sendmail #獲取cpu使用率 cpuUsage=`top -n 1 | awk -F '[ %]+' 'NR==3 {print $3}'` #獲取磁碟使用率 data_nam

JavaMail 傳送郵件程式

JavaMail01:  package com.yuming.test; import java.util.Properties; import javax.mail.Address; import javax.mail.Message; import javax.mail

VC++ 傳送郵件(使用郵件進行程式異常報告)

由於最近資料解析軟體接入的裝置很多,程式一旦發生異常如果沒有及時恢復,可能會造成資料丟失,比如軟體崩潰,資料庫卡死無法寫入資料,等等因素,會造成軟體工作不正常,因此增加了一個郵件提醒功能(郵件提醒最簡單),某些郵箱綁定了手機或微信,可以同步實時進行提醒,比如我用的139郵箱

Python自動化學習筆記(八)——介面開發、傳送網路請求、傳送郵件日誌

1.介面開發 1.1引數為json格式: flask.request.is_json  #判斷引數是否是json格式 flask.request.json.get('key') #獲取引數 1.2引數為form-data格式 flask.request.data.get('key') #獲取引數

ABAP 傳送郵件的兩種方式

REPORT ZDDTEST005. DATA: WA_ZBCFILE TYPE ZBCFILE. DATA: IT_ZBCFILE LIKE TABLE OF WA_ZBCFILE. DATA: BEGIN OF IT_MAILCONTENT OCCURS 0,   PLANT LIKE ZBCFILE-

javamail程式碼例子-java郵件傳送-另一種傳送郵件的方法

package com.cs.mail; import java.io.FileInputStream; import java.io.InputStream; import java.util.Properties; import javax.mail.Authen

【Java郵件開發】5.編寫一個JavaMail傳送郵件程式

之前我們對JavaMail的API進行了簡單的介紹,並下載了相應的jar包。 這次,我們要著手使用JavaMail開發一個可以傳送郵件的程式。 1.建立工程 首先我們在Eclipse中新建一個名為JavaMailTest的工程: 然後我們新建一個lib資料夾,將mail

Win10系統設備將能手電子郵件

客戶 目前 開發 合作夥伴 功能開發 win10 英特爾 用戶 今天 Win10系統的功能是越來越多樣化了,在未來的不久,微軟很可能就會給“寫作電子郵件”帶來新的含義。近期,微軟方面曝光了Windows 10 Mail的新功能——手寫電子郵件。即如果你的Win10系統設備支

javax.mail 傳送郵件(工具類)

前言:注意自己郵箱賬號的授權碼 傳送不成功,要設定授權碼(勿掉坑裡) 1.座標 <dependency> <groupId>javax.mail</groupId> <artifactId&

無後臺網站傳送郵件方法(formspree)

<!doctype html> <html> <head> <meta charset="utf-8"> <title>無後臺網站傳送郵件方法(formspree)開通黃金會員才能使用AJAX提交,否則只能使用form提交</titl

代做CP264留學生作業、代C/C++程式語言作業、代做Qutaiba Albluwi作業、代C/C++實驗作業

代做CP264留學生作業、代寫C/C++程式語言作業、代做Qutaiba Albluwi作業、代寫C/C++實驗作業CP264 Fall 2018 A4: FilesQutaiba Albluwi 2018A4: C FilesDue Date: Monday, October 15th, 2018 at 1

Linux系統使用mailx命令傳送郵件

一、環境核實以及準備。     在centos7系統中預設有安裝mailx命令進行系統郵件的傳送。如果沒有相關的命令可以自行通過yum安裝     #yum install mailx -y    使用#ss  &nbs

telnet通過smtp傳送郵件

////////////////////////////////////CMD指令////////////////////////////////////////////// cmd telnet smtp.163.com 25   or &nb

註冊成功傳送郵件

前提:確認匯入了jar包:mail.jar           *注:網易郵箱給網易郵箱發的較快。 MailUtils.java package com.pb.utils; import java.util.Properties; i

iOS 呼叫系統傳送郵件

第一步 匯入messageUI.framework框架 第二步 匯入標頭檔案 #import <MessageUI/MessageUI.h> 第三步 @property (nonatomic,strong)  MFMailComposeViewCon