Отсылка электронной почты средствами PL/I

Для случая, когда отсылка почты из задания - это не совсем подходящий вариант реализации задачи, можно использовать средства PL/I для отсылки корреспонденции.

В нашем распоряжении имеется JES SPOOL API, и именно ее мы и будем использовать.

Для работы необходимо объявить следующие структуры:

DCL
1       CHNG_OPTIONS,
  3     LL        FIXED BIN (31),
  3     ZZ        FIXED BIN (15)
                  INIT      (0),
  3     TEXT1     CHAR      (14)
                  INIT      ('IAFP=N0M,PRTO='),
  3     CHNG_CMD  CHAR      (34) VARYING,
        LEN       FIXED BIN (15) BASED (ADDR(CHNG_CMD));
CHNG_OPTIONS.LL = CSTG(CHNG_OPTIONS)-2;
 
DCL
1       CHNG_FEEDBACK,
  3     LEN       FIXED BIN (31)
                  INIT      (104),
  3     ZZ        FIXED BIN (15)
                  INIT      (0),
  3     TEXT      CHAR      (100)
                  INIT      ('');
 
DCL
1       PROFS_DATA,
  3     BDWLEN    FIXED BIN (31),
  3     BDWZZ     FIXED BIN (15)
                  INIT      (0),
  3     MESSAGE_LINE(60),
    5   LENGTH    FIXED BIN (15),
    5   ZZ        FIXED BIN (15)
                  INIT      ((60)(0)),
    5   TEXT      CHAR      (84);

CHNG_OPTIONS будет использоваться для передачи параметров для JES SPOOL API в расширенной CHNG команде.

CHNG_FEEDBACK будет содержать ответ от JES SPOOL API.

PROFS_DATA будет содержать данные, пересылаемые на почту.

Итак, для начала заполним структуру с опциями:

PROFS_NODE        = 'IBMMAIL';
PROFS_ID          = 'INTERNET';
PRFNODEV = SUBSTR(PROFS_NODE,1,INDEX(PROFS_NODE || ' ',' ')-1);
PROFSIDV = SUBSTR(PROFS_ID,1,INDEX(PROFS_ID || ' ',' ')-1);
CHNG_CMD='DEST('
        || PRFNODEV
        || '.'
        || PROFSIDV
        || '),CLASS(B)  ';

Дальнейшая логика работы проста до невозможности:
1) Выполняем CHNG команду, используя альтернативный PCB
2) Заполняем структуру с данными для отсылки
3) Выполняем ISRT и PURG команда, отсылая подготовленные данные

CALL PLITDLI(#5,
             'CHNG',
             MOD_PCB,
             '        ',
             CHNG_OPTIONS,
             CHNG_FEEDBACK);
 
CALL FILL_MESSAGE_STRUCTURE();
 
CALL PLITDLI(#3,
             'ISRT',
             MOD_PCB,
             ADDR(PROFS_DATA));
 
CALL PLITDLI(#2,
             'PURG',
             MOD_PCB);

Процедура заполнения текста письма выглядит следующим образом:

FILL_MESSAGE_STRUCTURE: PROC;
   DCL COUNT FIXED BIN(31);
   PROFS_DATA = '';
   PROFS_DATA.BDWLEN=CSTG(PROFS_DATA)-2;
   DO COUNT=1 TO 60;
     PROFS_DATA.MESSAGE_LINE(COUNT).LENGTH=
       CSTG(PROFS_DATA.MESSAGE_LINE(COUNT));
     PROFS_DATA.MESSAGE_LINE(COUNT).TEXT='';
   END;
   PROFS_DATA.MESSAGE_LINE(1).TEXT = '/INTERNET';
   PROFS_DATA.MESSAGE_LINE(2).TEXT = '/TO ' || 'адрес получателя';
   PROFS_DATA.MESSAGE_LINE(3).TEXT = '/SUBJECT ' || 'заголовок письма';
   PROFS_DATA.MESSAGE_LINE(4).TEXT = '/END';
   PROFS_DATA.MESSAGE_LINE(5).TEXT = 'Первая строка с телом письма';
END FILL_MESSAGE_STRUCTURE;

Последующие элементы массива PROFS_DATA.MESSAGE_LINE.TEXT (6 и так далее до предела, установленного при объявлении структуры - в данном случае 60) нужно последовательно заполнять строками отсылаемого письма.

Для запуска можно использовать задание, аналогичное тому, которое использовалось в публикации Отсылка IMS триггеров из PL/I. PSB так же можно использовать из предыдущего примера.

Добрый день! Не совсем

Добрый день!
Не совсем понятно какой job на компиляцию/линковку/исплднение

если можно, скиньте его kolyachkoandrew@gmail.com

Компиляция/ликновка -

Компиляция/ликновка - средствами SCLM, с параметрами по умолчанию. Задание на исполнение тоже без доп. параметров. То есть все 1 к 1 с другими программами, которые не используют JES SPOOL API

спасибо

спасибо

Отправить комментарий

  • Доступны HTML теги: <b> <i> <u> <br> <hr> <div> <span> <code> <pre>
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <code>, <pli>.

Подробнее о форматировании

  ____    _____ 
| ___| |___ /
|___ \ |_ \
___) | ___) |
|____/ |____/
Enter the code depicted in ASCII art style.