SAP PI Mail attachment to File
SAP PI Mail attachment to File Overview:
- Business scenario, where it is required to extract mail attachments and store it to some SAP directory.
- Here, one common mail-id is been used by a group of users to send mail-attachments from their respective ends.
- There may be two cases:
- One attachment per unread Mail
- Multiple attachment per unread Mail
SAP PI Scenario details:
- One SAP-PI’s “Mail to File Inbound Asynchronous” interface will be created to achieve above requirement.
- Using Mail Sender Adapter, interface will read all mail with their attachments.
- Using File Receiver Adapter, interface will download attachments to the directory.
- Here only Integration Directory’s configurational objects are required.
- As no message transformation is in scope, so Integration Repository objects are not required.
Pre-requisites:
- SAP-PI should have SMTP mail server accessibility
- SAP-PI should have access to SAP ECC application server’s directory
Steps to develop Interface in SAP-PI:
In SAP-PI’s Integration Directory, we need to follow below steps to develop “Configuration Scenario” of “Mail to File Inbound Asynchronous” interface:
Note: Object naming conventions is for example purpose, it can be as per client’s conventions
[I]. Business Components: Create two business components, one for sender and other for receiver
- Sender Business Components
- This will work on behalf on sender-side while reading Mails
- Name it as SENDER_BS_COMP
- Receiver Business Components
- This will work on behalf on receiver-side while storing attachments to directory Mails
- Name it as RECEIVER_BS_COMP
[II]. Communication Channels:
Channel config for “Case-1: One attachment per unread Mail“:
Here, with help of below config, one attachment can be easily stored to folder.
- Sender Mail Adapter Communication Channel
Here, we use ‘Mail Adapter’ to read mails from mail server and configure below details in channel “SENDER_MAIL_CHNL”:
-
- We use ‘Transport Protocol’ IMAP4 (Internet Message Access Protocol) to retrieve e-mails from a folder of an e-mail server.
- It reads mail from INBOX folder and post read, mark its status to ‘read’.
- Using ‘Message Protocol’ XIPAYLOAD, The content of the e-mail is put in the payload of the XI/PI message.
-
- Enable ‘Keep Attachments’ functionality while reading mails.
- Enable ‘Set Adapter-Specific Message Attributes’ functionality while reading mails, this is required to get header details of message. From header details we extract attachment names.
- As we need to extract all attachments of one mail, this can be achieved with help of below Module Beans:
- Module Bean ‘PayloadSwapBean’
- With help of this bean, we swap mai payload with 1st attachment
- And with help of File-Receiver channel we will download it to folder
- Module Bean ‘MultipartHeaderBean’
- With help of this bean, we adds the following values in dynamic configuration:
- “Attributes of other payloads that are appended to the XI message as an additional attachment”
- Module Bean ‘DynamicConfigurationBean’
- We use this bean in File-Receiver channel.
- This will help to download rest attachment (other than 1st attachment)
- Module Bean ‘PayloadSwapBean’
- Receiver File Adapter Communication Channel
Here, we use ‘File Adapter’ to download attachment to folder and configure below details in channel “RECEIVER_FILE_CHNL”:
-
- 1st attachment is already ready to get downloaded, which is swapped with main-payload
- Using ‘DynamicConfigurationBean’, get 1st attachment’s original name
- Please note: Here, with this config we can not store multiple attachments from one mail to folder
- Here ‘File Name Scheme’ is referring to variable which is defined in ‘Variable Substitution’
-
- Define a variable ‘fname’ using Variable Substitution, which stores message interface name.
-
- Use Module Bean ‘DynamicConfigurationBean’, to get 1st attachment’s original name using logic “Mail Part[1].Content-Description” and set it to message interface name
Channel config for “Case-2: Multiple attachment per unread Mail“:
Here, we use a custom java adapter module at File-Receiver-Channel side.
- For this case, we create a custom java adapter module, which will have below functionalities:
- Read all attachments with their original names
- and store them to sap directory
- This module will require one user input as ‘SapDirPath’ which is sap directory path location, where attachments will be saved
- This module will be used as Module parameters in ‘Receiver File Adapter communication Channel’
- To create this custom java adapter module, please follow link as :
- SAP PI custom adapter module – store multiple attachments
-
Sender/Receiver channel configurations are as below:
- Sender Mail Adapter Communication Channel Config
- Receiver File Adapter Communication Channel Config
- Here, using File Receiver, one Temp file (Test.dat) will be generated in directory, which will keep on over-writing every time. This file is of no business use, it is used only to complete channel config.
- Now one custom adapter module will be used, which will have below functionalities:
- Read all incoming attachments from inbound message
- Store it to folder path with original attachment names
- This module requires one input which is sap directory path location ‘SapDirPath’
- Below Module configurations required in File-Receiver-Channel for custom adapter module access, that require input as FolderPath
- And below is the test screen which depicts how multiple attachments from one unread mail gets extracted and store to sap directory
- Incoming Mail:
- Below is PI’s SXMB_MONI log, in which Mail adapter has forwarded all attachments to receiver channel side
- Below is log of File-Receiver-Channel, in which Custom adapter module’s log can be seen
- and at last, screen of sap directory where files are been stored by custom module
[III]. Receiver Determination
- A receiver determinationis required to specify the receiver or receivers of the message, as well as conditions for the forwarding of the message to the receiver or receivers
- Here we create it with below parameters:
Sender | ||
Communication Component | SENDER_BS_COMP | |
Interface | INT_MailToFile | |
Namespace | NM_MailToFile | |
Receiver | ||
Communication Component | * | |
Configured Receiver | RECEIVER_BS_COMP |
[IV]. Interface Determination
- An interface determination is required to specify the inbound interface of a specified receiver that a message is to be sent to. We can also define mappings here, if required.
- Here we create it with below parameters:
Sender | ||
Communication Component | SENDER_BS_COMP | |
Interface | INT_MailToFile | |
Namespace | NM_MailToFile | |
Receiver | ||
Communication Component | RECEIVER_BS_COMP | |
Receiver Interfaces | ||
Name | INT_MailToFile | |
Namespace | NM_MailToFile |
[V]. Sender Agreement
- A Sender Agreement is required to configure the inbound processingof a message.
- Here we create it with below parameters details:
Sender | ||
Communication Component | SENDER_BS_COMP | |
Interface | INT_MailToFile | |
Namespace | NM_MailToFile | |
Receiver | ||
Communication Component | ||
Sender Communication Channel | SENDER_MAIL_CHNL |
[VI]. Receiver Agreement
- A Receiver Agreement is required to configure the outbound processingof a message.
- Here we create it with below parameters details:
Sender | ||
Communication Component | SENDER_BS_COMP | |
Interface | INT_MailToFile | |
Namespace | NM_MailToFile | |
Receiver | ||
Communication Component | ||
Receiver Communication Channel | RECEIVER_FILE_CHNL |
New NetWeaver Information at SAP.com
Very Helpfull