Skip to Content

For those of you who wants to understand the basics of SAP Cloud Platform, I would recommend reading the overview here. One of the many features that SAP Cloud Platform offers is the runtime-containers. One of the capabilities that many would want is to enjoy full control over the virtualized hardware resource and that is where SAP Cloud Platform Virtual Machine in Neo environment contributes.

In order to provide more flexibility we introduced Virtual Machines (VM), generic containers which are fully controlled & managed by customers – here, customers can install arbitrary software components as needed to complement their cloud solutions. For more detail on SAP Cloud Platform Virtual Machine, you can refer the document here. A quick look at the components involved in building a virtual machine is as shown below:

The use case

As mentioned above, one of the use cases of having the virtual machine on SAP Cloud Platform is to set up an SMTP server in order to allow an application running on the PaaS layer to trigger a mail to the recipients based on certain conditions. This blogs talks about one such application (typically JAVA) running on SAP Cloud Platform Neo environment that calls the SMTP server that is set up on the virtual machine on SAP CP.

The architecture of such an application involves a JAVA application that consumes the service from the SMTP server setup on SAP CP Virtual Machine. The architecture would look like the one illustrated below:

Setting up an SMTP server on SAP Cloud Platform Virtual Machine

 

The blog explains how to create an instance of Virtual Machine on SAP Cloud Platform. The final part of the blog also explains the steps to access the virtual instance from local machine through the ssh tunnels created. There is also an alternate way to access virtual machine through service channels. The details and procedures can be found here.

A quick view on the list of items I have so far:

A Virtual Machine instance on SAP Cloud Platform. I have named it ‘mailer’.

 

SAP Cloud Connector setup to access the virtual machine shown above.

Putty settings to access the virtual machine:

 

The VM that is considered here has got OpenSUSE 12 SP 1. We will be using zypper to add repository and upgrade the necessary software from the repository. You can check the version using the command

cat /etc/os-release

We will use postfix (just as an example) to create the SMTP server. Ideally, no other mail server should be up and running. Check if “sendmail” service is active and running. If so, use the command “service sendmail stop” to stop the service. It is fine even if it says there is no such service.

Zypper is a command line package manager which provides functionalities like repository access, package installation, etc. We will use zypper to add the repository and install postfix. Add the repo [Link] to the zypper repository using the command

zypper addrepo -n server_mail http://download.opensuse.org/repositories/server:/mail/SLE_12_SP1/server:mail.repo

This will create a repository with the name “server_mail”. You can check the same by executing

zypper lr

Do a refresh of the repo by executing

zypper refresh

and then install/upgrade postfix. We will install the latest version of the postfix with the command

zypper install postfix-3.2.4-310.1.x86_64

or with the latest version available now.

 

Configuring SMTP server

 

Now, we need to configure postfix to accept the external/SAP Cloud Platform communications. To do so, we will work on the main.cf and master.cf files. Open the main.cf file using the vi editor. The file would be available in the location /etc/postfix. Use the command

vi /etc/postfix/master.cf

Goto line number 22 (by pressing ‘Esc’ followed by “:22”). Uncomment the lines 22 – 32 (These were the lines for the version of postfix we installed).

Under the smtpd_relay_restrictions ensure to have the parameters

permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination

These are necessary to ensure postfix trusts the communications from the set of network IP addresses you will be mentioning in the main.cf and to defer the calls from any other network.

Save the file and exit the editor (by pressing ‘Esc’ followed by “:wq”). Open the file main.cf using the vi editor (“vi /etc/postfix/main.cf”). Ensure to do the following changes/additions.

Line No Change Comments
67 mail_owner = postfix
83 myhostname = mailer Hostname is mostly the name you provided for the VM. You can confirm by entering the command “hostname
91 mydomain = sapcppm.local You can provide any domain name of your choice
106 myorigin = $myhostname Uncomment the line
121 inet_interfaces = all Uncomment the line. If you want to be specific, mention the hostname/domain
169 mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
268 mynetworks = 168.100.189.0/28, 127.0.0.0/8, 155.56.128.0/17, 10.78.134.169, 10.0.0.0/8, 10.10.1.56 This includes the IP of the VM. You can also mention the whole of local IPs as mentioned here. You can also find it from ifconfig command. This also includes the IP range of SAP Cloud Platform – Refer.
317 relayhost = $mydomain Uncomment
423 home_mailbox = Maildir/ Uncomment
559 smtpd_banner = $myhostname ESMTP Uncomment
673

inet_interfaces = all

inet_protocols = all

Uncomment/Add
706 smtpd_recipient_restrictions = permit_mynetworks,reject_unauth_destination Uncomment/Add

After the aforementioned changes are done, save the file (by pressing ‘Esc’ followed by “:wq”). The next step is to edit the hostfile, do so by entering the command “vi /etc/hosts”.

Ensure that the host file looks like the one mentioned below:

127.0.0.1       localhost localhost.localdomain localhost4 localhost4.localdomain4

# special IPv6 addresses
::1             localhost ipv6-localhost ipv6-loopback localhost.localdomain localhost6 localhost6.localdomain6

fe00::0         ipv6-localnet
ff00::0         ipv6-mcastprefix
ff02::1         ipv6-allnodes
ff02::2         ipv6-allrouters
ff02::3         ipv6-allhosts

# Found the IP with ifconfig
10.10.1.56 sapcppm.local

 

Ensure that the necessary firewall is set by executing

vi /etc/sysconfig/SuSEfirewall2.d/services/smtp

 

## Name: SMTP with Postfix

## Description: Firewall Configuration file for postfix

# space separated list of allowed TCP ports

TCP="25 465 587"

# space separated list of allowed UDP ports

UDP=""

….

Now, your postfix is ready to service the SMTP requests. Restart the postfix by executing the command

service postfix restart
or 
service postfix start

Create a user and provide a password to access the service from a third-party application:

Execute these in the VM shell.

# useradd test1

# passwd test1

 

Verification of SMTP server

 

Now that the SMTP server is set for consumption, let’s try to send a sample mail from the server directly. In the command prompt, enter the command

mail test@test.com

replace the email id with the mail id of your choice. It would prompt for the subject, enter a sample subject and press enter to provide the body of the mail. Once completed, press “.” Followed by ‘Enter’ to send the mail.

If you don’t get a mail, verify the previous steps and restart postfix. You would have got a mail from root (in my case – root root@sapcppm.local) based on the domain you have specified.

 

JAVA Application setup

 

Now that we have the SMTP server setup, let’s try to communicate with the SMTP server from a JAVA application that is deployed on SAP Cloud Platform.

For ease of code, I have pushed a sample application the git repository – link. Clone the resitory and perform the following changes:

pom.xml

 

Change the properties in the pom.xml file to point to the VM instance that you created. Replace “<<VM_FLoating_IP>>” with the floating IP of the Virtual Machine that can be found in the SAP Cloud Platform Cockpit under the VM overview.

Replace the following with the domain (that you mentioned in the SMTP server) and mail id (of your choice):

<mail.from.address>root@sappm.local</mail.from.address>

<mail.to.address><<Your_mail_ID>></YourmailID></mail.to.address>

 

Session

Navigate to the Session file and replace the floating IP. This is the file we will use to create the destination in the application.

Application build

Now, build the application using Maven (Right click on the application in Eclipse and click Run as -> Goals – clean install). You will find the war file generated under target folder which we will use to deploy the application on SAP Cloud Platform.

Navigate to SAP Cloud Platform Cockpit and deploy the application as shown in the image below:

Once the application is deployed, don’t start it yet. There are a couple more important steps to be done before the application is runnable.

Using the connectivity service

We will create the destination using the Neo SDK (setting up Neo SDK) where the SMTP details can be configured. This connectivity service is used by the application to send the mail details to the SMTP server on the VM.

We will use the put-destination command on Neo SDK (Syntax) to create the destination in the JAVA application.

neo put-destination --account <account_name>  --host <hostname> --application <application_name> --user <p/s user id> --localpath <path to the Session file>

This will create the destination as shown below:

The next step is to create security rules for the VM to allow the JAVA application to communicate to the VM through the ports. We will use the Neo SDK command for this (Syntax).  We will open up the ports 25 and 587 – You can use either of them.

 

neo create-security-rule --account <<account>> --host <<host>> --user <<user id>> --name <<VM Name>> --source-id <<JAVA app name>> --source-type JAVA --from-port 25 --to-port 25

neo create-security-rule --account <<account>> --host <<host>> --user <<user id>> --name <<VM Name>> --source-id <<JAVA app name>> --source-type JAVA --from-port 587 --to-port 587

Post the execution of the command, you can find these rules in the SAP Cloud Platform cockpit.

 

 

Your application is now ready! Navigate to the JAVA application overview and start the application. Once the application is started, you will get the URL under Application URLs. Click on the same. In the form that opens up, just enter the From address as “root@<<domainname>>” and your email address and a sample subject and mail body and click on ‘Send Mail’.

 

 

 

 

To report this post you need to login first.

Be the first to leave a comment

You must be Logged on to comment or reply to a post.

Leave a Reply