发送带有附件pdf文件的电子邮件,显示损坏。

2020-08-21 18:44发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


尊敬的专家,

当我尝试通过Smart从pdf格式发送电子邮件时,pdf文件损坏无法打开。

有人可以帮助我吗? 下面我提到了源代码。

谢谢

塔里库尔·阿拉姆医师

源代码:

--------------------------

功能Z_SEND_MAIL。
*" --------------------------------------- -------------------------------
数据:mail_list TYPE char50 OCCURS 0带标题行。

数据:w_doctxt(20),
w_subjnam(100),
w_attcnam(100),
date(10)。

数据:gd_subject喜欢sodocchgi1-obj_descr,
it_mess_bod 与标题行类似的solisti1占位0,
it_mess_att与标题行类似的solisti1,占位0,
gd_sender_type,就像soextreci1-adr_typ,
gd_attachment_desc TYPE so_obj_nam, *假脱机到PDF的转换
数据:gd_spool_nr像tsp01-rqident,
gd_destination像rlgrap文件名,
gd_bytecount像tst01-dsize,
gd_buffer TYPE字符串。

* 作业运行时参数
数据:gd_eventid像tbtcm-eventid,
gd_eventparm像tbtcm-eventparm,
gd_external_program_active像tbtcm-xpgactive,
gd_jobcount像tbtcm-jobcount,
gd_jobname像tbtcm-jobcount,
gd_stepcount喜欢tbtcm-stepcount,
gd_e rror TYPE sy-subrc,
gd_reciever TYPE sy-subrc。
数据:
i_pdf LIKE tline OCCURS 100带标题行,
i_pdfout LIKE tline OCCURS 100带标题行,
w_binsize TYPE i ,
gd_recsize TYPE i,
w_endda像hrpy_rgdir-fpend。
数据:ld_error TYPE sy-subrc,
ld_reciever TYPE sy-subrc,
ld_mtitle像sodocchgi1-obj_descr,
< br> ld_email LIKE somlreci1-receiver,
ld_format类型so_obj_tp,
ld_attdescription TYPE so_obj_nam,
ld_attfilename TYPE so_obj_des,
ld_sender_address LIKE soextreci1-renders,
ld_address_ad ld_receiver LIKE sy-subrc。

数据:t_packing_list LIKE sopcklsti1带有标题行的OCCURS 0,
t_contents LIKE solisti1 OCCURS 0带有标题行,
t_receivers LIKE somlreci1 OCCURS 0带有HEADER LINE t_attachment LIKE solisti1 OCCURS 0,带有标题行,
t_object_header LIKE solisti1 OCCURS 0,带有标题行,
w_cnt TYPE i,
w_sent_all(1)TYPE c,
w_doc_data LIKE sod occhgi1。

数据:t_tvarvc的开始OCCURS 0,
e_mail类似tvarvc-low,
t_tvarvc的结尾。

如果wa_job_output_info []不初始化。
致电 功能'CONVERT_OTF'
导出
格式='PDF'
max_linewidth = 132
导入
bin_filesize = w_binsize
表格
otf = wa_job_output_info
行= i_pdf
>例外
err_max_linewidth = 1
err_format = 2
err_conv_not_possible = 3
err_bad_otf = 4
其他=5。
如果sy-subrc <>0。
消息ID sy -msgid类型sy-msgty编号sy-msgno
与sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。
ENDIF。
ENDIF。


*将线轴转换为 pdf
免费gd_buffer。
在i_pdf上循环。
TRANSLATE i_pdf使用'〜'。
CONCATENATE gd_buffer i_pdf到gd_buffer。
ENDLOOP。

TRANSLATE gd_buffer使用'〜' 。
免费it_mess_att。
做。
it_mess_att = gd_buffer。
追加it_mess_att。
将gd_buffer左移255个位置。
如果gd_buffer是INITIAL。
退出。
> ENDIF。
ENDDO。" 将假脱机转换为PDF

*处理邮件
描述表it_mess_att LINES gd_recsize。
检查gd_recsize>0。


不检查(mail_id IS INITIAL)。
刷新it_mess_bod。

gd_subject =标题。

关联Attach_name日期INTO w_attcnam。
gd_attachment_desc = w_attcnam。 "'总帐科目对帐单'。
CONCATENATE'attach_name'''INTO gd_attachment_name。

如果mail_body []是INITIAL。

CONCATENATE text1 w_doctxt''INTO it_mess_bod-line SEPARATED 按空格。
APPEND it_mess_bod。
清除it_mess_bod。"空白行
APPEND it_mess_bod。

it_mess_bod = text2。"'我们很高兴通知您此人(
APPEND it_mess_bod。

清除it_mess_bod。"空白行
APPEND it_mess_bod。

it_mess_bod = text3。
附加it_mess_bod。

清除it_mess_bod。 "空白行
APPEND it_mess_bod。

it_mess_bod-line = text4。
APPEND it_mess_bod。

清除it_mess_bod。"空白行
APPEND it_mess_bod。


> it_mess_bod-line = text5。 ""这是系统生成的电子邮件。无需回复。"。
APPEND it_mess_bod。

清除it_mess_bod。"空白行
APPEND it_mess_bod。
it_mess_bod-line = text6。 "''这是系统生成的电子邮件。无需回复。'。
APPEND it_mess_bod。
ELSE。
LOOP AT mail_body。
it_mess_bod-line = mail_body-line。
APPEND it_mess_bod 。
ENDLOOP。
ENDIF。

gd_sender_type ='INT'。
* ENDIF。
ld_email =邮件ID。" t_tvarvc-e_mail。
ld_mtitle = gd_subject。" p_mtitle 。
ld_format ='PDF'。" = p_format。
ld_attdescription = gd_attachment_desc。 " = p_attdescription。
ld_attfilename = gd_attachment_name。" p_filename。
ld_sender_address = 'abu.rayhan@ssgbd.com '。
ld_sender_address_type ='INT'。 " p_sender_addres_type。

*填写文档数据。
w_doc_data-doc_size =1。

*填充主题/通用消息属性
w_doc_data-obj_langu = sy-langu。 br> w_doc_data-obj_name ='SAPRPT'。
w_doc_data-obj_descr = ld_mtitle。
w_doc_data-sensitiveivty ='F'。

*填写文档数据并获取附件大小
CLEAR w_doc_data。
读取表it_​​mess_att索引w_cnt。
w_doc_data-doc_size =
(w_cnt-1)* 255 + strlen(it_mess_att)。
w_doc_data-obj_langu = sy-langu。
w_doc_data-obj obj_name ='SAPRPT'。
w_doc_data-obj_descr = ld_mtitle。
w_doc_data-sensitiveivty ='F'。
CLEAR t_attachment。
REFRESH t_attachment。
t_attachment [] = it_mess_att []。< br>
*描述消息的正文
CLEAR t_packing_list。
REFRESH t_packing_list。
t_packing_list-transf_bin =空间。
t_packing_list-head_start =1。
t_packing_list-head_num = 0 。
t_packing_list-body_start =1。
描述表it_mess_bod线t_packing_li st-body_num。
t_packing_list-doc_type ='RAW'。
APPEND t_packing_list。

*创建附件通知
t_packing_list-transf_bin ='X'。
t_packing_list-head_start = 1 。
t_packing_list-head_num =1。
t_packing_list-body_start =1。

描述表t_attachment线t_packing_list-body_num。
t_packing_list-doc_type = ld_format。
t_packing_list-obj_descr = 。
t_packing_list-obj_name = ld_attfilename。
t_packing_list-doc_size = t_packing_list-body_num * 255.
APPEND t_packing_list。

*添加收件人电子邮件地址
CLEAR t_receivers。
刷新t_receivers。

t_receivers-receiver = mail_id。
t_receivers-rec_type ='U'。
t_receivers-com_type ='INT'。
t_receivers-notif_del ='X'。
> t_receivers-notif_ndel ='X'。
附加t_receivers。

* t_receivers-receiver = 'moshiur@ssgbd.com '。
* t_receivers-rec_type ='U'。
* t_receivers-com_type ='INT'。
* t_receivers-notif_del ='X'。
* t_receivers-notif_ndel ='X'。* APPEND t_receivers。



通话功能'SO_DOCUMENT_SEND_API1'
导出< br> document_data = w_doc_data
put_in_outbox ='X'
发件人地址= ld_sender_address
sender_address_type = ld_sender_address_type
commit_work ='X'
IMPORTING
send_to_all = w_sent_all
TABLES packing_list = t_packing_list
contents_bin = t_attachment
contents_txt = it_mess_bod" it_message
接收者= t_receivers
例外
too_many_receivers = 1
document_not_sent = 2
document_type_notization_exist = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
其他=8。

*填充zerror返回码
ld_error = sy-subrc。
* rc = sy-subrc。
*填充zreceiver返回代码
在t_receivers上循环。
ld_receiver = t_receivers-retrn_code。
ENDLOOP。
* ENDLOOP。

ENDFUNCTION。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


尊敬的专家,

当我尝试通过Smart从pdf格式发送电子邮件时,pdf文件损坏无法打开。

有人可以帮助我吗? 下面我提到了源代码。

谢谢

塔里库尔·阿拉姆医师

源代码:

--------------------------

功能Z_SEND_MAIL。
*" --------------------------------------- -------------------------------
数据:mail_list TYPE char50 OCCURS 0带标题行。

数据:w_doctxt(20),
w_subjnam(100),
w_attcnam(100),
date(10)。

数据:gd_subject喜欢sodocchgi1-obj_descr,
it_mess_bod 与标题行类似的solisti1占位0,
it_mess_att与标题行类似的solisti1,占位0,
gd_sender_type,就像soextreci1-adr_typ,
gd_attachment_desc TYPE so_obj_nam, *假脱机到PDF的转换
数据:gd_spool_nr像tsp01-rqident,
gd_destination像rlgrap文件名,
gd_bytecount像tst01-dsize,
gd_buffer TYPE字符串。

* 作业运行时参数
数据:gd_eventid像tbtcm-eventid,
gd_eventparm像tbtcm-eventparm,
gd_external_program_active像tbtcm-xpgactive,
gd_jobcount像tbtcm-jobcount,
gd_jobname像tbtcm-jobcount,
gd_stepcount喜欢tbtcm-stepcount,
gd_e rror TYPE sy-subrc,
gd_reciever TYPE sy-subrc。
数据:
i_pdf LIKE tline OCCURS 100带标题行,
i_pdfout LIKE tline OCCURS 100带标题行,
w_binsize TYPE i ,
gd_recsize TYPE i,
w_endda像hrpy_rgdir-fpend。
数据:ld_error TYPE sy-subrc,
ld_reciever TYPE sy-subrc,
ld_mtitle像sodocchgi1-obj_descr,
< br> ld_email LIKE somlreci1-receiver,
ld_format类型so_obj_tp,
ld_attdescription TYPE so_obj_nam,
ld_attfilename TYPE so_obj_des,
ld_sender_address LIKE soextreci1-renders,
ld_address_ad ld_receiver LIKE sy-subrc。

数据:t_packing_list LIKE sopcklsti1带有标题行的OCCURS 0,
t_contents LIKE solisti1 OCCURS 0带有标题行,
t_receivers LIKE somlreci1 OCCURS 0带有HEADER LINE t_attachment LIKE solisti1 OCCURS 0,带有标题行,
t_object_header LIKE solisti1 OCCURS 0,带有标题行,
w_cnt TYPE i,
w_sent_all(1)TYPE c,
w_doc_data LIKE sod occhgi1。

数据:t_tvarvc的开始OCCURS 0,
e_mail类似tvarvc-low,
t_tvarvc的结尾。

如果wa_job_output_info []不初始化。
致电 功能'CONVERT_OTF'
导出
格式='PDF'
max_linewidth = 132
导入
bin_filesize = w_binsize
表格
otf = wa_job_output_info
行= i_pdf
>例外
err_max_linewidth = 1
err_format = 2
err_conv_not_possible = 3
err_bad_otf = 4
其他=5。
如果sy-subrc <>0。
消息ID sy -msgid类型sy-msgty编号sy-msgno
与sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。
ENDIF。
ENDIF。


*将线轴转换为 pdf
免费gd_buffer。
在i_pdf上循环。
TRANSLATE i_pdf使用'〜'。
CONCATENATE gd_buffer i_pdf到gd_buffer。
ENDLOOP。

TRANSLATE gd_buffer使用'〜' 。
免费it_mess_att。
做。
it_mess_att = gd_buffer。
追加it_mess_att。
将gd_buffer左移255个位置。
如果gd_buffer是INITIAL。
退出。
> ENDIF。
ENDDO。" 将假脱机转换为PDF

*处理邮件
描述表it_mess_att LINES gd_recsize。
检查gd_recsize>0。


不检查(mail_id IS INITIAL)。
刷新it_mess_bod。

gd_subject =标题。

关联Attach_name日期INTO w_attcnam。
gd_attachment_desc = w_attcnam。 "'总帐科目对帐单'。
CONCATENATE'attach_name'''INTO gd_attachment_name。

如果mail_body []是INITIAL。

CONCATENATE text1 w_doctxt''INTO it_mess_bod-line SEPARATED 按空格。
APPEND it_mess_bod。
清除it_mess_bod。"空白行
APPEND it_mess_bod。

it_mess_bod = text2。"'我们很高兴通知您此人(
APPEND it_mess_bod。

清除it_mess_bod。"空白行
APPEND it_mess_bod。

it_mess_bod = text3。
附加it_mess_bod。

清除it_mess_bod。 "空白行
APPEND it_mess_bod。

it_mess_bod-line = text4。
APPEND it_mess_bod。

清除it_mess_bod。"空白行
APPEND it_mess_bod。


> it_mess_bod-line = text5。 ""这是系统生成的电子邮件。无需回复。"。
APPEND it_mess_bod。

清除it_mess_bod。"空白行
APPEND it_mess_bod。
it_mess_bod-line = text6。 "''这是系统生成的电子邮件。无需回复。'。
APPEND it_mess_bod。
ELSE。
LOOP AT mail_body。
it_mess_bod-line = mail_body-line。
APPEND it_mess_bod 。
ENDLOOP。
ENDIF。

gd_sender_type ='INT'。
* ENDIF。
ld_email =邮件ID。" t_tvarvc-e_mail。
ld_mtitle = gd_subject。" p_mtitle 。
ld_format ='PDF'。" = p_format。
ld_attdescription = gd_attachment_desc。 " = p_attdescription。
ld_attfilename = gd_attachment_name。" p_filename。
ld_sender_address = 'abu.rayhan@ssgbd.com '。
ld_sender_address_type ='INT'。 " p_sender_addres_type。

*填写文档数据。
w_doc_data-doc_size =1。

*填充主题/通用消息属性
w_doc_data-obj_langu = sy-langu。 br> w_doc_data-obj_name ='SAPRPT'。
w_doc_data-obj_descr = ld_mtitle。
w_doc_data-sensitiveivty ='F'。

*填写文档数据并获取附件大小
CLEAR w_doc_data。
读取表it_​​mess_att索引w_cnt。
w_doc_data-doc_size =
(w_cnt-1)* 255 + strlen(it_mess_att)。
w_doc_data-obj_langu = sy-langu。
w_doc_data-obj obj_name ='SAPRPT'。
w_doc_data-obj_descr = ld_mtitle。
w_doc_data-sensitiveivty ='F'。
CLEAR t_attachment。
REFRESH t_attachment。
t_attachment [] = it_mess_att []。< br>
*描述消息的正文
CLEAR t_packing_list。
REFRESH t_packing_list。
t_packing_list-transf_bin =空间。
t_packing_list-head_start =1。
t_packing_list-head_num = 0 。
t_packing_list-body_start =1。
描述表it_mess_bod线t_packing_li st-body_num。
t_packing_list-doc_type ='RAW'。
APPEND t_packing_list。

*创建附件通知
t_packing_list-transf_bin ='X'。
t_packing_list-head_start = 1 。
t_packing_list-head_num =1。
t_packing_list-body_start =1。

描述表t_attachment线t_packing_list-body_num。
t_packing_list-doc_type = ld_format。
t_packing_list-obj_descr = 。
t_packing_list-obj_name = ld_attfilename。
t_packing_list-doc_size = t_packing_list-body_num * 255.
APPEND t_packing_list。

*添加收件人电子邮件地址
CLEAR t_receivers。
刷新t_receivers。

t_receivers-receiver = mail_id。
t_receivers-rec_type ='U'。
t_receivers-com_type ='INT'。
t_receivers-notif_del ='X'。
> t_receivers-notif_ndel ='X'。
附加t_receivers。

* t_receivers-receiver = 'moshiur@ssgbd.com '。
* t_receivers-rec_type ='U'。
* t_receivers-com_type ='INT'。
* t_receivers-notif_del ='X'。
* t_receivers-notif_ndel ='X'。* APPEND t_receivers。



通话功能'SO_DOCUMENT_SEND_API1'
导出< br> document_data = w_doc_data
put_in_outbox ='X'
发件人地址= ld_sender_address
sender_address_type = ld_sender_address_type
commit_work ='X'
IMPORTING
send_to_all = w_sent_all
TABLES packing_list = t_packing_list
contents_bin = t_attachment
contents_txt = it_mess_bod" it_message
接收者= t_receivers
例外
too_many_receivers = 1
document_not_sent = 2
document_type_notization_exist = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
其他=8。

*填充zerror返回码
ld_error = sy-subrc。
* rc = sy-subrc。
*填充zreceiver返回代码
在t_receivers上循环。
ld_receiver = t_receivers-retrn_code。
ENDLOOP。
* ENDLOOP。

ENDFUNCTION。

付费偷看设置
发送
6条回答
歪着头看世界
1楼-- · 2020-08-21 19:16

嗨,

  1. 建议在旧的(1998!)功能模块SO_DOCUMENT_SEND_API1上使用CL_BCS类来发送电子邮件。 原因是使用OOP可以更轻松地进行开发,具有更好的可读性等。
  2. 我不明白您在" *将线轴转换为pdf"部分中的工作是什么? 您应该在参数bin_file(xstring)中的CONVERT_OTF中获得非常好的PDF。 重要提示-切记正确的xstring大小(PDF文件的bin大小)!
空代码
2楼-- · 2020-08-21 18:54

Hi

附件是否在电子邮件中,但请打开它 显示已损坏-无法打开??

您能显示确切的问题吗?

小c菟菟
3楼-- · 2020-08-21 18:51

尊敬的Venkat,

感谢您的回复。 是的,我们可以发送邮件,但附件pdf无法打开。

最好的问候

医学博士。 Tariqul Alam

哎,真难
4楼-- · 2020-08-21 19:15

请使用CODE按钮设置代码格式,以便以更加用户友好的格式(彩色)显示代码。

Climb_Ma
5楼-- · 2020-08-21 19:02

损坏通常是由于"在电子邮件中"传递的显式长度不正确。 例如:如果PDF为13437字节,并且您指示大小为14000字节,则有可能损坏消息PDF。

正确的值由CONVERT_OTF的参数BIN_FILESIZE给出,但您没有

建议使用CL_BCS而不是SO_DOCUMENT_SEND_API1。 对于PDF,您应该更喜欢通过ADD_ATTACHMENT方法使用参数I_ATTACHMENT_SIZE和I_ATT_CONTENT_HEX发送PDF。 后一个参数是XSTRING类型,您应该从参数BIN_FILE(而不是LINES)中检索PDF XSTRING。

我让您在论坛中搜索所有这些建议的代码段。

wang628962
6楼-- · 2020-08-21 18:54
# p#

请使用COMMENT按钮进行评论,提问,添加详细信息等,答案仅是提出解决方案,在答案区域的右侧显示SAP文本。

一周热门 更多>