Hola Carlos,

te incluyo mis notas sobre configuración del SMTP. Están un poco desfasadas
ya que en las últimas versiones (>= 7.1) IBM ha introducido mejoras que no
están reflejas en las notas. Espero te sirvan de ayuda.

Javier

El lun., 25 may. 2020 a las 15:46, Alberto Martinez (<
[email protected]>) escribió:

> Hola
> Yo te mando este link, y aprovecho para decir a quien no conozca este
> blog, que vale mucho la pena.
> https://www.rpgpgm.com/2013/12/email-ifs-files.html
>
> Saludos!
>
>
>
>
> De:        "CARLOS SANTIAGO" <[email protected]>
> Para:        "FORUM HELP400" <[email protected]>
> Fecha:        25/05/2020 13:36
> Asunto:        ** Newsletter ** USO DEL MANDATO sndsmtpemm y CONFIGURAR
> CORREO SMTP
> Enviado por:        "Forum.help400" <
> [email protected]>
> ------------------------------
>
>
>
> Buenas tardes
> alguien ha usado el mandato sndsmtpemm para enviar emails desde el iseries?
> algún manual "sencillo" de configuración del smtp?
>
> gracias y saludos
> Carlos
>  ____________________________________________________
> nete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
> Forum.Help400  Publicaciones Help400, S.L.
> ____________________________________________________
> Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
> Forum.Help400 © Publicaciones Help400, S.L.
Title: Cómo configuar el servidor de correo electrónico del IBM i

Cómo configuar el servidor de correo electrónico del IBM i

Este documento explica cómo configurar el servidor de correo electrónico del IBM i, guiando al lector por cada una de sus fases e intentando explicar y aclarar el porqué de cada una de las acciones adoptadas.

Es importante recordar que el soporte que proporciona OS/400 para el correo electrónico se construyó mucho antes de que Internet y el protocolo SMTP se hicieran populares. Esta característica permitió a los equipos de IBM comunicarse a través de un sistema llamado SNADS. Es por eso que mandatos como SNDDST parezcan mucho más complicados de lo que debieran, ya que fueron diseñados para SNADS y después adaptados para SMTP.

Una red de ejemplo

Para ilustrar esta configuración se utilizará un entorno de ejemplo con las siguientes características:

  • Clase de las direcciones IP: Clase C - 192.168.1.0
  • Nombre del IBM i: ibm_i
  • Dirección IP del IBM i: 192.168.1.1
  • ¿Está el IBM i publicado en Internet?: NO
  • ¿Por dónde se tramitará el correo?: por un servidor Exchange dentro de la misma red local. A esta máquina se le denominará servidor externo o corporativo.
  • Dominio que gestiona el sevirdor corporativo: ejemplo.es
  • Dirección IP del servidor de correo corporativo: 192.168.1.8

El IBM i actuará como un servidor de correo interno, es decir, no será el encargado de entregar los mensajes a los destinatarios que estén fuera del dominio que gestione localmente. El servidor Exchange asumirá esa responsabilidad y tendrá que estar configurado convenientemente para aceptar y retransmitir (relay) los mensajes recibidos desde el IBM i (IP 192.168.1.1). Este ajuste es necesario porque hasta la versión V5R4 (incluida) no era posible autenticarse en un servidor de correo mediante un usuario y una contraseña.

Si es un Proveedor de Servicios de Internet (ISP) quién gestiona el servidor de correo para retransmitir los mensajes, habrá que contactar con él para que configure sus equipos.

Establecer la información de los dominios SMTP que gestionará el IBM i

Un parámetro importante en la configuración de TCP/IP de un IBM i es la información de dominio que tendrá el equipo. El siguiente mandato asigna el nombre de máquina ibm_i dentro del dominio ejemplo.es:

   ChgTcpDmn  HostName( 'ibm_i' )                                +
              DmnName( 'ejemplo.es' )                            +
              DmnSchList( *DFT )                                 +
              HostSchPty( *LOCAL )

Nota: No sé exactamente para qué se utiliza el nombre de dominio de la máquina pero posiblemente sea un valor utilizado en el intercambio de mensajes SMTP entre el cliente y el servidor. En las pruebas realizadas no se han detectado problemas al utilizar el mismo dominio que el gestionado por el servidor externo.

Si es necesario, indicar también en este mandato las IPs de los servidores de nombres (DNS).

El servidor SMTP del IBM i puede aceptar correo de un cliente interno, como el mandato SNDDST o la API Send MIME mail; y también de un cliente externo, como por ejemplo un Outlook o un Thunderbird en una máquina Windows o Linux. SMTP tiene dos opciones para gestionar los mensajes recibidos, almacenarlos localmente o retransmitirlos a otro servidor SMTP. Este mecanismo de selección se configura añadiendo una entrada en la Tabla de sistemas principales con la lista de dominios gestionados por el IBM i:

   AddTcpHte  IntNetAdr( '192.168.1.1' )                         +
              HostName( ('ibm_i')                                +
                        ('ibm_i.ejemplo.es') )                   +
                        ('ejemplo.net')                          +
              Text( 'Este System i' )

En el ejemplo anterior queremos que el servidor SMTP acepte correo cuyos destinatarios pertenezcan a los dominios ejemplo.net y ibm_i.ejemplo.es. El resto de mensajes serán retransmitidos al sevidor corporativo para su entrega al destinatario. Es decir, un mensaje recibido con el dominio @ejemplo.net será almacenado en el IBM i, otro con el dominio @otrodominio.com será retransmitido al servidor externo.

La dirección IP de la entrada se corresponde con la definida en la Interfaz TCP/IP (opción 1 del menú CFGTCP) de la máquina. Si hubiera más de una (no tener en cuenta la 127.0.0.1) se podrían añadir tantas entradas en la tabla de sistemas como fueran necesarias. En el ejemplo anterior, también se puede observar que se ha incluido el nombre completo de la máquina, que es la concatenación de los valores de los parámetros HOSTNAME y DMNNAME del mandato CHGTCPDMN separados por un punto.

¡Cuidado!, el servidor corporativo ya gestiona el dominio @ejemplo.es y no debiera incluirse en la lista anterior. ¿Por qué? Porque si, desde el IBM i, se tiene que enviar un correo a ese dominio nunca saldrá a la red, ya que al resolver el nombre lo encontrará en la tabla local y el mensaje quedará confinado en el servidor interno.

Si es el IBM i el que gestiona todos los buzones del dominio ejemplo.es entonces habrá que incluirlo en la lista anterior.

La Intraestructura de Servicios de Correo (MSF)

OS/400 utiliza la Infraestructura de Servicios de Correo (MSF) para la función de distribución del servidor de correo. Cada vez que se arranca el subsistema QSYSWRK se inician uno o más trabajos QMSF. Ésto se consigue a través del trabajo de arranque automático QZMFECOX de dicho subsistema. Se puede cambiar el número de trabajos iniciales modificando la descripción de trabajo QSYS/QZMFEJBD con el siguiente mandato:

   ChgJobD    JobD(QSYS/QZMFEJBD)                                 +
              RqsDta( 'QSYS/STRMSF MSGOPT(*RESUME) NBRMSFJOB(3)' )

En el ejemplo anterior se ha optado por arrancar tres trabajos (parámetro NBRMSFJOB).

Si no se quiere iniciar ningún trabajo de MSF al arrancar el subsistema QSYSWRK, se puede eliminar la entrada de trabajo de arranque automático (QZMFECOX), de la descripción del subsistema, utilizando el mandato RMVAJE.

Para un arranque o parada manual de este servicio se pueden utilizar los siguientes mandatos:

STRMSF   /* Arranca el servicio MSF */

ENDMSF   /* Detiene el servico MSF */

Configurar el direccionador de correo

Para redirigir los mensajes a otro servidor para su entrega, se necesitan algunos cambios en las propiedades del servidor de correo. Primero, incluir en la Tabla de sistemas principales el nombre y la dirección IP del servidor de correo externo (no será necesario si el nombre puede resolverse a través de en un servidor de DNS):

   AddTcpHte  IntNetAdr( '192.168.1.8' )                          +
              HostName( ('svr-correo')                            +
                        ('exchange') )                            +
              Text( 'Servidor de correo electrónico' )

A continuación, cambiar la configuración del servicio SMTP del IBM i para que se inicie automáticamente al arrancar TCP/IP (parámetro AUTOSTART) e incluir el Direccionador de correo (parámetro MAILROUTER) para cuando SMTP no pueda resolver el nombre ni la dirección del destinatario. Se utilizará el nombre definido en el paso anterior:

   ChgSmtpA   AutoStart( *YES )                                   +
              UsrIdDelim( '.' )                                   +
              MailRouter( 'svr-correo' )                          +
              FireWall( *NO )                                     +
              Journal( *YES )                                     +
              AlwRly( *NONE )

Algunas de las opciones del mandato CHGSMTPA requieren una explicación:

MAILROUTER() le dice al OS/400 donde debería enviar el correo saliente en el caso de no poder resolver el destinatario, es decir, un dominio no incluido en la Tabla de sistemas principales. Se corresponde con el sevidor de correo corporativo que puede estar en nuestra red local o en un ISP.

FIREWALL(*YES) indica que siempre se tiene que enviar el correo a través del direccionador (parámetro MAILROUTER) y nunca intente entregarlo directamente. En el ejemplo se ha optado por FIREWALL(*NO).

Con ALWRLY(*NONE) se impide la retransmisión de correo a través del IBM i. Con esta función se evita que usuarios mal intenciados puedan utilizar el servidor de correo para reenviar mensajes. Este parámetro ofrece otras alternativas:

  • ALWRLY(*ALL): es muy peligrosa y deja abierto el sistema para que cualquiera pueda enviar correo a través del IBM i sin consentimiento, por ejemplo, los spammers.

  • ALWRLY(*BOTH): con esta opción sólo se permite la retransmisión controlada de correo entrante. El sistema tiene unas listas donde figuran las direcciones IP autorizadas. Por ejemplo, supongamos que tenemos un equipo que necesita utilizar el servidor de correo del IBM i para enviar mensajes. Su dirección IP es 192.168.1.100. El siguiente mandato autoriza la retransmisión del correo recibido desde esa máquina:

    ADDSMTPLE TYPE(*ACCEPT) INTNETADR('192.168.1.100') SUBNETMASK('255.255.255.255')
    

    Nota: No existe un mandato del sistema para ver la lista de estas reglas, sólo se podrá hacer desde el iSeries Navigator buscando en las propiedades del servidor SMTP.

Para evitar que los mensajes de correo se fragmenten, incluso si éstos son grandes:

CHGPOPA MSGSPLIT(*NOMAX)

Nota: Es extraño que este valor se controle desde la configuración de POP3.

Configurar la pasarela SMTP

Si se van a utilizar herramientas SNADS (como el mandato SNDDST) para enviar correo a Internet, se necesitará configurar una pasarela hacia el servidor SMTP.

Incluir en el Directorio de distribución del sistema una entrada especial para resolver direcciones SMTP:

   AddDirE    UsrId( INTERNET GATEWAY )                           +
              UsrD( 'Internet SMTP Gateway' )                     +
              SysName( INTERNET )                                 +
              NetUsrId( *USRID )                                  +
              MsfSrvLvl( *USRIDX )                                +
              PrefAdr( NETUSRID *IBM ATCONTXT )

El nombre del sistema (SYSNAME) tiene que ser diferente al nombre utilizado para identificar a los usuarios del equipo o al nombre de la red SNADS si se utilizara.

El identificador de usuario (USRID) se utiliza en el parámetro de Direccionador de pasarela (SMTPRTE) del mandato Cambiar atributos de distribución (CHGDSTA).

   ChgDstA    SmtpRte( INTERNET GATEWAY )
   
   ChgSysDirA AlwSch( *YES )  /* ???? */

Después de estos cambios, el mandato SNDDST podrá utilizar la pasarela para enviar correo electrónico a través del servidor interno.

Cómo iniciar y parar el servicio SMTP

Con todos estos cambios, queda configurado el servidor SMTP del IBM i para enviar o recibir correo electrónico. Para que surtan efecto es necesario reiniciar los servidores afectados. Los siguientes mandatos detienen esos servicios:

EndTcpSvr  Server( *SMTP )
EndMsf     Option( *IMMED )

Nota: Asegurarse de que los trabajos QTSMTPxxxx del subsistema QSYSWRK hayan finalizado.

Y arrancar los servidores de nuevo:

StrTcpSvr  Server( *SMTP )
StrMsf

Importante: El orden de ejecución de los mandatos es curioso, porque no es simétrica, es decir, no se finalizan los servicios en orden inverso a su iniciación. En muchas ocasiones, esta secuencia de mandatos ha resuelto problemas con el servidor SMTP.

Comprobaciones

¿Cómo sabemos si los servicios de correo están activos? El sistema operativo arranca una serie de trabajos en el subsistema QSYSWRK que deberían estar ejecutándose. En la siguiente lista se relacionan estos trabajos según la versión del sistema operativo:

Trabajos relacionados con el correo
Servicio Anterior a V4R4 Desde la V4R4
Infraestructura de Servicios de Correo (MSF) QMSF
SMTP QTSMTPBRCL
SMTP QTSMTPBRSR
SMTP QTSMTPCLNT QTSMTPCLTD
SMTP QTSMTPSRVR QTSMTPSRVD

En cada caso, utilizar el mandato WRKACTJOB para verificar que están iniciados:

WRKACTJOB SBS(QSYSWRK)

Enviar un mensaje de correo electrónico desde el IBM i

Se puede usar el mandato SNDDST para enviar mensajes de correo desde la línea de mandatos. Originalmente no se creó pensando en el protocolo SMTP y, por tanto, no es una herramienta intuitiva ni con muchas posibilidades, pero puede utilizarse para el envío de mensajes sencillos. Los destinatarios podrán ser cuentas de correo externas u otros usuarios del IBM i.

Cuando el destinatario es externo

Cualquier usuario que necesite enviar un mensaje debe incluirse en el Directorio de distribución del sistema y tener una dirección de correo. Por ejemplo:

CRTUSRPRF USRPRF(CORREO1) TEXT('Usuario de correo electrónico')

ADDDIRE USRID(CORREO1 IBMI) +
        USRD('Usuario de correo') +
        USER(CORREO1) +
        SYSNAME(*LCL) +
        MSFSRVLVL(*SYSMS) +
        PREFADR(*SMTP)

Para añadir la dirección de correo del usuario utilizar el mandato Trabajar con nombres para SMTP:

WRKNAMSMTP TBLTYPE(*SYSTEM)

Seleccionar la opción 1=Añadir:

                            Añadir Nombre para SMTP
                                                            Sistema:   SXXXXXXX
 Teclee elecciones, pulse Intro.

   ID Usuario  . . . . . . .   CORREO1    Valor tipo carác, *ANY, F4 para lista
   Dirección . . . . . . . .   IBMI       Valor de tipo carácter, F4 para lista



   ID usuario SMTP . . . . .   correo1
   Dominio SMTP  . . . . . .   ejemplo.es

A continuación, el usuario CORREO1 utiliza SNDDST desde la línea de mandatos para enviar un mensaje de correo:

SNDDST TYPE(*LMSG) +
       TOINTNET( '[email protected]' ) +
       DSTD('Asunto del mensaje') LMSG('Texto del mensaje')

Como el destinatario es una cuenta externa en el dominio otrodominio.com, el servidor SMTP interno no lo podrá resolver y lo retransmitirá al servidor corporativo, que se encargará de su entrega.

Cuando el destinatario es interno

En este caso el destinatario del correo es otro usuario del IBM i:

CRTUSRPRF USRPRF(CORREO2) TEXT('Usuario de correo electrónico')

ADDDIRE USRID(CORREO2 IBMI) +
        USRD('Usuario de correo') +
        USER(CORREO2) +
        SYSNAME(*LCL) +
        MSFSRVLVL(*SYSMS) +
        PREFADR(*SMTP)
                            Añadir Nombre para SMTP
                                                            Sistema:   SXXXXXXX
 Teclee elecciones, pulse Intro.

   ID Usuario  . . . . . . .   CORREO2    Valor tipo carác, *ANY, F4 para lista
   Dirección . . . . . . . .   IBMI       Valor de tipo carácter, F4 para lista



   ID usuario SMTP . . . . .   correo2
   Dominio SMTP  . . . . . .   ejemplo.net

¡Importante!, el dominio SMTP debe corresponderse con uno de los definidos en la entrada de Sistemas principales para la IP del servidor interno (192.168.1.1). Si no fuera así, el servidor SMTP redirigirá el mensaje al servidor externo.

De nuevo, el usuario CORREO1 envía un mensaje de correo a CORREO2:

SNDDST TYPE(*LMSG) +
       TOINTNET( '[email protected]' ) +
       DSTD('Asunto del mensaje') LMSG('Texto del mensaje')

En este caso, el mensaje no se retransmite al servidor externo sino que se almacena en el buzón de CORREO2, que está ubicado en el IFS dentro del directorio /QTCPTMM/MAIL/CORREO2. Cada fichero se corresponde con un mensaje.

Enviar un mensaje de correo electrónico a través del IBM i

Como ya se ha comentado, también es posible configuar clientes de correo, como Outlook o Thunderbird, para enviar mensajes utilizando el servidor SMTP del IBM i. Cada programa tiene una forma para establecer los valores de conexión, pero entre ellos siempre estarán el nombre y contraseña de un usuario del IBM i, la dirección IP del servidor SMTP y el número de puerto (el 25, si no se cambia).

Configurar el servidor POP3

El IBM i también dispone de un servidor POP3 cuya función consiste en distribuir el correo almacenado en el servidor a los distintos buzones locales de cada cliente. En párrafos anteriores se ha explicado cómo configurar el sistema para que determinados usuarios reciban y almacenen sus mensajes de correo en el IBM i. Posteriormente, podrán descargarlo en sus clientes de correo locales (por ejemplo, Outlook o Thunderbird) con el servicio POP.

Cambiar la configuración del servidor POP para que se inicie automáticamente y no trocee los mensajes:

CHGPOPA AUTOSTART(*YES) MSGSPLIT(*NOMAX)

Con los siguientes mandatos se arranca o para el servicio POP:

STRTCPSVR SERVER(*POP)

ENDTCPSVR SERVER(*POP)

Recoger correo desde clientes POP

Aunque estos usuarios nunca se conecten al sistema, por cada buzón se necesitará crear un perfil de usuario:

CRTUSRPRF USRPRF(POP3) +
          PASSWORD() +
          PWDEXP(*NO) +
          INLMNU(*SIGNOFF) +
          LMTCPB(*YES) +
          PWDEXPITV(*NOMAX) +
          TEXT('Usuario POP3.')

Algunas de las opciones utilizadas para este usuario merecen una aclaración:

PWDEXP(*NO) evita que el usuario se tenga que conectar al sistema para cambiar su contraseña.

INLMNU(*SIGNOFF) impide que el usuario pueda iniciar una sesión en el sistema.

LMTCPB(*YES) se indica con el propósito de mejorar la seguridad.

Con PWDEXPITV(*NOMAX) se consigue que la contraseña nunca caduque, de modo que el usuario no tenga que conectarse al sistema para renovarla.

El usuario (parámetro USRPRF) y la contraseña (parámetro PASSWORD) son los datos a indicar en el cliente local para conectar con el servidor POP. A veces, como medida de seguridad, el perfil de usuario no es el mismo que el usuario de correo. En el ejemplo, la dirección de correo es [email protected] y, sin embargo, el nombre del perfil de usuario es POP3.

El usuario también precisa de una entrada en el Directorio de distribución:

ADDDIRE USRID(POP3 IBMI) +
        USRD('Usuario para POP3') +
        USER(POP3) +
        SYSNAME(*LCL) +
        MSFSRVLVL(*SYSMS) +
        PREFADR(*SMTP)

Finalmente, hay que añadir la dirección de correo electrónico igual que se hizo en pasos anteriores:

WRKNAMSMTP TBLTYPE(*SYSTEM)

Seleccionar la opción 1=Añadir:

                            Añadir Nombre para SMTP
                                                            Sistema:   SXXXXXXX
 Teclee elecciones, pulse Intro.

   ID Usuario  . . . . . . .   POP3       Valor tipo carác, *ANY, F4 para lista
   Dirección . . . . . . . .   IBMI       Valor de tipo carácter, F4 para lista



   ID usuario SMTP . . . . .   usuario
   Dominio SMTP  . . . . . .   ejemplo.net

A partir de ahora, cualquier mensaje enviado a [email protected] se almacenerá en el IBM i. Cuando el cliente de correo local se conecte al servidor POP se descargará todos los correos almacenados en éste.

Más información en ...

____________________________________________________
�nete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
Forum.Help400 � Publicaciones Help400, S.L.

Reply via email to