2. Contents
Kurulum....................................................................................................................................... 3
Exchange / Relay Ayarları............................................................................................................... 7
Şirket İçi E-Posta Senaryosu ....................................................................................................... 7
Şirket Dışı E-Posta Senaryosu (Relay) .......................................................................................... 7
Exchange Üzerinde Doğrudan Relay Ayarı................................................................................ 8
Microsoft IIS Üzerinden RelayAyarları..................................................................................... 8
Faydalı İpuçları.............................................................................................................................14
ÖrnekKodlar................................................................................................................................14
E-Posta İle Mesaj + Ek Göndermek.............................................................................................14
E-Posta İle Mesaj + Ek Göndermek (<BR> İle Satır Kırarak) ..........................................................18
E-Posta İle SAP Ekranına Link Göndermek..................................................................................22
Bir SmartForm Çıktısını PDF Olarak E-Mail İle Göndermek...........................................................24
Örnek SAP Programları..........................................................................................................24
CONVERT_OTF Fonksiyonunu Kullanmak................................................................................24
Hatalar ve Çözümler.....................................................................................................................28
Internal error: SO_OBJECT_MIME_GET Exception: 2...................................................................28
PDF Türkçe Karakter Problemi...................................................................................................28
Works Cited.................................................................................................................................28
5. Node In Use
Bu tık, işleminaktif olduğunu göstermektedir.
Mail Host & Port
KullanılacakSMTPsunucusununadresi ve portuburayagirilecektir. SMTPsunucusuylailgili
Relayayarları içinlütfen Exchange /RelayAyarlarıbölümünebakın.
Code Page
Bu bölümde,SAP’de geçerli Code Page değerini girin.Türkçe içinISO-8859-9veyaWindows-
1254 kullanılabilir.
Bu bilgileri girdiktensonra,“Internet”seçeneğininyanındaki “SET”düğmesine tıklıyoruz.
7. Exchange / Relay Ayarları
Şirket İçi E-Posta Senaryosu
Eğer E-Postailetileri sadece şirketteki E-Postaadresleri arasındagönderilecekse,Exchange’in
varsayılanayarları herhangi birRelayayarlamasıyapmadanbuişleme izinverecektir.Budurumda,
Kurulumbaşlığındaki Mail Host& Port bölümüne doğrudandoğruyaExchange sunucusununadresi
girilebilir.Başkabirayara gerekyoktur.
Şirket Dışı E-Posta Senaryosu (Relay)
SAP’ninE-Postagöndermemekanizması,SMTPAuthenticationdesteklememektedir1
.Exchange
sunucularıise,(varsayılanayarlarında) Relay(şirketdışıE-Posta) gönderimisözkonusuolduğunda
mutlakaSMTP Authenticationistemektedir.Buyüzden;yaExchange sunucusuüzerinde SAP’den
geleniletilerdeAuthenticationistemeyeceği şekilde birayaryapılmalıdır,yada araya SMTP
AuthenticationyapabilecekbirIISSMTPservisi kurulmalıdır.
Bu Relayalternatiflerinive kurulumdetaylarınıaşağıdabulabilirsiniz.
1 Detaylar için OSS’e girip 782611 numaralı nota bakabilirsiniz.
SAP SCOT
(Authentication
göndermiyor)
Exchange
(Authentication'a
bakmıyor)
8. ExchangeÜzerindeDoğrudanRelayAyarı
Eğer müşterininkendi Exchange sunucusuvarsa, KurulumbaşlığındakiMail Host& Port bölümüne
doğrudandoğruyaExchange sunucusununadresini girebilirsiniz.Exchange’iise,SAP’dengelecekolan
RelayiletilerindeAuthenticationistemeyeceği şekilde ayarlamalısınız.Buayari şöyle yapılmaktadır:
Exchange SystemManageraltindanServer`imizaulasiyoruz. Bununaltindaki protocolsbolumunden
smtpdetayinagiriyoruz. DefaultSmtpVirtual Serverpropertiesicinde accessmenualtindarelay
restrictionsbolumune girerekSAPserveripadresini bulisteyeekliyoruz(onlythe listbelowsecenegi
checkli olacaksekilde).
MicrosoftIIS ÜzerindenRelayAyarları
SAP SCOT
(Authentication
göndermiyor)
Exchange
(Authentication'a
bakmıyor)
SAP SCOT
(Authentication
göndermiyor)
IIS SMTP
(Authentication
ekliyor)
Exchange
(Authentication'a
bakıyor)
9. Dışarıdan Hostinghizmeti aldığıiçinExchange ayarlarınadoğrudanmüdahele şansıolmayanbirfirma,
şirketinağıüzerindekibirWindows2003 makinasınaSMTP servisi kurulabilir.SAP,E-Postailetilerini
bu servise gönderir,servisise şirketindışarıdaki gerçekSMTPsunucusuna(Authenticationyaparak)
Relayeder. Kurulumbaşlığındaki Mail Host & Port bölümüne Exchange’inadresini değil,aradaki IIS
makinasınınadresi girilmelidir.IISayarlarınıaşağıdabulabilirsiniz.
Herhangi birbilgisayara IISkurulur. Bumakina,sürekli açıkkalabilecekbirmakinaolmalıdır.Söz
konusumakinakapanacakolursaE-Postakaybı olmaz,ancakgönderimlerkesintiyeuğrar.Kurulum
sırasında SMTP servisi Seçilmelidir.
-start-settings-control panel-AdministrativeTools-IISçifttıklanır.
iisyönetimkonsolunagelip“DefaultSMTPVirtual Server”altındabulunan“Domains”üzerine gelip
sağ tıkladıktansonra Newdomainseçeneği tıklanır
Remote SeçeneğiniSeçipNextile ilerleyiniz
10. Burada hangi uzantılı adreslere mail gönderilecekise”*.com”,“*.org.”, “*.net” vb.
ayrı ayrı girilmelidir.
Eklediğimizdomainüzerinde sağtuşözelliklersekmesine geliyoruz
“General”sekmesinde selectincomingmail tobe relayedforyourremote domainseçeneğini
seçiyoruz
forwardall mail tos mart hostalanına aslıdomainismimizi yazıyoruz(örnek:limak.com.tr)
14. Ok diyerekişlemtamamlanır
Sonuç: yaptğımızbu ayarlar sonucundaSapdenmail gönderildiği zamanmail,ilkolarak
smtpservisini kurduğumuzmakinayagelecekserviskendisinegelenmailigerçek mail server’aRelay
edecektir.
Faydalı İpuçları
Sırada bekleyen/gönderilemeyenE-Postailetileri,SOSTişlemkodundaizlenebilir.Aynıyerde,
gönderilemeyeniletilertekrargönderilebilir.
Örnek Kodlar
E-Posta İle Mesaj + Ek Göndermek
function zaswf_send_msg_as_email.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(I_BNAME) TYPE XUBNAME
*" REFERENCE(I_MSGID) TYPE SY-MSGID
*" REFERENCE(I_MSGNO) TYPE SY-MSGNO
*" REFERENCE(I_MSGV1) OPTIONAL
*" REFERENCE(I_MSGV2) OPTIONAL
*" REFERENCE(I_MSGV3) OPTIONAL
15. *" REFERENCE(I_MSGV4) OPTIONAL
*" REFERENCE(I_MESAP) TYPE ZASWF_MESAP OPTIONAL
*" REFERENCE(I_MEMAI) TYPE ZASWF_MEMAI OPTIONAL
*" REFERENCE(I_ATTYP) TYPE SOODK-OBJTP OPTIONAL
*" REFERENCE(I_ATSUB) TYPE SOOD-OBJDES OPTIONAL
*" REFERENCE(I_ATTXT) TYPE SOLI_TAB OPTIONAL
*"----------------------------------------------------------------------
data:
lt_cont type standard table of solisti1 with header line,
lt_rece type standard table of somlreci1 with header line,
lf_docdat type sodocchgi1,
begin of lf_split,
len type i,
pos1 type i,
pos2 type i,
plen type i,
con(1),
end of lf_split,
lv_class type dokhl-object,
lv_msgnr type char3,
lv_langu type char1,
lv_text type string.
data:
lo_email type ref to cl_bcs,
lo_docum type ref to cl_document_bcs,
lo_sende type ref to cl_sapuser_bcs,
lo_recip type ref to if_recipient_bcs,
lt_attx type soli_tab,
lt_text type soli_tab with header line,
lv_subj type so_obj_des,
lv_atsiz type sood-objlen,
lv_statu type bcs_stml,
lv_rstat type bcs_rqst,
lv_saddr type adr6-smtp_addr,
lv_uname type uname.
refresh:
lt_cont,
lt_rece.
lf_docdat-obj_name = 'SAPOFFICE'.
call function 'MESSAGE_TEXT_BUILD'
exporting
msgid = i_msgid
msgnr = i_msgno
msgv1 = i_msgv1
msgv2 = i_msgv2
msgv3 = i_msgv3
msgv4 = i_msgv4
importing
message_text_output = lf_docdat-obj_descr.
16. lv_class = i_msgid.
lv_msgnr = i_msgno.
lv_langu = sy-langu.
call function 'SVMCRT_INT_GETMSG_LONGTEXT'
exporting
msg_class = lv_class
msg_nr = lv_msgnr
language = lv_langu
importing
text = lv_text.
replace all occurrences of:
'&V1&' in lv_text with i_msgv1,
'&V2&' in lv_text with i_msgv2,
'&V3&' in lv_text with i_msgv3,
'&V4&' in lv_text with i_msgv4.
clear lf_split.
lf_split-con = 'X'.
lf_split-len = strlen( lv_text ).
do.
lf_split-pos1 = lf_split-pos2.
add 255 to lf_split-pos2.
if lf_split-pos2 gt lf_split-len.
lf_split-pos2 = lf_split-len.
clear lf_split-con.
endif.
lf_split-plen = lf_split-pos2 - lf_split-pos1.
lt_cont-line = lv_text+lf_split-pos1(lf_split-plen).
append lt_cont.
if lf_split-con is initial.
exit.
endif.
enddo.
if i_memai eq 'X'.
clear lt_rece.
select single smtp_addr into lt_rece-receiver
from adr6
where addrnumber eq ( select addrnumber from usr21
where bname eq i_bname )
and persnumber eq ( select persnumber from usr21
where bname eq i_bname ).
lt_rece-rec_type = 'U'.
if not lt_rece-receiver is initial.
append lt_rece.
endif.
endif.
if i_mesap eq 'X'.
clear lt_rece.
lt_rece-receiver = i_bname.
lt_rece-rec_type = 'B'.
18. i_copy = ' '
i_blind_copy = ' '
i_no_forward = ' '.
endloop.
move 'N' to lv_rstat.
lv_statu = lv_rstat.
call method lo_email->set_status_attributes
exporting
i_requested_status = lv_rstat
i_status_mail = lv_statu.
call method lo_email->send( ).
commit work and wait.
endfunction.
E-Posta İle Mesaj + Ek Göndermek (<BR> İle Satır Kırarak)
FUNCTION zsp_dms_sendmail.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(I_EMAIL) TYPE AD_SMTPADR
*" REFERENCE(I_MSGID) TYPE SY-MSGID
*" REFERENCE(I_MSGNO) TYPE SY-MSGNO
*" REFERENCE(I_MSGV1) OPTIONAL
*" REFERENCE(I_MSGV2) OPTIONAL
*" REFERENCE(I_MSGV3) OPTIONAL
*" REFERENCE(I_MSGV4) OPTIONAL
*" REFERENCE(I_ATTYP) TYPE SOODK-OBJTP OPTIONAL
*" REFERENCE(I_ATSUB) TYPE SOOD-OBJDES OPTIONAL
*" REFERENCE(I_ATTXT) TYPE SOLI_TAB OPTIONAL
*" REFERENCE(I_ATTY2) TYPE SOODK-OBJTP OPTIONAL
*" REFERENCE(I_ATSU2) TYPE SOOD-OBJDES OPTIONAL
*" REFERENCE(I_ATTX2) TYPE SOLI_TAB OPTIONAL
*"----------------------------------------------------------------------
DATA:
lt_cont TYPE STANDARD TABLE OF solisti1 WITH HEADER LINE,
lt_rece TYPE STANDARD TABLE OF somlreci1 WITH HEADER LINE,
lf_docdat TYPE sodocchgi1,
BEGIN OF lf_split,
len TYPE i,
pos1 TYPE i,
pos2 TYPE i,
plen TYPE i,
con(1),
spc(1),
END OF lf_split,
19. lv_class TYPE dokhl-object,
lv_msgnr TYPE char3,
lv_langu TYPE char1,
lv_text TYPE string.
DATA:
lo_email TYPE REF TO cl_bcs,
lo_docum TYPE REF TO cl_document_bcs,
lo_sende TYPE REF TO cl_sapuser_bcs,
lo_recip TYPE REF TO if_recipient_bcs,
lt_attx TYPE soli_tab,
lt_text TYPE soli_tab WITH HEADER LINE,
lv_subj TYPE so_obj_des,
lv_atsiz TYPE sood-objlen,
lv_statu TYPE bcs_stml,
lv_rstat TYPE bcs_rqst,
lv_saddr TYPE adr6-smtp_addr,
lv_uname TYPE uname.
REFRESH:
lt_cont,
lt_rece.
lf_docdat-obj_name = 'SAPOFFICE'.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = i_msgid
msgnr = i_msgno
msgv1 = i_msgv1
msgv2 = i_msgv2
msgv3 = i_msgv3
msgv4 = i_msgv4
IMPORTING
message_text_output = lf_docdat-obj_descr.
lv_class = i_msgid.
lv_msgnr = i_msgno.
lv_langu = sy-langu.
CALL FUNCTION 'SVMCRT_INT_GETMSG_LONGTEXT'
EXPORTING
msg_class = lv_class
msg_nr = lv_msgnr
language = lv_langu
IMPORTING
text = lv_text.
REPLACE ALL OCCURRENCES OF:
'&V1&' IN lv_text WITH i_msgv1,
20. '&V2&' IN lv_text WITH i_msgv2,
'&V3&' IN lv_text WITH i_msgv3,
'&V4&' IN lv_text WITH i_msgv4,
'<BR>' IN lv_text WITH cl_abap_char_utilities=>newline,
'<br>' IN lv_text WITH cl_abap_char_utilities=>newline,
'<Br>' IN lv_text WITH cl_abap_char_utilities=>newline,
'<bR>' IN lv_text WITH cl_abap_char_utilities=>newline.
CLEAR lf_split.
lf_split-len = STRLEN( lv_text ).
DO.
IF lf_split-pos1 GE lf_split-len.
IF NOT lt_cont-line IS INITIAL.
APPEND lt_cont.
ENDIF.
EXIT.
ENDIF.
lf_split-con = lv_text+lf_split-pos1(1).
IF lf_split-con EQ cl_abap_char_utilities=>newline.
APPEND lt_cont.
CLEAR lt_cont.
ELSE.
if lf_split-con is initial.
lf_split-spc = 'X'.
else.
if lf_split-spc is initial.
CONCATENATE lt_cont-line lf_split-con INTO lt_cont-line.
else.
CONCATENATE lt_cont-line ` ` lf_split-con INTO lt_cont-line.
endif.
clear lf_Split-spc.
endif.
ENDIF.
ADD 1 TO lf_split-pos1.
ENDDO.
CLEAR lt_rece.
lt_rece-receiver = i_email.
lt_rece-rec_type = 'U'.
IF NOT lt_rece-receiver IS INITIAL.
APPEND lt_rece.
ENDIF.
CHECK NOT lt_rece[] IS INITIAL.
21. * Send mail
lo_email = cl_bcs=>create_persistent( ).
lv_subj = lf_docdat-obj_descr.
lo_docum = cl_document_bcs=>create_document(
i_type = 'RAW'
i_text = lt_CONT[]
i_subject = lv_subj ).
IF NOT i_attxt[] IS INITIAL.
REFRESH lt_attx.
CALL FUNCTION 'SO_RAW_TO_RTF'
TABLES
objcont_old = i_attxt
objcont_new = lt_attx.
CALL METHOD lo_docum->add_attachment
EXPORTING
i_attachment_type = i_attyp
i_attachment_subject = i_atsub
i_att_content_text = lt_attx[].
ENDIF.
IF NOT i_attx2[] IS INITIAL.
REFRESH lt_attx.
CALL FUNCTION 'SO_RAW_TO_RTF'
TABLES
objcont_old = i_attx2
objcont_new = lt_attx.
CALL METHOD lo_docum->add_attachment
EXPORTING
i_attachment_type = i_atty2
i_attachment_subject = i_atsu2
i_att_content_text = lt_attx[].
ENDIF.
CALL METHOD lo_email->set_document( lo_docum ).
lo_sende = cl_sapuser_bcs=>create( sy-uname ).
CALL METHOD lo_email->set_sender
EXPORTING
i_sender = lo_sende.
LOOP AT lt_rece.
CASE lt_rece-rec_type.
WHEN 'U'.
lv_saddr = lt_rece-receiver.
22. TRANSLATE lv_saddr TO LOWER CASE.
lo_recip = cl_cam_address_bcs=>create_internet_address(
lv_saddr ).
WHEN 'B'.
lv_uname = lt_rece-receiver.
lo_recip = cl_sapuser_bcs=>create( lv_uname ).
ENDCASE.
CALL METHOD lo_email->add_recipient
EXPORTING
i_recipient = lo_recip
i_express = 'X'
i_copy = ' '
i_blind_copy = ' '
i_no_forward = ' '.
ENDLOOP.
MOVE 'N' TO lv_rstat.
lv_statu = lv_rstat.
CALL METHOD lo_email->set_status_attributes
EXPORTING
i_requested_status = lv_rstat
i_status_mail = lv_statu.
CALL METHOD lo_email->send( ).
COMMIT WORK AND WAIT.
ENDFUNCTION.
E-Posta İle SAP Ekranına Link Göndermek
function zaswf_send_link_as_email.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(I_BNAME) TYPE XUBNAME
*" REFERENCE(I_MSGID) TYPE SY-MSGID
*" REFERENCE(I_MSGNO) TYPE SY-MSGNO
*" REFERENCE(I_MSGV1) OPTIONAL
*" REFERENCE(I_MSGV2) OPTIONAL
*" REFERENCE(I_MSGV3) OPTIONAL
*" REFERENCE(I_MSGV4) OPTIONAL
*" REFERENCE(I_MESAP) TYPE ZASWF_MESAP OPTIONAL
*" REFERENCE(I_MEMAI) TYPE ZASWF_MEMAI OPTIONAL
*" REFERENCE(I_CMD) TYPE CHAR200
*"----------------------------------------------------------------------
data:
lt_text type soli_tab with header line.
24. i_memai = i_memai
i_attyp = 'SAP'
i_atsub = 'EXECUTE'
i_attxt = lt_text[].
endfunction.
Bir SmartForm Çıktısını PDF Olarak E-Mail İle Göndermek
Örnek SAPProgramları
RSTXPDFT2 ve BCS_EXAMPLE_8 programları,bu konudakullanılabilecekhazırkodlarıiçermektedir.
CONVERT_OTFFonksiyonunuKullanmak
*&---------------------------------------------------------------------*
*& Form send_mail
*&---------------------------------------------------------------------*
FORM send_mail .
DATA: lt_solix TYPE STANDARD TABLE OF solix WITH HEADER LINE,
lt_objcont TYPE STANDARD TABLE OF soli WITH HEADER LINE,
lt_objhead TYPE STANDARD TABLE OF soli WITH HEADER LINE,
lt_receivers TYPE STANDARD TABLE OF soos1 WITH HEADER LINE,
lt_lines TYPE STANDARD TABLE OF tline WITH HEADER LINE,
ls_control TYPE ssfctrlop,
ls_job TYPE ssfcrescl,
ls_object_hd_change TYPE sood1,
ls_soli TYPE soli,
ls_addr TYPE szadr_addr1_complete,
ls_smtp TYPE szadr_adsmtp_line,
l_document_type TYPE soodk-objtp,
l_originator TYPE soos1-recextnam,
l_size TYPE i,
l_bin_file TYPE xstring,
l_i TYPE i,
l_n TYPE i.
FIELD-SYMBOLS: <ptr_hex> TYPE solix.
*&------------------------------
*& OTF DATA
*&------------------------------
* Get OTF data
ls_control-no_dialog = 'X'.
ls_control-preview = space.
ls_control-getotf = 'X'.
CALL FUNCTION w_fnam
EXPORTING
control_parameters = ls_control