FLAM Issue Tracker - FL5
View Issue Details
0000835FL52.2 Subprogram FLUC (CONV)public2016-11-23 17:382020-03-13 01:54
Falk Reichbott 
Falk Reichbott 
normalfeatureN/A
resolvedfixed 
System zz/OSV2R20
5.1.13 
5.1.225.1.22 
0000835: Support write of files as mail attachment over the SYSOUT(TCPCSMTP)
It woulkd be useful to process files as mail attachment over a SYSOUT allocation.
write.text(method=unix ccsid=UTF8 encr.pgp(pass=a'hugo')
           file='DD:MIMOUT'; mit plausipruefung wenn CSMINE genutzt wird
           falloc(sysout(class='A',writer.tcpcsmtp(server='' from='' to[''] cc[''] subj='' body='')')))
No tags attached.
related to 0000834resolved Falk Reichbott Support dynamic allocation of SYSOUT 
Issue History
2016-11-23 17:38Falk ReichbottNew Issue
2016-11-23 17:38Falk ReichbottStatusnew => assigned
2016-11-23 17:38Falk ReichbottAssigned To => Falk Reichbott
2016-11-23 17:38Falk ReichbottRelationship addedrelated to 0000834
2017-01-02 14:30Falk ReichbottSummarySupport write of files as attachment over the SYSOUT(TCPCSMTP) => Support write of files as mail attachment over the SYSOUT(TCPCSMTP)
2017-08-31 16:54Falk ReichbottTarget Version5.1.16 => 5.1.18
2018-03-05 08:17Falk ReichbottTarget Version5.1.18 => 5.1.20
2019-02-28 17:35Falk ReichbottTarget Version5.1.20 => 5.1.22
2019-05-08 11:02Falk ReichbottNote Added: 0001230
2019-05-08 11:09Falk ReichbottNote Added: 0001231
2020-03-13 01:54Falk ReichbottNote Added: 0001302
2020-03-13 01:54Falk ReichbottStatusassigned => resolved
2020-03-13 01:54Falk ReichbottFixed in Version => 5.1.22
2020-03-13 01:54Falk ReichbottResolutionopen => fixed
2020-03-13 01:54Falk ReichbottNote Added: 0001303

Notes
(0001230)
Falk Reichbott   
2019-05-08 11:02   
Technote (FAQ)

Question

Is it possible to send an email attachment outbound from z/OS using either the Simple Mail Transfer Program (SMTP) or Communications Server SMTP (CSSMTP) applications?
Answer

Yes, but the SMTP and CSSMTP applications do not directly support email attachments. For more information on the limitations of SMTP and CSMTP in sending email attachments, see topic 15.3 Multipurpose Internet Mail Extensions (MIME) in the IBM Redbooks publication TCP/IP Tutorial and Technical Overview.

It is possible to send an email attachment by coding Multipurpose Internet Mail Extensions (MIME) headers within the email body. This Technote contains two examples of how to use MIME with the SMTP or CSSMTP servers. The second example also illustrates how to use concatenated datasets within an email body.

Both of these working (tested) examples will send a base64 encoded certificate as an attachment in an email. The base64 encoded certificate was created using the z/OS Resource Access Control Facility (RACF) EXPORT FORMAT(CERTB64) command.

Note that these attachments are composed of Extended Binary Coded Decimal Interchange Code (EBCDIC) characters. You cannot send a binary or non-text attachment because the SMTP and CSSMTP applications will translate everything into American Standard Code for Information Interchange (ASCII) before sending the content to a destination SMTP mailer on the network.

Example 1: system input stream (in line) MIME content

//SMTPBAT EXEC PGM=IEBGENER
//SYSIN DD DUMMY
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSUT2 DD SYSOUT=(B,CSSMTP)
//SYSUT1 DD *
HELO ADCDTEST
MAIL FROM:<ibmuser@zpdt.example.com>
RCPT TO:<mattenuttall@example.net>
DATA
From: matt@zpdt.example.com
To: mattenuttall@example.net
Subject: MIME test
MIME-Version: 1.0
Content-type: multipart/mixed; boundary="=_frontier"

Comments can go here if you like..
--=_frontier
Content-Type: text/plain;

Hi Friend;
This is the body of the message. I have attached a Base 64 encoded certificate.
Regards -- Matt

--=_frontier
Content-Type: application;
Content-Disposition: attachment; filename=cert.cer;
Content-Transfer-Encoding: 8bit;

-----BEGIN CERTIFICATE-----
MIIBtTCCAV+gAwIBAgIBADANBgkqhkiG9w0BAQUFADAxMQ8wDQYDVQQGEwZDYW5h
ZGExDDAKBgNVBAoTA0lCTTEQMA4GA1UEAxMHTnV0dGFsbDAeFw0wMTAxMDEwNDAw
MDBaFw0yMjAxMDEwMzU5NTlaMDExDzANBgNVBAYTBkNhbmFkYTEMMAoGA1UEChMD
SUJNMRAwDgYDVQQDEwdOdXR0YWxsMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANGt
XZC77TvlyUmCfJFB6FNBeabDFMZ27kVOoqzivNNAfS9nnZlKzhKAn8bZDKyN1VvE
Hqoc9ulJeHE06n7cI2MCAwEAAaNiMGAwPwYJYIZIAYb4QgENBDITMEdlbmVyYXRl
ZCBieSB0aGUgU2VjdXJpdHkgU2VydmVyIGZvciB6L09TIChSQUNGKTAdBgNVHQ4E
FgQUwXirDP0rK8sCfUUwqrArKvi2B6owDQYJKoZIhvcNAQEFBQADQQBjFTwMElwQ
XM38+5BZphwx7ZtdFWBFuOKv9H4mIVJ8rKmoBH7evul88tnuzM2iZ3F+cv4iKvh9
6IJwORKARTpa
-----END CERTIFICATE-----
--=_frontier
.
QUIT
/* END OF JCL

Why not use a DD card to point directly to the dataset containing the exported RACF certificate? RACF creates exported certificates with a variable blocking record format. The preceding example uses SYSUT1 with in stream Data Definition (DD). This means that the email content exists directly on the Job Entry Subsystem (JES) spool. JES spool files are a fixed record format environment. IEBGENER does not allow SYSUT1 to mix fixed and variable record formats.

One way to get around this is to use variable record format datasets for the entire mail contents: headers, data and attachments. This can be done with concatenated DDs. Our JCL now looks like example 2 below.

Example 2: email headers and attachments in VB datasets.

//SMTPBAT EXEC PGM=IEBGENER
//SYSIN DD DUMMY
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSUT2 DD SYSOUT=(B,SMTP)
//SYSUT1 DD DISP=SHR,DSN=IBMUSER.SMTP.PREAMBLE
// DD DISP=SHR,DSN=IBMUSER.TESTCERT
// DD DISP=SHR,DSN=IBMUSER.SMTP.POSTFIX
/* END OF JCL

The contents of IBMUSER.SMTP.PREAMBLE in example 2 are as follows:

HELO ADCDTEST
MAIL FROM:<ibmuser@zpdt.example.com>
RCPT TO:<mattenuttall@example.net>
DATA
From: matt@zpdt.example.com
To: mattenuttall@example.net
Subject: MIME test
MIME-Version: 1.0
Content-type: multipart/mixed; boundary="=_frontier"
                                                                 
Comments can go here if you like..
--=_frontier
Content-Type: text/plain;
                                                                 
Hi Friend;
This is the body of the message. I have attached a Base 64 encoded
certificate for you.
Regards -- Matt
                                                                 
--=_frontier
Content-Type: application;
Content-Disposition: attachment; filename=cert.cer;
Content-Transfer-Encoding: 8bit;
<blank line here>

Note that there should always be a blank line after the content headers.
The contents of IBMUSER.SMTP.POSTFIX in example 2 are as follows:

--=_frontier
.
QUIT

The IBMUSER.TESTCERT dataset contains the certificate that was exported from the RACF database using base64 format.

For more information on the MIME encoding used in these examples, see Request For Comments (RFC) 2045, 2046 and 4288.
(0001231)
Falk Reichbott   
2019-05-08 11:09   
https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.2.0/com.ibm.zos.v2r2.halz002/sendcssmtp.htm [^]
(0001302)
Falk Reichbott   
2020-03-13 01:54   
Add format.mail() to SYSOUT allocation in FALLOC object
(0001303)
Falk Reichbott   
2020-03-13 01:54   
Add format.mail() to SYSOUT allocation in FALLOC object