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