Hola Mike,
Te pongo una función que encontré para para enviar mail con anexos
LZGE003TOP
---------------
function-pool zge003.
"MESSAGE-ID ..
*----------------------------------------------------------------------*
* DEFINICIÓN DE TABLAS *
*----------------------------------------------------------------------*
tables: tsp01.
" SPOOL: Demandas
*----------------------------------------------------------------------*
* DEFINICIÓN DE ESTRUCTURAS *
*----------------------------------------------------------------------*
data: e_datos_doc
like sodocchgi1.
*----------------------------------------------------------------------*
* DEFINICIÓN DE TABLAS INTERNAS *
*----------------------------------------------------------------------*
data: i_objpack
like sopcklsti1
occurs 0 with header line,
i_cabecera
like solisti1
occurs 0 with header line,
i_destinatario
like somlreci1
occurs 0 with header line,
i_pdf
like tline
occurs 0 with header line,
i_bin
like solisti1
occurs 0 with header line,
i_cont_bin
like solisti1
occurs 0 with header line,
i_texto
like solisti1
occurs 0 with header line.
*----------------------------------------------------------------------*
* DEFINICIÓN DE VARIABLES *
*----------------------------------------------------------------------*
data: v_lineas
like sy-tabix,
v_lineas_tot
like sy-tabix,
v_num_bytes
type i,
v_len
like sy-index,
v_long
like sy-index,
v_queda
like sy-index,
v_offset
like sy-index,
v_indice
like sy-index.
Código
--------
function z_ge_mailspool.
*"----------------------------------------------------------------------
*"*"Interfase local
*" IMPORTING
*" REFERENCE(V_DESTINATARIO) LIKE SOMLRECI1-RECEIVER
*" REFERENCE(V_TIPO) LIKE SOMLRECI1-REC_TYPE DEFAULT 'B'
*" REFERENCE(V_TITULO) LIKE SODOCCHGI1-OBJ_DESCR
*" REFERENCE(V_DESCR_TXT) LIKE SOPCKLSTI1-OBJ_DESCR OPTIONAL
*" TABLES
*" I_TEXTO STRUCTURE SOLISTI1
*" I_SPOOLS STRUCTURE ZEGESPOOL
*" I_ANEXO STRUCTURE SOLISTI1
*" EXCEPTIONS
*" SPOOL_NO_EXISTE
*" SPOOL_NO_ES_UN_FORMULARIO
*" DOCUMENTO_NO_ENVIADO
*" SIN_AUTORIZACION
*" ERROR_INTERNO
*"---------------------------------------------------------------------- * Se indica la información necesaria para la impresión del texto
describe table i_texto
lines v_lineas.
refresh i_objpack.
clear i_objpack.
v_indice
= 1.
i_objpack-transf_bin
= ' '.
i_objpack-head_start
= v_indice.
i_objpack-body_start
= 1.
i_objpack-body_num
= v_lineas.
i_objpack-doc_type
= 'RAW'.
append i_objpack.
* A la tabla de texto se le añadirá el contenido del anexo
append lines of i_anexo
to i_texto.
v_indice
= v_indice
+ 1.
i_objpack-transf_bin
= ' '.
i_objpack-head_start
= v_indice.
i_objpack-body_start
= v_lineas
+ 1.
i_objpack-obj_descr
= v_descr_txt.
describe table i_anexo
lines v_lineas.
i_objpack-body_num
= v_lineas.
i_objpack-doc_type
= 'RAW'.
append i_objpack.
* Y las informaciones necesarias para adjuntar los spools indicados
refresh i_cont_bin.
v_indice
= v_lineas.
loop at i_spools.
perform comprobar_orden_spool
using i_spools-rqident.
perform llenar_tabla_bin
using i_spools-rqident.
v_indice
= v_indice
+ 1.
clear i_objpack.
i_objpack-transf_bin
= 'X'.
describe table i_cont_bin
lines v_lineas_tot.
i_objpack-head_start
= v_lineas_tot
+ 1.
i_objpack-body_start
= v_lineas_tot
+ 1.
describe table i_bin
lines v_lineas.
i_objpack-body_num
= v_lineas.
i_objpack-doc_type
= 'PDF'.
i_objpack-obj_descr
= i_spools-nombre.
i_objpack-doc_size
= v_num_bytes.
append i_objpack.
append lines of i_bin
to i_cont_bin.
endloop.
* Información acerca del documento a enviar
clear e_datos_doc.
e_datos_doc-obj_descr
= v_titulo.
e_datos_doc-doc_size
= ( v_lineas
- 1 )
* 255 + strlen( i_cont_bin ).
* Información del receptor del mensaje
refresh i_destinatario.
clear i_destinatario.
i_destinatario-receiver
= v_destinatario.
i_destinatario-rec_type
= v_tipo.
append i_destinatario.
* Envio del mail
call function 'SO_NEW_DOCUMENT_ATT_SEND_API1'
exporting
document_data
= e_datos_doc
put_in_outbox
= 'X'
tables
packing_list
= i_objpack
contents_bin
= i_cont_bin
contents_txt
= i_texto
receivers
= i_destinatario
exceptions
too_many_receivers
= 1
document_not_sent
= 2
operation_no_authorization
= 4
others = 99.
case sy-subrc.
when 2.
raise documento_no_enviado.
when 4.
raise sin_autorizacion.
when 99.
raise error_interno.
endcase.
endfunction.
*----------------------------------------------------------------------*
***INCLUDE LZGE003F01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form comprobar_orden_spool
*&---------------------------------------------------------------------*
* Comprobar que la orden spool existe y es un formulario
*----------------------------------------------------------------------*
* -->PI_SPOOL Número de orden spool a comprobar
*----------------------------------------------------------------------*
form comprobar_orden_spool
using pi_spool.
select single rqdoctype
from tsp01
into tsp01-rqdoctype
where rqident
= pi_spool.
if not sy-subrc
is initial.
raise spool_no_existe.
elseif tsp01-rqdoctype <>
'OTF'.
raise spool_no_es_un_formulario.
endif.
endform.
" comprobar_orden_spool
*&---------------------------------------------------------------------*
*& Form llenar_tabla_bin
*&---------------------------------------------------------------------*
* Convertir el spool a PDF (binario)
*----------------------------------------------------------------------*
* -->PI_SPOOL Número de orden spool a tratar
*----------------------------------------------------------------------*
form llenar_tabla_bin
using pi_spool.
* Recuperar el spool en formato PDF
call function 'CONVERT_OTFSPOOLJOB_2_PDF'
exporting
src_spoolid
= pi_spool
no_dialog
= ' '
pdf_destination
= 'X'
importing
pdf_bytecount
= v_num_bytes
tables
pdf
= i_pdf.
* La tabla PDF tiene 134 caracteres de ancho, se pasa a la I_BIN, de 255
refresh i_bin.
clear i_bin.
v_queda
= 255.
loop at i_pdf.
if v_queda >
134.
v_long
= 134.
else.
v_long
= v_queda.
endif.
if v_long >
0.
concatenate i_bin i_pdf+v_offset(v_long)
into i_bin.
endif.
v_len
= strlen( i_bin ).
if v_len
= 255.
append i_bin.
clear i_bin.
v_offset
= 134 - v_queda.
if v_offset >
0.
concatenate i_bin i_pdf+v_queda(v_offset)
into i_bin.
endif.
v_len
= strlen( i_bin ).
clear v_offset.
endif.
v_queda
= 255 - v_len.
endloop.
append i_bin.
endform.
" llenar_tabla_bin
Espero te sea de utilidad.
Un saludor
.