Isode Messaging APIs
Summary : This page describes how to use the Isode Java X.400 API to retrieve and submit messages using P7 into or out of a Message Store, or P3 directly into or out of an MTA.X.400 Java API - Example Application
- Application Features
- Messaging Configuration
- Configuring the Application
- Configure logging
- Compiling the Application
- Submission via the Message Store (P7)
- Retrieval from the Message Store (P7)
- Running the Application
- Submission directly to the MTA (P3)
- Retrieval directly from the MTA (P3)
Application Features
The Java example does the following using the X.400 Java API
- submit X.400 messages including attachments that are
- IA5
- General_Text (8859-1, 8859-2)
- Binary
- Message Body Part
- retrieve X.400 messages
- retrieve delivery reports
- retrieve IPNs
- submit IPN after successful retrieval of message
Note that there is only one example application to do all of this. You can use the same application to submit/retrieve using either P3 or P7, by passing the appropriate argument into X400msOpen(). This example adds several more complex attachments than the C and Tcl examples. In particular it constructs an X.400 Message to add as a message body part.
Full specification of the Java API is here
Messaging Configuration
Before running the P3/P7 applications you need run Mconsole to configure and run a messaging configuration including, (if you are using P7) an Isode Message Store.
You also need to configure a P3 or P7 user using the X.400 Mailbox View in Mconsole.
Configuring the Application
The example application needs to be configured to use the values you have configured using Mconsole for the MTA and P3/P7 Users. There are 2 main string variables that need to be adjusted. These are kept within the config.java class in com/isode/x400api/test/config.java.
Values used to bind to the p7 Store
/** oraddress - makes up orname used to bind to the store */ public static final String p7_bind_oraddr = "/CN=P7User1/O=" + hostname + "/PRMD=TestPRMD/ADMD=TestADMD/C=" + country + "/"; /** dn - makes up orname used to bind to the store */ public static final String p7_bind_dn = "c=eu"; /** password */ public static final String p7_credentials = "secret"; /** presentation address of P7 Message Store */ public static final String p7_pa = "\"3001\"/Internet=" + hostname + "." + domain + "+3001"; public static final boolean use_opencheck = false; public static final String p7_ret_psw = "secret";
These are the values when binding to the P3 server
/** oraddress - makes up orname used to bind to the store */ public static final String p3oraddr = "/CN=P3User1/OU=Sales/O=" + hostname + "/PRMD=TestPRMD/ADMD=TestADMD/C=" + country + "/"; /** dn - makes up orname used to bind to the store */ public static final String p3dn = "c=eu"; /** password */ public static final String p3credentials = "p3secret"; /** presentation address of P3 MTA channel */ public static final String p3pa = "\"594\"/Internet=" + hostname + "." + domain;
Configuring Logging
Isode logging is controlled via xml files. Isode applications look for these xml files in ETCDIR (C:\Isode\etc on Windows and /etc/isode on unix.). Should an xml file called "logtailor.xml" be present, then this file will be used.
It is however possible to override this behaviour by manually specifying an xml file with a different name. In order to do this a session object must be created, and populated. Thus once a connection to the message store (or MTA) needs to occur before the following function call.
status = com.isode.x400api.X400ms.x400_ms_setstrdefault(session_obj,X400_att.X400_S_LOG_CONFIGURATION_FILE, "x400api.xml", -1);
Once called the X.400api will use the configuration information within the x400api.xml file. Logging xml files may be created or altered using the logconfig tool located within the BINDIR (C:\Program Files\Isode\bin on Windows, /opt/isode/bin on unix). There is an example x400api.xml file located within the x400api C example directory.
Compiling the Application
To build the application you must have a JDK installed. You should also make sure that there are no pre-compiled classes in your build tree.
Unix
This command assumes that the JDK is installed in /usr/lib/jvm/java/bin/
# cd /opt/isode/share/x400sdk/example/java # rm *.class ; rm com/isode/x400api/test/*.class # /usr/lib/jvm/java/bin/javac -sourcepath . -classpath -classpath /opt/isode/lib/java/classes/isode-x400.jar X400_test.java # ./run_test.sh
Windows
This command assumes that the JDK is installed in E:\j2sdk1.8.0_08
C:> E:\jdk1.8.0_08\bin\javac -sourcepath . -verbose -classpath ".;c:\progra~1\Isode\bin\java\classes\isode-x400.jar;C:\Program Files\Isode\share\x400sdk\example\java" -g X400_test.java
(Note that the line should not be broken)
Submission via the Message Store (P7)
Connection to the Message Store
To connect to the Message Store you need
- Presentation Address of the Store
- P7 Credentials (simple)
- Password
- O/R Name
- Directory Name (optional)
- O/R address
The configuration of program-wide values are held at the start of the config.java file.
However you must configure whether you are using P3 or P7. This value is a local variable declared and set just before the msopen() call. Use 0 for P7, 1 for P3 submission, and 2 for P3 submission and retrieval:
int type = 0;
Retrieval from the Message Store (P7)
Connection to the Message Store
This works in the same way as for Submission. There are no mandatory values to configure in the rcv_msg() part of the application.
Running the Application
Unix
To run the application you simply run the wrapper script from the command line. No arguments are required.
[root@dhcp-164 java]# ./run_test.sh X400_att.X400_API_VERSN = 14020000 Opened MS session successfully Building message envelope Building message content Building message for message bodypart Added recipient /CN=fwd msg orig/OU=lppt/O=dhcp-164/PRMD=TestPRMD/ADMD=TestADMD/C=GB/ successfully Added recipient /CN=forwarded msg recip/O=dhcp-164/PRMD=TestPRMD/ADMD=TestADMD/C=GB/ successfully Added recipient /CN=invalid/OU=lppt/O=dhcp-164/PRMD=TestPRMD/ADMD=TestADMD/C=GB/ successfully Adding originator Added recipient /CN=P7User1/OU=Sales/O=dhcp-164/PRMD=TestPRMD/ADMD=TestADMD/C=GB/to MS Message Adding recipients Added recipient /CN=P7User1/OU=Sales/O=dhcp-164/PRMD=TestPRMD/ADMD=TestADMD/C=GB/to MS Message Added recipient /CN=invalid/O=GatewayMTA/PRMD=TestPRMD/ADMD=TestADMD/C=GB/to MS Message Set security ID successfully/opt/isode/share Set security ID DN successfullycn=AMHS Tester, cn=isode, c=GB Set security ID PPHR successfullysecret Submitted message successfully Closed MS Session successfully sent message ================================================= Receive another message ================================================= Did MS List successfully No more list results, i = 1 Opened MS session successfully, 0 messages waiting Set security ID successfully/opt/isode/share Set security ID DN successfullycn=AMHS Tester, cn=isode, c=GB Set security ID PPHR successfullysecret x400_ms_msggetstart failed 30 Closed MS Session successfully ================================================= Receive another message ================================================= Did MS List successfully No more list results, i = 1 Opened MS session successfully, 0 messages waiting Set security ID successfully/opt/isode/share Set security ID DN successfullycn=AMHS Tester, cn=isode, c=GB Set security ID PPHR successfullysecret x400_ms_msggetstart failed 30 Closed MS Session successfully ================================================= Receive another message ================================================= Did MS List successfully No more list results, i = 1 Opened MS session successfully, 0 messages waiting Set security ID successfully/opt/isode/share Set security ID DN successfullycn=AMHS Tester, cn=isode, c=GB Set security ID PPHR successfullysecret x400_ms_msggetstart failed 30 Closed MS Session successfully
Windows
java -Djava.library.path="C:\PROGRA~1\Isode\bin" -classpath .;
"c:\progra~1\Isode\bin\java\classes\isode-x400.jar;
C:\Program Files\Isode\share\x400sdk\example\java" -verbose:jni -Xms20m X400_test
Submission directly to the MTA (P3)
Connection to the MTA
Configuration of P3 Submission is similar to P7. You need to configure
- Connection type to 1 (P3 submission only) or 2 (P3 submission and retrival)
Like the P7 configuration all MTA (P3 channel)connection values are held in program variables. These are dependant on the config.java class.
Retriving messages from the MTA
This works in the same way as for P3 Submission, except that to retrieve messages you must bind as a user who uses a p3 passive channel to perform delivery (i.e., a channel which is channel initiated, rather then queue manager initiated).
quickconfig sets up a p3 passive channel called p3server. It also configures a user called:
"/CN=P3User1/OU=Sales/O=" + hostname + "/PRMD=TestPRMD/ADMD=TestADMD/C=" + country + "/"
So in order to test P3 submission and delivery, set the type variable witin the config.class to 2. A message will be submitted to the P3User address. This will be routed to the p3server channel. The test program will then connect to this channel, and download the message.