PDA

Ver la Versión Completa : Send Email problem


CESARCAES01
06/02/14, 18:03:27
hola chicos. estoy enviando un correo con un archivo adjunto en pdf. el correo llega pero vacio.. ayuda tengo varioss dias haciendo esto y nada. el que envia el correo es un z, con la funcion SO_DOCUMENT_SEND_API1

Ripper87
06/02/14, 19:15:51
Pega el código aca para revisarlo.

Como estas llenando la tabla parámetro contents_txt?

CESARCAES01
06/02/14, 20:22:17
FORM f_send_mail.
" Local data
DATA: ld_sender_address LIKE soextreci1-receiver. " Mail data
DATA: ld_sender_address_type LIKE soextreci1-adr_typ. " Mail data
DATA: ld_sent_to_all LIKE sonv-flag. " Mail data
DATA: ld_lname TYPE string.
DATA: ld_index TYPE string.
DATA: ld_cont TYPE I.

" WA's
DATA: ls_doc_data LIKE sodocchgi1. " Mail Data
DATA: ls_packing_list TYPE sopcklsti1. " Mail Data
DATA: ls_receivers TYPE somlreci1. " Mail Data
" IT'S
DATA: lt_packing_list TYPE TABLE OF sopcklsti1. " Mail Data
DATA: lt_contents_bin TYPE TABLE OF solisti1. " Mail Data
DATA: lt_contents_txt TYPE TABLE OF solisti1. " Mail Data
DATA: lt_contents_hex TYPE TABLE OF solisti1. " Mail Data
DATA: lt_receivers TYPE TABLE OF somlreci1. " Mail Data
" FS's
FIELD-SYMBOLS: <lfs_line> TYPE solisti1. " Mail Data
FIELD-SYMBOLS: <lfs_packing_list> TYPE sopcklsti1. " Mail Data
FIELD-SYMBOLS: <lfs_receivers> TYPE somlreci1. " Mail Data
FIELD-SYMBOLS: <lfs_report> LIKE LINE OF gt_report.

" Contenido del mensaje LT_CONTENTS_TXT
DO.
" Se debe crear una constante por cada linea.
" El nombre debe comenzar por lo indicado en GC_BEG_LINE_NAME y seguidamente un número consecutivo
MOVE sy-index TO ld_index. CONDENSE ld_index.
CONCATENATE gc_beg_line_name ld_index INTO ld_lname.
ASSIGN (ld_lname) TO <lfs_line>.
IF <lfs_line> IS ASSIGNED.
APPEND <lfs_line> TO lt_contents_txt.
UNASSIGN <lfs_line>.
ELSE.
EXIT.
ENDIF.
ENDDO.

" Document data - Common part
MOVE sy-langu TO ls_doc_data-obj_langu.
MOVE 'SAPRPT' TO ls_doc_data-obj_name.
MOVE gc_mail_title TO ls_doc_data-obj_descr.
MOVE 'F' TO ls_doc_data-sensitivty.

" Describe the message body
MOVE space TO ls_packing_list-transf_bin.
MOVE 1 TO ls_packing_list-head_start.
MOVE 0 TO ls_packing_list-head_num.
MOVE 1 TO ls_packing_list-body_start.
MOVE 'RAW' TO ls_packing_list-doc_type.
DESCRIBE TABLE lt_contents_txt LINES ls_packing_list-body_num.
APPEND ls_packing_list TO lt_packing_list.

" Attachment notif
MOVE 'X' TO ls_packing_list-transf_bin.
MOVE 1 TO ls_packing_list-head_start.
MOVE 0 TO ls_packing_list-head_num.
MOVE 1 TO ls_packing_list-body_start.
MOVE 'PDF' TO ls_packing_list-doc_type.
CONCATENATE gc_fileprefix sy-datum INTO ls_packing_list-obj_name.
APPEND ls_packing_list TO lt_packing_list.

" Send to - Common part
MOVE 'U' TO ls_receivers-rec_type.
MOVE 'INT' TO ls_receivers-com_type.
MOVE 'X' TO ls_receivers-notif_del.
MOVE 'X' TO ls_receivers-notif_ndel.
APPEND ls_receivers TO lt_receivers.


" Loop employees
LOOP AT gt_report ASSIGNING <lfs_report>.

" Document data - Employee specific part
MOVE <lfs_report>-file_size TO ls_doc_data-doc_size.
" Attachment notif
READ TABLE lt_packing_list ASSIGNING <lfs_packing_list> INDEX 2.
DESCRIBE TABLE lt_contents_bin LINES <lfs_packing_list>-body_num.
" Pay receipt
MOVE <lfs_report>-file_size TO <lfs_packing_list>-doc_size.
* MOVE <lfs_report>-pay_receipt TO lt_contents_bin.
" Send TO - Mail
READ TABLE lt_receivers ASSIGNING <lfs_receivers> INDEX 1.
* MOVE <lfs_report>-email TO <lfs_receivers>-receiver.
MOVE 'cesarcaes01@gmail.com' TO <lfs_receivers>-receiver.

"convert 132 to 255
CALL FUNCTION 'SX_TABLE_LINE_WIDTH_CHANGE'
EXPORTING
line_width_src = 132
line_width_dst = 255
TABLES
CONTENT_IN = <lfs_report>-pay_receipt
CONTENT_OUT = lt_contents_bin
EXCEPTIONS
err_line_width_src_too_long = 1
err_line_width_dst_too_long = 2
err_conv_failed = 3
OTHERS = 4.


CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
EXPORTING
DOCUMENT_DATA = ls_doc_data
* PUT_IN_OUTBOX = PUT_IN_OUTBOX
* SENDER_ADDRESS = SPACE
* SENDER_ADDRESS_TYPE = SPACE
COMMIT_WORK = 'X'
IMPORTING
SENT_TO_ALL = ld_sent_to_all
TABLES
PACKING_LIST = lt_packing_list
CONTENTS_BIN = lt_contents_bin
CONTENTS_TXT = lt_contents_txt
RECEIVERS = lt_receivers
EXCEPTIONS
TOO_MANY_RECEIVERS = 1
DOCUMENT_NOT_SENT = 2
DOCUMENT_TYPE_NOT_EXIST = 3
OPERATION_NO_AUTHORIZATION = 4
PARAMETER_ERROR = 5
X_ERROR = 6
ENQUEUE_ERROR = 7
OTHERS = 8.
IF sy-subrc NE 0.
MESSAGE 'Error al enviar mail' TYPE 'W'.

else.
MESSAGE 'Mensaje enviado' TYPE 'W'.
ENDIF.

ENDLOOP.

ENDFORM.

CESARCAES01
06/02/14, 20:23:17
donde gt_report-pay_receipt es una variable de tipo tline de 132. por eso hago la conversion de 132 a 255. pero no me llega el pdf..

Angel2000
06/02/14, 21:50:55
Quiero hacer de su conocimiento que Waldo Alejandro Rivera Toscano, ofrece servicio de servidores en renta los cuales despues de 4 semana desactiva y se da por perdido en su correo:sapidesmexico@gmail.com, de la misma forma ofrece material SAP en diferentes modulos los cuales son falsos.

CESARCAES01
07/02/14, 13:34:58
Ayuda por favor...

Ripper87
07/02/14, 14:39:53
Me puedes explicar esta parte?

" Contenido del mensaje LT_CONTENTS_TXT
DO.
" Se debe crear una constante por cada linea.
" El nombre debe comenzar por lo indicado en GC_BEG_LINE_NAME y seguidamente un número consecutivo
MOVE sy-index TO ld_index. CONDENSE ld_index.
CONCATENATE gc_beg_line_name ld_index INTO ld_lname.
ASSIGN (ld_lname) TO <lfs_line>.
IF <lfs_line> IS ASSIGNED.
APPEND <lfs_line> TO lt_contents_txt.
UNASSIGN <lfs_line>.
ELSE.
EXIT.
ENDIF.
ENDDO.

Como alimentas el texto?
Quien es GC_BEG_LINE_NAME?
Te has asegurado por el debugger que la tabla lt_contents_txt se llena correctamente?

CESARCAES01
07/02/14, 14:48:37
en esa parte del código estoy llenando el contenido del email, sin tocar el adjunto. es decir el cuerpo del correo. las constantes que se piden crear es un cmentario que le hago al codigo a futuro, para completar los datos de la tabla alv. el correo llega perfecto. solo el adjunto siempre llega con 1k.


GC_BEG_LINE_NAME la estoy usando como formato para definir el nombre de las constantes a futuro.

y si se recorre con exito la txt.

CESARCAES01
07/02/14, 14:58:10
El problema creo que esta en el lt_contents_bin, parámetro en el que paso el pdf al al función que envía el correo, lo extraño es que pruebo en esa parte del código con la función DOWNLOAD, y si me descarga el recibo de pago perfecto. pero la función SO_DOCUMENT_SEND_API1 no se lleva el pdf.

Ripper87
07/02/14, 15:56:35
Ok, disculpa de verdad habia entendido mal el problema, no se porque entendí que era el texto lo que te fallaba y no el adjunto.

Bueno, no soy experto, estoy tratando de ver diferencias con un codigo que yo ya he usado y se que ha funcionado bien, de las pocas diferencias que vi prueba a ver con esto:


Tu tienes unas líneas con este código:


READ TABLE lt_packing_list ASSIGNING <lfs_packing_list> INDEX 2.
DESCRIBE TABLE lt_contents_bin LINES <lfs_packing_list>-body_num.


Comentalas, y agrega este código luego de tu llamada a la función SX_TABLE_LINE_WIDTH_CHANGE:



CALL FUNCTION 'SX_TABLE_LINE_WIDTH_CHANGE'
EXPORTING
line_width_src = 132
line_width_dst = 255
TABLES
CONTENT_IN = <lfs_report>-pay_receipt
CONTENT_OUT = lt_contents_bin
EXCEPTIONS
err_line_width_src_too_long = 1
err_line_width_dst_too_long = 2
err_conv_failed = 3
OTHERS = 4.

********* Agregas esto aca: *********
DATA: tot_line TYPE i.
FIELD-SYMBOLS: <fs_bin> TYPE solisti1.

DESCRIBE TABLE lt_contents_bin LINES tot_line.
READ TABLE lt_contents_bin ASSIGNING <fs_bin> INDEX tot_line.

READ TABLE lt_packing_list ASSIGNING <lfs_packing_list> INDEX 2.

<lfs_packing_list>-body_num = ( tot_line - 1 ) * 255 + strlen( <fs_bin> ).


Esperemos que ese sea el problema.

CESARCAES01
07/02/14, 17:54:48
hola, excelente ahora si me llega el pdf, supuestamentre tiene informacion, pero cuando lo voy a abrir me dice que esta malo.

CESARCAES01
07/02/14, 17:57:44
hola. el correo llega ahora con data, supuestamente tiene info, pero cuando la voy a abrir dice q esta dañado.