• The Four Hundred
  • Subscribe
  • Media Kit
  • Contributors
  • About Us
  • Contact
Menu
  • The Four Hundred
  • Subscribe
  • Media Kit
  • Contributors
  • About Us
  • Contact
  • Sending E-Mail from RPG, Take Two

    October 27, 2004 Hey, David

    The code for this article is available for download.

    Is there a continuation article to “Sending E-Mail from RPG” from last May? It was a really good article, but I’m not sure I can make modifications to be able to send e-mail with attachments. My problem is in the RPG program. I don’t know how to declare the prototype for the DataSource object (attachments). Could you please help or refer me to an article I could read?

    –Ana

    Your question points out that I could have made the Mailer Java class more RPG friendly. Although it is possible to create a DataSource in RPG, it is much easier to put the code in the Mailer class.

    To solve this problem, I used a feature of Java called method overloading. I left the SendMultiPartMail method intact, with its DataSource array parameter, and added a new SendMultiPartMail method that takes a String array containing file names in place of the DataSource array. So now there are two SendMultiPartMail methods, and the Java runtime environment will call the appropriate method based on the parameter types passed at runtime, which is the essence of overloading.

    I added the new method because it is much easier to create a String array in RPG IV than to create an array of DataSource objects. The following code shows the new method, which creates a DataSource in Java code and calls the original method.

    /**
     * Send a multipart email.
     * @param to        The destination address
     * @param from      The source address
     * @param subject   The subject line for the email
     * @param message   The message for the email
     * @param fileNames The names of files to attach
     * @throws MessagingException
     */
    public static void sendMultiPartMail(
        String to,
        String from,
        String subject,
        String message,
        String[] fileNames)
        throws MessagingException {
        DataSource bodyParts[] = new DataSource[fileNames.length];
    
        for (int i = 0; i < fileNames.length 
             && filenames[i] != null; i++) {
            bodyParts[i] = new FileDataSource(new File(fileNames[i]));
        }
        sendMultiPartMail(to, from, subject, message, bodyParts);
     }
     

    Calling this new method from your RPG IV program is now much easier. The following snippet shows the RPG IV prototype and call for this new Java method.

    DMailer$sendMultiPartMail...
    D                 PR                  STATIC
    D                                     EXTPROC(
    D                                       *JAVA:
    D                                       'demo.Mailer':
    D                                       'sendMultiPartMail')
    D to                                  LIKE(newString)
    D                                     CONST
    D from                                LIKE(newString)
    D                                     CONST
    D subject                             LIKE(newString)
    D                                     CONST
    D message                             LIKE(newString)
    D                                     CONST
    D attachments                         LIKE(newString)
    D                                     CONST
    D                                     DIM(32767)
    D                                     OPTIONS(*VARSIZE)
     …
    Dto               S               O   CLASS(*JAVA:'java.lang.String')
    Dfrom             S               O   CLASS(*JAVA:'java.lang.String')
    Dsubject          S               O   CLASS(*JAVA:'java.lang.String')
    Dmessage          S               O   CLASS(*JAVA:'java.lang.String')
    Dattachments      S               O   CLASS(*JAVA:'java.lang.String')
    D                                     DIM(10)
    ...
     /free
         to = newString('somebody@itjungle.com');
         from = newString('dmorris@itjungle.com');
         subject = newString('This is the subject');
         message = newString('Here is a test message');
         attachments(1) = newString('/java/mailer/demo/Mailer.java');
         Mailer$sendMultiPartMail(to: from: subject: message: attachments);
     /end-free
    

    This example attaches a single file found in the IFS to an e-mail message and sends it. The RPG IV code in this example supports up to 10 attachments; however, you could change DIM(10) to support any number of attachments. Instructions for creating the Mailer Java program are contained in the source. You will also have to modify Mailer.properties to point to your mail server. If you send e-mail directly through an ISP, you may also need to supply a user and password.


    Now change the e-mail addresses and attachment location in the mailerdemo RPG IV program and create it using CRTBNDRPG. Before you run mailerdemo, you need to add Mailer.class, along with Mailer.properties, Java Mail.jar, and Activation.jar, to your classpath. You would do this with the ADDENVVAR command, changing the path to reflect your environment, like this.

    ADDENVVAR VAR('/java/mailer:/java/javamail-1.3.1/
       mail.jar:/java/jaf-1.0.2/activation.jar')
    

    Now run the example. If everything is set up properly, you should find an e-mail in your inbox with the source for the Mailer Java program attached.

    –David Morris

    Click here to contact David Morris by e-mail.

    Share this:

    • Reddit
    • Facebook
    • LinkedIn
    • Twitter
    • Email

    Tags:

    Sponsored by
    FalconStor

    Simplify Secure Offsite Data Protection for IBM Power with FalconStor Habanero™

    IBM i teams are under growing pressure to ensure data is protected, recoverable, and compliant—without adding complexity or disrupting stable environments.

    FalconStor Habanero™ provides secure, fully managed offsite data protection purpose-built for IBM Power. It integrates directly with existing IBM i backup tools and processes, enabling reliable offsite copies without new infrastructure, workflow changes, or added operational overhead.

    By delivering and managing the service end-to-end, FalconStor helps organizations strengthen cyber resilience, improve disaster recovery readiness, and meet compliance requirements with confidence. Offsite copies are securely maintained and available when needed, supporting recovery, audits, and business continuity.

    FalconStor Habanero offers a straightforward way to modernize offsite data protection for IBM i: focused on simplicity, reliability, and resilience.

    Learn More

    Share this:

    • Reddit
    • Facebook
    • LinkedIn
    • Twitter
    • Email

    New BOSaNOVA Tool Integrates iSeries Data with Windows, Office Spool Control Authority Is a Security Risk

    Leave a Reply Cancel reply

Content archive

  • The Four Hundred
  • Four Hundred Stuff
  • Four Hundred Guru

Recent Posts

  • Bob 1.0 Users Bugged By Lack Of One Feature
  • Here Come The AI-Based Code Modernization Offerings
  • Guru: Cohesion First – What A Procedure Should Be Responsible For
  • IBM Offers Trade-Ins On Storage To Grease The Upgrade Skids
  • IBM i PTF Guide, Volume 28, Number 14
  • What IBM i Ideas Are Cooking In IBM’s Ideas Portal?
  • Early Bob Excels In Medhost IBM i Tryout
  • Counting The Cost Of AI Inference – And Projecting It Far Out
  • IBM i PTF Guide, Volume 28, Number 13
  • The Next Generation Of IBM i Talent in GenAI Action

Subscribe

To get news from IT Jungle sent to your inbox every week, subscribe to our newsletter.

Pages

  • About Us
  • Contact
  • Contributors
  • Four Hundred Monitor
  • IBM i PTF Guide
  • Media Kit
  • Subscribe

Search

Copyright © 2025 IT Jungle