How to create custom email with attachment in 1402

Hi Guys,
Based on 1402 release notes. Custom E-Mails now possible with SAP Cloud Application Studio.
release notes also states the following:
Customers can enhance the e-mails delivered by SAP Cloud for Travel and Expense by adding their own content to the existing content, they can replace the content entirely, and create their own emails.
What's more, they can flexibly define e-mails to be triggered to suit their own requirements.
We have a requirement to replace the standard email notification and create a new one. Tried to browse the Cloud Application Studio 1402 guide but didn't find any.
Any help would be greatly appreciate. Thanks.

Hi Alok,
Please find a reference below (for PS2010 but the principle is quite the same) :
http://azlav.umtblog.com/2011/05/04/making-a-read-only-pdp-with-infopath-forms/
Hope this helps,
Guillaume Rouyre, MBA, MCP, MCTS |

Similar Messages

  • How to send an email with attachment to dynamic emial address using PL/SQL

    Hi,
    i want to send an automated email with attachment everyday to differnet people so number people is not static.
    so is it any way using PL/SQL ?
    thanks for your support!

    i want to send an automated email with attachment everyday to differnet people so number people is not static.
    Why? Explain it.
    You can create a table and store your email id through front-end application day to day.
    The table should look like this ->
    satyaki>
    satyaki>select * from v$version;
    BANNER
    Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Prod
    PL/SQL Release 10.2.0.3.0 - Production
    CORE    10.2.0.3.0      Production
    TNS for 32-bit Windows: Version 10.2.0.3.0 - Production
    NLSRTL Version 10.2.0.3.0 - Production
    Elapsed: 00:00:00.04
    satyaki>
    satyaki>
    satyaki>create table email_master
      2    (
      3       email_grp_header         varchar2(30) not null,
      4       craete_time                  timestamp,
      5       constraints pk_header primary key(email_grp_header)
      6    );
    Table created.
    Elapsed: 00:00:02.12
    satyaki>
    satyaki>create table email_chld
      2    (
      3       email_grp_header          varchar2(30) not null,
      4       email_recepient             varchar2(100),
      5       craete_time                   timestamp,
      6       constraint fk_header foreign key(email_grp_header) references email_master(email_grp_header)
      7    );
    Table created.
    Elapsed: 00:00:00.09
    satyaki>
    satyaki>
    satyaki>insert into email_master values('GRP_INVENTORY',systimestamp);
    1 row created.
    Elapsed: 00:00:00.07
    satyaki>
    satyaki>
    satyaki>insert into email_master values('GRP_PURCHASE',systimestamp);
    1 row created.
    Elapsed: 00:00:00.03
    satyaki>
    satyaki>commit;
    Commit complete.
    Elapsed: 00:00:00.04
    satyaki>
    satyaki>select * from email_master;
    EMAIL_GRP_HEADER               CRAETE_TIME
    GRP_INVENTORY                  24-OCT-08 08.55.36.190000 PM
    GRP_PURCHASE                   24-OCT-08 08.55.54.481000 PM
    Elapsed: 00:00:00.18
    satyaki>
    satyaki>
    satyaki>insert into email_chld values('GRP_INVENTORY','[email protected]',systimestamp);
    1 row created.
    Elapsed: 00:00:00.07
    satyaki>
    satyaki>insert into email_chld values('GRP_INVENTORY','[email protected]',systimestamp);
    1 row created.
    Elapsed: 00:00:00.04
    satyaki>
    satyaki>insert into email_chld values('GRP_INVENTORY','[email protected]',systimestamp);
    1 row created.
    Elapsed: 00:00:00.03
    satyaki>
    satyaki>insert into email_chld values('GRP_PURCHASE','[email protected]',systimestamp);
    1 row created.
    Elapsed: 00:00:00.03
    satyaki>
    satyaki>insert into email_chld values('GRP_PURCHASE','[email protected]',systimestamp);
    1 row created.
    Elapsed: 00:00:00.11
    satyaki>commit;
    Commit complete.
    Elapsed: 00:00:00.05
    satyaki>
    satyaki>select * from email_chld;
    EMAIL_GRP_HEADER               EMAIL_RECEPIENT                                                                                      CRAETE_TIME
    GRP_INVENTORY                  [email protected]                                                                                      24-OCT-08 08.56.46.107000 PM
    GRP_INVENTORY                  [email protected]                                                                                         24-OCT-08 08.57.03.551000 PM
    GRP_INVENTORY                  [email protected]                                                                                    24-OCT-08 08.57.36.277000 PM
    GRP_PURCHASE                   [email protected]                                                                                      24-OCT-08 08.58.06.129000 PM
    GRP_PURCHASE                   [email protected]                                                                                    24-OCT-08 08.58.26.900000 PM
    Elapsed: 00:00:00.10
    satyaki>And, then based on the group header you can get the list of recipient and use it dynamically inside your PL/SQL Application.
    Regards.
    Satyaki De.

  • How i can send email with attachment ?

    any body can help me ..............??????????????????

    Hello,
    please, use "Search" utility in the forum before ask something like this...
    I've just tried with :
    "send email with attachment"
    and ... you have the solution in the first result...
    Regards,
    Jose.

  • How can create an email with checkboxes?

    I want to send an email with a list and has the recipients to check items in the list.  For example,  I have the following list:
    Which office applications do you use?
    Outlook
    Excel
    Word
    PowerPoint
    Access
    Instead of the dot, I want to use a checkbox and recipients can check the appropriate checkbox and reply me.
    Thanks for any help.

    Hello Max,
    I followed your instructions and I successfully created checkboxes in my email. But when I sent it to other people and everyone else failed to be able to check off the boxes (I
    cc myself and it worked for me nevertheless)... could you advise why and what have I missed
    out in the process?
    Thank you.
    Best regards.
    Harley
    Sorry Harley,
    It is proved that the ActiveX check box will not work after you send the email to the other users due to the Outlook security policy. Sorry for that.
    The easiest workaround might be using the Vote feature instead. Or send a Word document to the users, and let them send you the document back.
    Other possible alternates: 
    Create a custom Outlook form, which allows you to add such controls, but you need to distribute the form to all the users that you want them to use the checkbox, seems to be an expensive solution.
    If InfoPath is available in your working environment, using InfoPath form is another alternate. (Read
    Use InfoPath e-mail forms in Outlook) (Note the recipients also need InfoPath installed.)
    If SharePoint is available in your working environment, create a survey in the SharePoint is another alternate. (Read
    Create a survey)
    Max Meng
    TechNet Community Support

  • How to send an email with attachment using shareponit 2013

    Hi Team,
    I have a PowerView report in my PowerPivot gallery and I want to export it to a PDF file then email it to id. Also I need this to be scheduled. 
    Kindly suggest on the steps!
    Thanks in Advance!!
    Thanks,
    Arsath.

    Create a customcode to export the powerview report to powerpoint and then a small email script will do 
    http://office.microsoft.com/en-in/excel-help/export-a-report-from-power-view-in-sharepoint-to-powerpoint-HA102834765.aspx
    http://technet.microsoft.com/en-us/library/hh231522%28v=sql.110%29.aspx
    I could not find a way to do so but check below:
    http://social.msdn.microsoft.com/Forums/sqlserver/en-US/fd9e90e2-ebc5-4dfb-9eaf-a263729b8ed2/how-to-generate-powerview-model-programmatically?forum=sqlreportingservices
    If this helped you resolve your issue, please mark it Answered

  • How to create custom url with struts2+spring  application

    Hi EveryOne,
    I am new to struts2 application. I have the requirement on "*custom URL*"
    when I enter into my project like http://localhost:8080/App/secure/someaction.action?bookname=kathersera
    this is opening the particuler book in my project. upto this its fine.
    Now My requirement is that
    Even if we type like (+http://localhost:8080/App/kathersera+) author name it should go to that particular page.
    Any idea to implement this feature.
    I searched a lot on internet. I didnot get any information.
    Please help me to come out this problem.
    thanks in advance

    Hi PYRAMESH,
    U are using opening page using server. So, If u do not make a request to server to veiw the page how could u see the page directly. So u have to make any event to open the page Like here http://localhost:8080/App/secure/someaction.action?bookname=kathersera, the page is opened on the result of someaction.action. but if u try to use http://localhost:8080/App/kathersera, u r not using any action, so it s not possible to open the page directly.

  • Send Email with Attachment in BSP?

    Hello,
         I have trouble about sending Email in BSP .
         I don't know how to <b>Send Email with attachment in BSP</b> . Please give me some advice .
        Thank you very much!

    Here is a sample application..
    <b>Layout</b>
    <%@page language="abap" %>
    <%@extension name="htmlb" prefix="htmlb" %>
    <htmlb:content design="design2003" >
      <htmlb:page title="Send Mail with Attachment " >
        <htmlb:form id           = "form1"
                    encodingType = "multipart/form-data" >
          <htmlb:label for  = "MAILTO"
                       text = "Mail to" />
          <htmlb:inputField id    = "MAILTO"
                            size  = "20"
                            value = "<%= mail_to %>"
                            type  = "string" />
          <htmlb:fileUpload id          = "myUpload"
                            onUpload    = "HandleUpload"
                            upload_text = "Attach"
                            size        = "90" />
        </htmlb:form>
      </htmlb:page>
    </htmlb:content>
    <b>Page attributes:</b>
    mail_to     TYPE     ADR6-SMTP_ADDR     E-Mail Address
    <b> Event handler OnInputprocessing..</b>
    DATA: fileUpload TYPE REF TO CL_HTMLB_FILEUPLOAD,
          file_content TYPE XSTRING,
          file_length TYPE STRING,
          file_mime_type TYPE STRING,
          file_name TYPE STRING.
    fileUpload ?= CL_HTMLB_MANAGER=>GET_DATA(
                           request = request
                           id      = 'myUpload'
                           name    = 'fileUpload' ).
    if fileUpload is not INITIAL.
      file_name      = fileUpload->file_name.
      file_mime_type = fileUpload->file_content_type.
      file_length    = fileUpload->file_length.
      file_content   = fileUpload->file_content.
      mail_to = request->get_form_field( `MAILTO` ).
    * Send mail part..
      CLASS cl_bcs DEFINITION LOAD.
      DATA:
            lo_send_request TYPE REF TO cl_bcs VALUE IS INITIAL.
      lo_send_request = cl_bcs=>create_persistent( ).
    * Message body and subject
      DATA:
            lt_message_body TYPE bcsy_text VALUE IS INITIAL,
            lt_att_content_hex type solix_tab,
            lo_document TYPE REF TO cl_document_bcs VALUE IS INITIAL.
      APPEND 'Dear Vendor,' TO lt_message_body.
      append ' ' to lt_message_body.
      APPEND 'Please find the attached report.'
      TO lt_message_body.
      append ' ' to lt_message_body.
      APPEND 'Thank You,' TO lt_message_body.
      lo_document = cl_document_bcs=>create_document(
      i_type = 'RAW'
      i_text = lt_message_body
      i_subject = 'Visit report' ).
      data: data_tab type solix_tab,
      p_data type XSTRING.
    * Pass the data of the document we have uploaded..
      p_data = file_content.
      call function 'SCMS_XSTRING_TO_BINARY'
        EXPORTING
          buffer     = p_data
        TABLES
          binary_tab = data_tab.
      DATA: lx_document_bcs TYPE REF TO cx_document_bcs VALUE IS INITIAL.
      TRY.
          lo_document->add_attachment(
          EXPORTING
          i_attachment_type = 'PDF'
          i_attachment_subject = 'Visit Report'
          i_att_content_hex = data_tab ).
        CATCH cx_document_bcs INTO lx_document_bcs.
      ENDTRY.
    * Add attachment
    * Pass the document to send request
      lo_send_request->set_document( lo_document ).
    * Create sender
      DATA:
      lo_sender TYPE REF TO if_sender_bcs VALUE IS INITIAL,
      l_send type ADR6-SMTP_ADDR value '[email protected]'.
    * Set sender
      l_send = mail_to.
      lo_sender = cl_cam_address_bcs=>create_internet_address( l_send ).
      lo_send_request->set_sender(
      EXPORTING
      i_sender = lo_sender ).
    * Create recipient
      DATA:
      lo_recipient TYPE REF TO if_recipient_bcs VALUE IS INITIAL.
      lo_recipient = cl_sapuser_bcs=>create( sy-uname ).
    ** Set recipient
      lo_send_request->add_recipient(
      EXPORTING
      i_recipient = lo_recipient
      i_express = 'X' ).
      lo_send_request->add_recipient(
      EXPORTING
      i_recipient = lo_recipient
      i_express = 'X' ).
    * Send email
      DATA: lv_sent_to_all(1) TYPE c VALUE IS INITIAL.
      lo_send_request->send(
      EXPORTING
      i_with_error_screen = 'X'
      RECEIVING
      result = lv_sent_to_all ).
      COMMIT WORK.
    endif.
    Hope this will be helpful.
    Raja T

  • How to send an email with an attachment to the customers email address.

    Hi friends,
    How to send an email with an attachment to the customers email address.
    the attachment will be in doc format.
    Having an Header
    the data which i am sending must be in a TABLE format
    with 5 columns.
    and each column must have a column heading
    Please guide me.
    Thanks in Advance,
    Ganesh.

    *& Report  ZEMAIL_ATTACH                                               *
    *& Example of sending external email via SAPCONNECT                    *
    REPORT  ZEMAIL_ATTACH                   .
    TABLES: ekko.
    PARAMETERS: p_email   TYPE somlreci1-receiver .
    *Here get the values of mail from the table adn6 for the customer address.
    TYPES: BEGIN OF t_ekpo,
      ebeln TYPE ekpo-ebeln,
      ebelp TYPE ekpo-ebelp,
      aedat TYPE ekpo-aedat,
      matnr TYPE ekpo-matnr,
    END OF t_ekpo.
    DATA: it_ekpo TYPE STANDARD TABLE OF t_ekpo INITIAL SIZE 0,
          wa_ekpo TYPE t_ekpo.
    TYPES: BEGIN OF t_charekpo,
      ebeln(10) TYPE c,
      ebelp(5)  TYPE c,
      aedat(8)  TYPE c,
      matnr(18) TYPE c,
    END OF t_charekpo.
    DATA: wa_charekpo TYPE t_charekpo.
    DATA:   it_message TYPE STANDARD TABLE OF solisti1 INITIAL SIZE 0
                    WITH HEADER LINE.
    DATA:   it_attach TYPE STANDARD TABLE OF solisti1 INITIAL SIZE 0
                    WITH HEADER LINE.
    DATA:   t_packing_list LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,
            t_contents LIKE solisti1 OCCURS 0 WITH HEADER LINE,
            t_receivers LIKE somlreci1 OCCURS 0 WITH HEADER LINE,
            t_attachment LIKE solisti1 OCCURS 0 WITH HEADER LINE,
            t_object_header LIKE solisti1 OCCURS 0 WITH HEADER LINE,
            w_cnt TYPE i,
            w_sent_all(1) TYPE c,
            w_doc_data LIKE sodocchgi1,
            gd_error    TYPE sy-subrc,
            gd_reciever TYPE sy-subrc.
    *START_OF_SELECTION
    START-OF-SELECTION.
      Retrieve sample data from table ekpo
      PERFORM data_retrieval.
      Populate table with detaisl to be entered into .xls file
      PERFORM build_xls_data_table.
    *END-OF-SELECTION
    END-OF-SELECTION.
    Populate message body text
      perform populate_email_message_body.
    Send file by email as .xls speadsheet
      PERFORM send_file_as_email_attachment
                                   tables it_message
                                          it_attach
                                    using p_email
                                          'Example .xls documnet attachment'
                                          'DOC'
                                          'filename'
                                 changing gd_error
                                          gd_reciever.
      Instructs mail send program for SAPCONNECT to send email(rsconn01)
      PERFORM initiate_mail_execute_program.
    *&      Form  DATA_RETRIEVAL
          Retrieve data form EKPO table and populate itab it_ekko
    FORM data_retrieval.
      SELECT ebeln ebelp aedat matnr
       UP TO 10 ROWS
        FROM ekpo
        INTO TABLE it_ekpo.
    ENDFORM.                    " DATA_RETRIEVAL
    *&      Form  BUILD_XLS_DATA_TABLE
          Build data table for .xls document
    FORM build_xls_data_table.
      CONSTANTS: con_cret TYPE x VALUE '0D',  "OK for non Unicode
                 con_tab TYPE x VALUE '09'.   "OK for non Unicode
    *If you have Unicode check active in program attributes thnen you will
    *need to declare constants as follows
    *class cl_abap_char_utilities definition load.
    *constants:
       con_tab  type c value cl_abap_char_utilities=>HORIZONTAL_TAB,
       con_cret type c value cl_abap_char_utilities=>CR_LF.
      CONCATENATE 'EBELN' 'EBELP' 'AEDAT' 'MATNR'
             INTO it_attach SEPARATED BY con_tab.
      CONCATENATE con_cret it_attach  INTO it_attach.
      APPEND  it_attach.
      LOOP AT it_ekpo INTO wa_charekpo.
        CONCATENATE wa_charekpo-ebeln wa_charekpo-ebelp
                    wa_charekpo-aedat wa_charekpo-matnr
               INTO it_attach SEPARATED BY con_tab.
        CONCATENATE con_cret it_attach  INTO it_attach.
        APPEND  it_attach.
      ENDLOOP.
    ENDFORM.                    " BUILD_XLS_DATA_TABLE
    *&      Form  SEND_FILE_AS_EMAIL_ATTACHMENT
          Send email
    FORM send_file_as_email_attachment tables pit_message
                                              pit_attach
                                        using p_email
                                              p_mtitle
                                              p_format
                                              p_filename
                                              p_attdescription
                                              p_sender_address
                                              p_sender_addres_type
                                     changing p_error
                                              p_reciever.
      DATA: ld_error    TYPE sy-subrc,
            ld_reciever TYPE sy-subrc,
            ld_mtitle LIKE sodocchgi1-obj_descr,
            ld_email LIKE  somlreci1-receiver,
            ld_format TYPE  so_obj_tp ,
            ld_attdescription TYPE  so_obj_nam ,
            ld_attfilename TYPE  so_obj_des ,
            ld_sender_address LIKE  soextreci1-receiver,
            ld_sender_address_type LIKE  soextreci1-adr_typ,
            ld_receiver LIKE  sy-subrc.
      ld_email   = p_email.
      ld_mtitle = p_mtitle.
      ld_format              = p_format.
      ld_attdescription      = p_attdescription.
      ld_attfilename         = p_filename.
      ld_sender_address      = p_sender_address.
      ld_sender_address_type = p_sender_addres_type.
    Fill the document data.
      w_doc_data-doc_size = 1.
    Populate the subject/generic message attributes
      w_doc_data-obj_langu = sy-langu.
      w_doc_data-obj_name  = 'SAPRPT'.
      w_doc_data-obj_descr = ld_mtitle .
      w_doc_data-sensitivty = 'F'.
    Fill the document data and get size of attachment
      CLEAR w_doc_data.
      READ TABLE it_attach INDEX w_cnt.
      w_doc_data-doc_size =
         ( w_cnt - 1 ) * 255 + STRLEN( it_attach ).
      w_doc_data-obj_langu  = sy-langu.
      w_doc_data-obj_name   = 'SAPRPT'.
      w_doc_data-obj_descr  = ld_mtitle.
      w_doc_data-sensitivty = 'F'.
      CLEAR t_attachment.
      REFRESH t_attachment.
      t_attachment[] = pit_attach[].
    Describe the body of the message
      CLEAR t_packing_list.
      REFRESH t_packing_list.
      t_packing_list-transf_bin = space.
      t_packing_list-head_start = 1.
      t_packing_list-head_num = 0.
      t_packing_list-body_start = 1.
      DESCRIBE TABLE it_message LINES t_packing_list-body_num.
      t_packing_list-doc_type = 'RAW'.
      APPEND t_packing_list.
    Create attachment notification
      t_packing_list-transf_bin = 'X'.
      t_packing_list-head_start = 1.
      t_packing_list-head_num   = 1.
      t_packing_list-body_start = 1.
      DESCRIBE TABLE t_attachment LINES t_packing_list-body_num.
      t_packing_list-doc_type   =  ld_format.
      t_packing_list-obj_descr  =  ld_attdescription.
      t_packing_list-obj_name   =  ld_attfilename.
      t_packing_list-doc_size   =  t_packing_list-body_num * 255.
      APPEND t_packing_list.
    Add the recipients email address
      CLEAR t_receivers.
      REFRESH t_receivers.
      t_receivers-receiver = ld_email.
      t_receivers-rec_type = 'U'.
      t_receivers-com_type = 'INT'.
      t_receivers-notif_del = 'X'.
      t_receivers-notif_ndel = 'X'.
      APPEND t_receivers.
      CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
           EXPORTING
                document_data              = w_doc_data
                put_in_outbox              = 'X'
                sender_address             = ld_sender_address
                sender_address_type        = ld_sender_address_type
                commit_work                = 'X'
           IMPORTING
                sent_to_all                = w_sent_all
           TABLES
                packing_list               = t_packing_list
                contents_bin               = t_attachment
                contents_txt               = it_message
                receivers                  = t_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.
    Populate zerror return code
      ld_error = sy-subrc.
    Populate zreceiver return code
      LOOP AT t_receivers.
        ld_receiver = t_receivers-retrn_code.
      ENDLOOP.
    ENDFORM.
    *&      Form  INITIATE_MAIL_EXECUTE_PROGRAM
          Instructs mail send program for SAPCONNECT to send email.
    FORM initiate_mail_execute_program.
      WAIT UP TO 2 SECONDS.
      SUBMIT rsconn01 WITH mode = 'INT'
                    WITH output = 'X'
                    AND RETURN.
    ENDFORM.                    " INITIATE_MAIL_EXECUTE_PROGRAM
    *&      Form  POPULATE_EMAIL_MESSAGE_BODY
           Populate message body text
    form populate_email_message_body.
      REFRESH it_message.
      it_message = 'Please find attached a list test ekpo records'.
      APPEND it_message.
    endform.                    " POPULATE_EMAIL_MESSAGE_BODY
    regards,
    venkat.

  • HOW TO SEND A HEBREW EMAIL WITH ATTACHMENT USING DEMO_MAIL

    Hello All,
    This is Not a question , just attaching something I've implemented and might be interesting for few of us,
    This package I'm attaching allows to send Hebrew Language email + attaching files to it.
    This package is based on demo_mail package (combined here but you can search at google for more example information if needed).
    My Package is supplied as is , for any specific information regarding it , please contact me directly at : [email protected] or POST here.
    * Please also note , that this package allow file to be attach via URL (meaning you will have to define a link to this file, if you would like to implement a link to a local file , e.g : c:\temp\myfile , you will have to customize the package your self with database directories option etc ...)
    First I will attach an example of how to use it :
    ==================================
    begin
    demo_mail_heb.send_html_mail_attach(p_sender => '[email protected]',
    p_recipients => '[email protected]',
    p_subject => 'שלום וברכה עולם',
    p_data => '<hr><b>בוקר טוב</b><hr>',
    p_file_name => 'but_choose_file.gif',
    p_file_mime_type => 'application/pdf',
    p_file_URL => 'http://10.172.246.160:7777/i/but_choose_file.gif');
    end;
    Second Here is the Package (please note you will have to modify few settings in order to enable it , such as mail server address ..etc)
    ======================================================================================
    CREATE OR REPLACE PACKAGE demo_mail_heb IS
    ----------------------- Customizable Section -----------------------
    -- Customize the SMTP host, port and your domain name below.
    smtp_host VARCHAR2(256) := 'mail.oracle.com';
    smtp_port PLS_INTEGER := 25;
    smtp_domain VARCHAR2(256) := 'oracle.com';
    -- Customize the signature that will appear in the email's MIME header.
    -- Useful for versioning.
    MAILER_ID CONSTANT VARCHAR2(256) := 'Mailer by Oracle UTL_SMTP';
    --------------------- End Customizable Section ---------------------
    -- A unique string that demarcates boundaries of parts in a multi-part email
    -- The string should not appear inside the body of any part of the email.
    -- Customize this if needed or generate this randomly dynamically.
    BOUNDARY CONSTANT VARCHAR2(256) := '-----7D81B75CCC90D2974F7A1CBD';
    FIRST_BOUNDARY CONSTANT VARCHAR2(256) := '--' || BOUNDARY || utl_tcp.CRLF;
    LAST_BOUNDARY CONSTANT VARCHAR2(256) := '--' || BOUNDARY || '--' ||
    utl_tcp.CRLF;
    -- A MIME type that denotes multi-part email (MIME) messages.
    MULTIPART_MIME_TYPE CONSTANT VARCHAR2(256) := 'multipart/mixed; boundary="'||
    BOUNDARY || '"';
    MAX_BASE64_LINE_WIDTH CONSTANT PLS_INTEGER := 76 / 4 * 3;
    -- Sent clear Html Email
    procedure send_html_mail (p_sender in varchar2 default null,
    p_recipients in varchar2 default null,
    p_subject in varchar2 default null,
    p_data in varchar2 default null,
    p_mime_type in varchar2 default 'text/html; charset=windows-1255');
    -- Sent Html Email with Attachment
    procedure send_html_mail_attach (p_sender in varchar2 default null,
    p_recipients in varchar2 default null,
    p_subject in varchar2 default null,
    p_data in varchar2 default '<b>áå÷ø èåá òåìí - áãé÷ä</b',
    p_mime_type in varchar2 default demo_mail_heb.MULTIPART_MIME_TYPE,
    p_file_name in varchar2 default 'but_choose_file.gif',
    p_file_mime_type in varchar2 default 'application/pdf',
    p_file_URL in varchar2 default 'http://10.172.246.160:7777/i/but_choose_file.gif');
    -- A simple email API for sending email in plain text in a single call.
    -- The format of an email address is one of these:
    -- someone@some-domain
    -- "Someone at some domain" <someone@some-domain>
    -- Someone at some domain <someone@some-domain>
    -- The recipients is a list of email addresses separated by
    -- either a "," or a ";"
    PROCEDURE mail(sender IN VARCHAR2,
              recipients IN VARCHAR2,
              subject IN VARCHAR2,
              message IN VARCHAR2);
    -- Extended email API to send email in HTML or plain text with no size limit.
    -- First, begin the email by begin_mail(). Then, call write_text() repeatedly
    -- to send email in ASCII piece-by-piece. Or, call write_mb_text() to send
    -- email in non-ASCII or multi-byte character set. End the email with
    -- end_mail().
    FUNCTION begin_mail(sender IN VARCHAR2,
              recipients IN VARCHAR2,
              subject IN VARCHAR2,
              mime_type IN VARCHAR2 DEFAULT 'text/plain',
              priority IN PLS_INTEGER DEFAULT NULL)
              RETURN utl_smtp.connection;
    -- Write email body in ASCII
    PROCEDURE write_text(conn IN OUT NOCOPY utl_smtp.connection,
              message IN VARCHAR2);
    -- Write email body in non-ASCII (including multi-byte). The email body
    -- will be sent in the database character set.
    PROCEDURE write_mb_text(conn IN OUT NOCOPY utl_smtp.connection,
                   message IN VARCHAR2);
    -- Write email body in binary
    PROCEDURE write_raw(conn IN OUT NOCOPY utl_smtp.connection,
              message IN RAW);
    -- APIs to send email with attachments. Attachments are sent by sending
    -- emails in "multipart/mixed" MIME format. Specify that MIME format when
    -- beginning an email with begin_mail().
    -- Send a single text attachment.
    PROCEDURE attach_text(conn IN OUT NOCOPY utl_smtp.connection,
                   data IN VARCHAR2,
                   mime_type IN VARCHAR2 DEFAULT 'text/plain',
                   inline IN BOOLEAN DEFAULT TRUE,
                   filename IN VARCHAR2 DEFAULT NULL,
              last IN BOOLEAN DEFAULT FALSE);
    -- Send a binary attachment. The attachment will be encoded in Base-64
    -- encoding format.
    PROCEDURE attach_base64(conn IN OUT NOCOPY utl_smtp.connection,
                   data IN RAW,
                   mime_type IN VARCHAR2 DEFAULT 'application/octet',
                   inline IN BOOLEAN DEFAULT TRUE,
                   filename IN VARCHAR2 DEFAULT NULL,
                   last IN BOOLEAN DEFAULT FALSE);
    -- Send an attachment with no size limit. First, begin the attachment
    -- with begin_attachment(). Then, call write_text repeatedly to send
    -- the attachment piece-by-piece. If the attachment is text-based but
    -- in non-ASCII or multi-byte character set, use write_mb_text() instead.
    -- To send binary attachment, the binary content should first be
    -- encoded in Base-64 encoding format using the demo package for 8i,
    -- or the native one in 9i. End the attachment with end_attachment.
    PROCEDURE begin_attachment(conn IN OUT NOCOPY utl_smtp.connection,
                   mime_type IN VARCHAR2 DEFAULT 'text/plain',
                   inline IN BOOLEAN DEFAULT TRUE,
                   filename IN VARCHAR2 DEFAULT NULL,
                   transfer_enc IN VARCHAR2 DEFAULT NULL);
    -- End the attachment.
    PROCEDURE end_attachment(conn IN OUT NOCOPY utl_smtp.connection,
                   last IN BOOLEAN DEFAULT FALSE);
    -- End the email.
    PROCEDURE end_mail(conn IN OUT NOCOPY utl_smtp.connection);
    -- Extended email API to send multiple emails in a session for better
    -- performance. First, begin an email session with begin_session.
    -- Then, begin each email with a session by calling begin_mail_in_session
    -- instead of begin_mail. End the email with end_mail_in_session instead
    -- of end_mail. End the email session by end_session.
    FUNCTION begin_session RETURN utl_smtp.connection;
    -- Begin an email in a session.
    PROCEDURE begin_mail_in_session(conn IN OUT NOCOPY utl_smtp.connection,
                        sender IN VARCHAR2,
                        recipients IN VARCHAR2,
                        subject IN VARCHAR2,
    --                     mime_type IN VARCHAR2 DEFAULT 'text/plain; charset=windows-1255',
              mime_type IN VARCHAR2 DEFAULT 'text/plain',
                        priority IN PLS_INTEGER DEFAULT NULL);
    -- End an email in a session.
    PROCEDURE end_mail_in_session(conn IN OUT NOCOPY utl_smtp.connection);
    -- End an email session.
    PROCEDURE end_session(conn IN OUT NOCOPY utl_smtp.connection);
    END;
    CREATE OR REPLACE PACKAGE BODY demo_mail_heb IS
    -- Sent clear Html Email
    procedure send_html_mail (p_sender in varchar2 default null,
    p_recipients in varchar2 default null,
    p_subject in varchar2 default null,
    p_data in varchar2 default null,
    p_mime_type in varchar2 default 'text/html; charset=windows-1255')
    Is
    conn utl_smtp.connection;
    BEGIN
    conn := demo_mail_heb.begin_mail(
    sender => p_sender,
    recipients => p_recipients,
    subject => p_subject,
    mime_type => p_mime_type);
    demo_mail_heb.write_text(
    conn => conn,
    message => p_data);
    demo_mail_heb.end_mail( conn => conn );
    END;
    -- Sent Html Email with Attachment
    procedure send_html_mail_attach (p_sender in varchar2 default null,
    p_recipients in varchar2 default null,
    p_subject in varchar2 default null,
    p_data in varchar2 default '<b>áå÷ø èåá òåìí - áãé÷ä</b',
    p_mime_type in varchar2 default demo_mail_heb.MULTIPART_MIME_TYPE,
    p_file_name in varchar2 default 'but_choose_file.gif',
    p_file_mime_type in varchar2 default 'application/pdf',
    p_file_URL in varchar2 default 'http://10.172.246.160:7777/i/but_choose_file.gif')
    is
    conn utl_smtp.connection;
    req utl_http.req;
    resp utl_http.resp;
    data RAW(200);
    begin
    conn := demo_mail_heb.begin_mail(
    sender => p_sender,
    recipients => p_recipients,
    subject => p_subject,
    mime_type => p_mime_type);
    demo_mail_heb.attach_text(
    conn => conn,
    data => p_data,
    mime_type => 'text/html');
    demo_mail_heb.begin_attachment(
    conn => conn,
    mime_type => p_file_mime_type,
    inline => TRUE,
    filename => p_file_name,
    transfer_enc => 'base64');
    -- In writing Base-64 encoded text following the MIME format below,
    -- the MIME format requires that a long piece of data must be splitted
    -- into multiple lines and each line of encoded data cannot exceed
    -- 80 characters, including the new-line characters. Also, when
    -- splitting the original data into pieces, the length of each chunk
    -- of data before encoding must be a multiple of 3, except for the
    -- last chunk. The constant demo_mail_heb.MAX_BASE64_LINE_WIDTH
    -- (76 / 4 * 3 = 57) is the maximum length (in bytes) of each chunk
    -- of data before encoding.
    Utl_Http.set_proxy('www-proxy.us.oracle.com', 'oracle.com');
    req := utl_http.begin_request(p_file_URL);
    resp := utl_http.get_response(req);
    BEGIN
    LOOP
    utl_http.read_raw(resp, data, demo_mail_heb.MAX_BASE64_LINE_WIDTH);
    demo_mail_heb.write_raw(
    conn => conn,
    message => utl_encode.base64_encode(data));
    END LOOP;
    EXCEPTION
    WHEN utl_http.end_of_body THEN
    utl_http.end_response(resp);
    END;
    demo_mail_heb.end_attachment( conn => conn );
    demo_mail_heb.end_mail( conn => conn );
    end;
    -- Return the next email address in the list of email addresses, separated
    -- by either a "," or a ";". The format of mailbox may be in one of these:
    -- someone@some-domain
    -- "Someone at some domain" <someone@some-domain>
    -- Someone at some domain <someone@some-domain>
    FUNCTION get_address(addr_list IN OUT VARCHAR2) RETURN VARCHAR2 IS
    addr VARCHAR2(256);
    i pls_integer;
    FUNCTION lookup_unquoted_char(str IN VARCHAR2,
                        chrs IN VARCHAR2) RETURN pls_integer AS
    c VARCHAR2(5);
    i pls_integer;
    len pls_integer;
    inside_quote BOOLEAN;
    BEGIN
    inside_quote := false;
    i := 1;
    len := length(str);
    WHILE (i <= len) LOOP
         c := substr(str, i, 1);
         IF (inside_quote) THEN
         IF (c = '"') THEN
         inside_quote := false;
         ELSIF (c = '\') THEN
         i := i + 1; -- Skip the quote character
         END IF;
         GOTO next_char;
         END IF;
         IF (c = '"') THEN
         inside_quote := true;
         GOTO next_char;
         END IF;
         IF (instr(chrs, c) >= 1) THEN
         RETURN i;
         END IF;
         <<next_char>>
         i := i + 1;
    END LOOP;
    RETURN 0;
    END;
    BEGIN
    addr_list := ltrim(addr_list);
    i := lookup_unquoted_char(addr_list, ',;');
    IF (i >= 1) THEN
    addr := substr(addr_list, 1, i - 1);
    addr_list := substr(addr_list, i + 1);
    ELSE
    addr := addr_list;
    addr_list := '';
    END IF;
    i := lookup_unquoted_char(addr, '<');
    IF (i >= 1) THEN
    addr := substr(addr, i + 1);
    i := instr(addr, '>');
    IF (i >= 1) THEN
         addr := substr(addr, 1, i - 1);
    END IF;
    END IF;
    RETURN addr;
    END;
    -- Write a MIME header
    PROCEDURE write_mime_header(conn IN OUT NOCOPY utl_smtp.connection,
                   name IN VARCHAR2,
                   value IN VARCHAR2) IS
    BEGIN
    -- utl_smtp.write_data(conn, name || ': ' || value || utl_tcp.CRLF);
    utl_smtp.write_raw_data(conn, UTL_RAW.CAST_TO_RAW(name || ': ' ||value || utl_tcp.CRLF));
    END;
    -- Mark a message-part boundary. Set <last> to TRUE for the last boundary.
    PROCEDURE write_boundary(conn IN OUT NOCOPY utl_smtp.connection,
                   last IN BOOLEAN DEFAULT FALSE) AS
    BEGIN
    IF (last) THEN
    utl_smtp.write_data(conn, LAST_BOUNDARY);
    ELSE
    utl_smtp.write_data(conn, FIRST_BOUNDARY);
    END IF;
    END;
    PROCEDURE mail(sender IN VARCHAR2,
              recipients IN VARCHAR2,
              subject IN VARCHAR2,
              message IN VARCHAR2) IS
    conn utl_smtp.connection;
    BEGIN
    conn := begin_mail(sender, recipients, subject);
    write_text(conn, message);
    end_mail(conn);
    END;
    FUNCTION begin_mail(sender IN VARCHAR2,
              recipients IN VARCHAR2,
              subject IN VARCHAR2,
              mime_type IN VARCHAR2 DEFAULT 'text/plain',
              priority IN PLS_INTEGER DEFAULT NULL)
              RETURN utl_smtp.connection IS
    conn utl_smtp.connection;
    BEGIN
    conn := begin_session;
    begin_mail_in_session(conn, sender, recipients, subject, mime_type,
    priority);
    RETURN conn;
    END;
    PROCEDURE write_text(conn IN OUT NOCOPY utl_smtp.connection,
              message IN VARCHAR2) IS
    BEGIN
    utl_smtp.write_raw_data(conn, utl_raw.cast_to_raw(CONVERT(message,'IW8ISO8859P8')));
    END;
    PROCEDURE write_mb_text(conn IN OUT NOCOPY utl_smtp.connection,
                   message IN VARCHAR2) IS
    BEGIN
    utl_smtp.write_raw_data(conn, utl_raw.cast_to_raw(message));
    END;
    PROCEDURE write_raw(conn IN OUT NOCOPY utl_smtp.connection,
              message IN RAW) IS
    BEGIN
    utl_smtp.write_raw_data(conn, message);
    END;
    PROCEDURE attach_text(conn IN OUT NOCOPY utl_smtp.connection,
                   data IN VARCHAR2,
                   mime_type IN VARCHAR2 DEFAULT 'text/plain',
                   inline IN BOOLEAN DEFAULT TRUE,
                   filename IN VARCHAR2 DEFAULT NULL,
              last IN BOOLEAN DEFAULT FALSE) IS
    BEGIN
    begin_attachment(conn, mime_type, inline, filename);
    write_text(conn, data);
    end_attachment(conn, last);
    END;
    PROCEDURE attach_base64(conn IN OUT NOCOPY utl_smtp.connection,
                   data IN RAW,
                   mime_type IN VARCHAR2 DEFAULT 'application/octet',
                   inline IN BOOLEAN DEFAULT TRUE,
                   filename IN VARCHAR2 DEFAULT NULL,
                   last IN BOOLEAN DEFAULT FALSE) IS
    i PLS_INTEGER;
    len PLS_INTEGER;
    BEGIN
    begin_attachment(conn, mime_type, inline, filename, 'base64');
    -- Split the Base64-encoded attachment into multiple lines
    i := 1;
    len := utl_raw.length(data);
    WHILE (i < len) LOOP
    IF (i + MAX_BASE64_LINE_WIDTH < len) THEN
         utl_smtp.write_raw_data(conn,
         utl_encode.base64_encode(utl_raw.substr(data, i,
         MAX_BASE64_LINE_WIDTH)));
    ELSE
         utl_smtp.write_raw_data(conn,
         utl_encode.base64_encode(utl_raw.substr(data, i)));
    END IF;
    utl_smtp.write_data(conn, utl_tcp.CRLF);
    i := i + MAX_BASE64_LINE_WIDTH;
    END LOOP;
    end_attachment(conn, last);
    END;
    PROCEDURE begin_attachment(conn IN OUT NOCOPY utl_smtp.connection,
                   mime_type IN VARCHAR2 DEFAULT 'text/plain',
                   inline IN BOOLEAN DEFAULT TRUE,
                   filename IN VARCHAR2 DEFAULT NULL,
                   transfer_enc IN VARCHAR2 DEFAULT NULL) IS
    BEGIN
    write_boundary(conn);
    write_mime_header(conn, 'Content-Type', mime_type);
    IF (filename IS NOT NULL) THEN
    IF (inline) THEN
         write_mime_header(conn, 'Content-Disposition',
         'inline; filename="'||filename||'"');
    ELSE
         write_mime_header(conn, 'Content-Disposition',
         'attachment; filename="'||filename||'"');
    END IF;
    END IF;
    IF (transfer_enc IS NOT NULL) THEN
    write_mime_header(conn, 'Content-Transfer-Encoding', transfer_enc);
    END IF;
    utl_smtp.write_data(conn, utl_tcp.CRLF);
    END;
    PROCEDURE end_attachment(conn IN OUT NOCOPY utl_smtp.connection,
                   last IN BOOLEAN DEFAULT FALSE) IS
    BEGIN
    utl_smtp.write_data(conn, utl_tcp.CRLF);
    IF (last) THEN
    write_boundary(conn, last);
    END IF;
    END;
    PROCEDURE end_mail(conn IN OUT NOCOPY utl_smtp.connection) IS
    BEGIN
    end_mail_in_session(conn);
    end_session(conn);
    END;
    FUNCTION begin_session RETURN utl_smtp.connection IS
    conn utl_smtp.connection;
    BEGIN
    -- open SMTP connection
    conn := utl_smtp.open_connection(smtp_host, smtp_port);
    utl_smtp.helo(conn, smtp_domain);
    RETURN conn;
    END;
    PROCEDURE begin_mail_in_session(conn IN OUT NOCOPY utl_smtp.connection,
                        sender IN VARCHAR2,
                        recipients IN VARCHAR2,
                        subject IN VARCHAR2,
                        mime_type IN VARCHAR2 DEFAULT 'text/plain',
                   --     mime_type IN VARCHAR2 DEFAULT 'text/plain; charset=windows-1255',
                        priority IN PLS_INTEGER DEFAULT NULL) IS
    my_recipients VARCHAR2(32767) := recipients;
    my_sender VARCHAR2(32767) := sender;
    BEGIN
    -- Specify sender's address (our server allows bogus address
    -- as long as it is a full email address ([email protected]).
    utl_smtp.mail(conn, get_address(my_sender));
    -- Specify recipient(s) of the email.
    WHILE (my_recipients IS NOT NULL) LOOP
    utl_smtp.rcpt(conn, get_address(my_recipients));
    END LOOP;
    -- Start body of email
    utl_smtp.open_data(conn);
    -- Set "From" MIME header
    write_mime_header(conn, 'From', sender);
    -- Set "To" MIME header
    write_mime_header(conn, 'To', recipients);
    -- Set "Subject" MIME header
    write_mime_header(conn, 'Subject', subject);
    -- Set "Content-Type" MIME header
    write_mime_header(conn, 'Content-Type', mime_type);
    -- Set "X-Mailer" MIME header
    write_mime_header(conn, 'X-Mailer', MAILER_ID);
    -- Set priority:
    -- High Normal Low
    -- 1 2 3 4 5
    IF (priority IS NOT NULL) THEN
    write_mime_header(conn, 'X-Priority', priority);
    END IF;
    -- Send an empty line to denotes end of MIME headers and
    -- beginning of message body.
    utl_smtp.write_data(conn, utl_tcp.CRLF);
    IF (mime_type LIKE 'multipart/mixed%') THEN
    write_text(conn, 'This is a multi-part message in MIME format.' ||
         utl_tcp.crlf);
    END IF;
    END;
    PROCEDURE end_mail_in_session(conn IN OUT NOCOPY utl_smtp.connection) IS
    BEGIN
    utl_smtp.close_data(conn);
    END;
    PROCEDURE end_session(conn IN OUT NOCOPY utl_smtp.connection) IS
    BEGIN
    utl_smtp.quit(conn);
    END;
    END;

    Hello All,
    Small modification - use this package and not the above
    HERE IS A WORKING CODE FOR SENDING HEBREW MESSAGES (INCLUDING SUBJECT IN UTF-8 APPEAR IN ALL EMAIL CLIENTS I HAVE CHECKED) + ATTACHMENTS
    Code attached below is supplied as is with no support. anyhow if help is needed , please contact me via [email protected]
    ============================================================================
    CREATE OR REPLACE PACKAGE demo_mail_heb IS
    ----------------------- Customizable Section -----------------------
    -- Customize the SMTP host, port and your domain name below.
    smtp_host VARCHAR2(256) := pst_ajax.getParameter('EMAIL_SMTP_HOST');
    smtp_port PLS_INTEGER := pst_ajax.getParameter('EMAIL_SMTP_PORT');
    smtp_domain VARCHAR2(256) := pst_ajax.getParameter('EMAIL_SMTP_DOMAIN');
    -- Customize the signature that will appear in the email's MIME header.
    -- Useful for versioning.
    MAILER_ID CONSTANT VARCHAR2(256) := 'Mailer by Oracle UTL_SMTP';
    --------------------- End Customizable Section ---------------------
    -- A unique string that demarcates boundaries of parts in a multi-part email
    -- The string should not appear inside the body of any part of the email.
    -- Customize this if needed or generate this randomly dynamically.
    BOUNDARY CONSTANT VARCHAR2(256) := '-----7D81B75CCC90D2974F7A1CBD';
    FIRST_BOUNDARY CONSTANT VARCHAR2(256) := '--' || BOUNDARY || utl_tcp.CRLF;
    LAST_BOUNDARY CONSTANT VARCHAR2(256) := '--' || BOUNDARY || '--' ||
    utl_tcp.CRLF;
    -- A MIME type that denotes multi-part email (MIME) messages.
    MULTIPART_MIME_TYPE CONSTANT VARCHAR2(256) := 'multipart/mixed; boundary="'||
    BOUNDARY || '"';
    MAX_BASE64_LINE_WIDTH CONSTANT PLS_INTEGER := 76 / 4 * 3;
    -- Sent clear Html Email
    procedure send_html_mail (p_sender in varchar2 default null,
    p_recipients in varchar2 default null,
    p_subject in varchar2 default null,
    p_data in varchar2 default null,
    p_mime_type in varchar2 default 'text/html; charset=windows-1255');
    -- Sent Html Email with Attachment
    procedure send_html_mail_attach (p_sender in varchar2 default null,
    p_recipients in varchar2 default null,
    p_subject in varchar2 default null,
    p_data in varchar2 default '<b>áå÷ø èåá òåìí - áãé÷ä</b',
    p_mime_type in varchar2 default 'text/html; charset=windows-1255',
    p_file_name in varchar2 default 'but_choose_file.gif',
    p_file_mime_type in varchar2 default 'application/pdf',
    p_file_URL in varchar2 default 'http://10.172.246.160:7777/i/but_choose_file.gif');
    -- A simple email API for sending email in plain text in a single call.
    -- The format of an email address is one of these:
    -- someone@some-domain
    -- "Someone at some domain" <someone@some-domain>
    -- Someone at some domain <someone@some-domain>
    -- The recipients is a list of email addresses separated by
    -- either a "," or a ";"
    PROCEDURE mail(sender IN VARCHAR2,
              recipients IN VARCHAR2,
              subject IN VARCHAR2,
              message IN VARCHAR2);
    -- Extended email API to send email in HTML or plain text with no size limit.
    -- First, begin the email by begin_mail(). Then, call write_text() repeatedly
    -- to send email in ASCII piece-by-piece. Or, call write_mb_text() to send
    -- email in non-ASCII or multi-byte character set. End the email with
    -- end_mail().
    FUNCTION begin_mail(sender IN VARCHAR2,
              recipients IN VARCHAR2,
              subject IN VARCHAR2,
              mime_type IN VARCHAR2 DEFAULT 'text/plain',
              priority IN PLS_INTEGER DEFAULT NULL)
              RETURN utl_smtp.connection;
    -- Write email body in ASCII
    PROCEDURE write_text(conn IN OUT NOCOPY utl_smtp.connection,
              message IN VARCHAR2);
    -- Write email body in non-ASCII (including multi-byte). The email body
    -- will be sent in the database character set.
    PROCEDURE write_mb_text(conn IN OUT NOCOPY utl_smtp.connection,
                   message IN VARCHAR2);
    -- Write email body in binary
    PROCEDURE write_raw(conn IN OUT NOCOPY utl_smtp.connection,
              message IN RAW);
    -- APIs to send email with attachments. Attachments are sent by sending
    -- emails in "multipart/mixed" MIME format. Specify that MIME format when
    -- beginning an email with begin_mail().
    -- Send a single text attachment.
    PROCEDURE attach_text(conn IN OUT NOCOPY utl_smtp.connection,
                   data IN VARCHAR2,
                   mime_type IN VARCHAR2 DEFAULT 'text/plain',
                   inline IN BOOLEAN DEFAULT TRUE,
                   filename IN VARCHAR2 DEFAULT NULL,
              last IN BOOLEAN DEFAULT FALSE);
    -- Send a binary attachment. The attachment will be encoded in Base-64
    -- encoding format.
    PROCEDURE attach_base64(conn IN OUT NOCOPY utl_smtp.connection,
                   data IN RAW,
                   mime_type IN VARCHAR2 DEFAULT 'application/octet',
                   inline IN BOOLEAN DEFAULT TRUE,
                   filename IN VARCHAR2 DEFAULT NULL,
                   last IN BOOLEAN DEFAULT FALSE);
    -- Send an attachment with no size limit. First, begin the attachment
    -- with begin_attachment(). Then, call write_text repeatedly to send
    -- the attachment piece-by-piece. If the attachment is text-based but
    -- in non-ASCII or multi-byte character set, use write_mb_text() instead.
    -- To send binary attachment, the binary content should first be
    -- encoded in Base-64 encoding format using the demo package for 8i,
    -- or the native one in 9i. End the attachment with end_attachment.
    PROCEDURE begin_attachment(conn IN OUT NOCOPY utl_smtp.connection,
                   mime_type IN VARCHAR2 DEFAULT 'text/plain',
                   inline IN BOOLEAN DEFAULT TRUE,
                   filename IN VARCHAR2 DEFAULT NULL,
                   transfer_enc IN VARCHAR2 DEFAULT NULL);
    -- End the attachment.
    PROCEDURE end_attachment(conn IN OUT NOCOPY utl_smtp.connection,
                   last IN BOOLEAN DEFAULT FALSE);
    -- End the email.
    PROCEDURE end_mail(conn IN OUT NOCOPY utl_smtp.connection);
    -- Extended email API to send multiple emails in a session for better
    -- performance. First, begin an email session with begin_session.
    -- Then, begin each email with a session by calling begin_mail_in_session
    -- instead of begin_mail. End the email with end_mail_in_session instead
    -- of end_mail. End the email session by end_session.
    FUNCTION begin_session RETURN utl_smtp.connection;
    -- Handling the Email Subject Line
    function mimeheader_encode(
    p_str varchar2
    , p_charset varchar2 := 'UTF-8') return varchar2;
    -- Begin an email in a session.
    PROCEDURE begin_mail_in_session(conn IN OUT NOCOPY utl_smtp.connection,
                        sender IN VARCHAR2,
                        recipients IN VARCHAR2,
                        subject IN VARCHAR2,
    --                     mime_type IN VARCHAR2 DEFAULT 'text/plain; charset=windows-1255',
              mime_type IN VARCHAR2 DEFAULT 'text/plain',
                        priority IN PLS_INTEGER DEFAULT NULL);
    -- End an email in a session.
    PROCEDURE end_mail_in_session(conn IN OUT NOCOPY utl_smtp.connection);
    -- End an email session.
    PROCEDURE end_session(conn IN OUT NOCOPY utl_smtp.connection);
    END;
    CREATE OR REPLACE PACKAGE BODY demo_mail_heb IS
    -- Sent clear Html Email
    procedure send_html_mail (p_sender in varchar2 default null,
    p_recipients in varchar2 default null,
    p_subject in varchar2 default null,
    p_data in varchar2 default null,
    p_mime_type in varchar2 default 'text/html; charset=windows-1255')
    Is
    conn utl_smtp.connection;
    BEGIN
    conn := demo_mail_heb.begin_mail(
    sender => p_sender,
    recipients => p_recipients,
    subject => p_subject,
    mime_type => 'text/html; charset=UTF-8');--p_mime_type);
    demo_mail_heb.write_text(
    conn => conn,
    message => p_data);
    demo_mail_heb.end_mail( conn => conn );
    END;
    -- Sent Html Email with Attachment
    procedure send_html_mail_attach (p_sender in varchar2 default null,
    p_recipients in varchar2 default null,
    p_subject in varchar2 default null,
    p_data in varchar2 default '<b>áå÷ø èåá òåìí - áãé÷ä</b',
    p_mime_type in varchar2 default 'text/html; charset=windows-1255',
    p_file_name in varchar2 default 'but_choose_file.gif',
    p_file_mime_type in varchar2 default 'application/pdf',
    p_file_URL in varchar2 default 'http://10.172.246.160:7777/i/but_choose_file.gif')
    is
    conn utl_smtp.connection;
    req utl_http.req;
    resp utl_http.resp;
    data RAW(200);
    v_mime_type varchar2(32767):=demo_mail.MULTIPART_MIME_TYPE;
    begin
    conn := demo_mail_heb.begin_mail(
    sender => p_sender,
    recipients => p_recipients,
    subject => p_subject,
    mime_type => v_mime_type);
    demo_mail_heb.attach_text(
    conn => conn,
    data => p_data,
    mime_type => 'text/html');
    demo_mail_heb.begin_attachment(
    conn => conn,
    mime_type => p_file_mime_type,
    inline => TRUE,
    filename => p_file_name,
    transfer_enc => 'base64');
    -- In writing Base-64 encoded text following the MIME format below,
    -- the MIME format requires that a long piece of data must be splitted
    -- into multiple lines and each line of encoded data cannot exceed
    -- 80 characters, including the new-line characters. Also, when
    -- splitting the original data into pieces, the length of each chunk
    -- of data before encoding must be a multiple of 3, except for the
    -- last chunk. The constant demo_mail_heb.MAX_BASE64_LINE_WIDTH
    -- (76 / 4 * 3 = 57) is the maximum length (in bytes) of each chunk
    -- of data before encoding.
    req := utl_http.begin_request(p_file_URL);
    resp := utl_http.get_response(req);
    BEGIN
    LOOP
    utl_http.read_raw(resp, data, demo_mail_heb.MAX_BASE64_LINE_WIDTH);
    demo_mail_heb.write_raw(
    conn => conn,
    message => utl_encode.base64_encode(data));
    END LOOP;
    EXCEPTION
    WHEN utl_http.end_of_body THEN
    utl_http.end_response(resp);
    END;
    demo_mail_heb.end_attachment( conn => conn );
    demo_mail_heb.end_mail( conn => conn );
    end;
    -- Return the next email address in the list of email addresses, separated
    -- by either a "," or a ";". The format of mailbox may be in one of these:
    -- someone@some-domain
    -- "Someone at some domain" <someone@some-domain>
    -- Someone at some domain <someone@some-domain>
    FUNCTION get_address(addr_list IN OUT VARCHAR2) RETURN VARCHAR2 IS
    addr VARCHAR2(256);
    i pls_integer;
    FUNCTION lookup_unquoted_char(str IN VARCHAR2,
    chrs IN VARCHAR2) RETURN pls_integer AS
    c VARCHAR2(5);
    i pls_integer;
    len pls_integer;
    inside_quote BOOLEAN;
    BEGIN
    inside_quote := false;
    i := 1;
    len := length(str);
    WHILE (i <= len) LOOP
    c := substr(str, i, 1);
    IF (inside_quote) THEN
    IF (c = '"') THEN
    inside_quote := false;
    ELSIF (c = '\') THEN
    i := i + 1; -- Skip the quote character
    END IF;
    GOTO next_char;
    END IF;
    IF (c = '"') THEN
    inside_quote := true;
    GOTO next_char;
    END IF;
    IF (instr(chrs, c) >= 1) THEN
    RETURN i;
    END IF;
    <<next_char>>
    i := i + 1;
    END LOOP;
    RETURN 0;
    END;
    BEGIN
    addr_list := ltrim(addr_list);
    i := lookup_unquoted_char(addr_list, ',;');
    IF (i >= 1) THEN
    addr := substr(addr_list, 1, i - 1);
    addr_list := substr(addr_list, i + 1);
    ELSE
    addr := addr_list;
    addr_list := '';
    END IF;
    i := lookup_unquoted_char(addr, '<');
    IF (i >= 1) THEN
    addr := substr(addr, i + 1);
    i := instr(addr, '>');
    IF (i >= 1) THEN
    addr := substr(addr, 1, i - 1);
    END IF;
    END IF;
    RETURN addr;
    END;
    -- Write a MIME header
    PROCEDURE write_mime_header(conn IN OUT NOCOPY utl_smtp.connection,
    name IN VARCHAR2,
    value IN VARCHAR2) IS
    BEGIN
    -- utl_smtp.write_data(conn, name || ': ' || value || utl_tcp.CRLF);
    utl_smtp.write_raw_data(conn, UTL_RAW.CAST_TO_RAW(name || ': ' ||value || utl_tcp.CRLF));
    END;
    -- Mark a message-part boundary. Set <last> to TRUE for the last boundary.
    PROCEDURE write_boundary(conn IN OUT NOCOPY utl_smtp.connection,
    last IN BOOLEAN DEFAULT FALSE) AS
    BEGIN
    IF (last) THEN
    utl_smtp.write_data(conn, LAST_BOUNDARY);
    ELSE
    utl_smtp.write_data(conn, FIRST_BOUNDARY);
    END IF;
    END;
    PROCEDURE mail(sender IN VARCHAR2,
    recipients IN VARCHAR2,
    subject IN VARCHAR2,
    message IN VARCHAR2) IS
    conn utl_smtp.connection;
    BEGIN
    conn := begin_mail(sender, recipients, subject);
    write_text(conn, message);
    end_mail(conn);
    END;
    FUNCTION begin_mail(sender IN VARCHAR2,
    recipients IN VARCHAR2,
    subject IN VARCHAR2,
    mime_type IN VARCHAR2 DEFAULT 'text/plain',
    priority IN PLS_INTEGER DEFAULT NULL)
    RETURN utl_smtp.connection IS
    conn utl_smtp.connection;
    BEGIN
    conn := begin_session;
    begin_mail_in_session(conn, sender, recipients, subject, mime_type,
    priority);
    RETURN conn;
    END;
    PROCEDURE write_text(conn IN OUT NOCOPY utl_smtp.connection,
    message IN VARCHAR2) IS
    BEGIN
    utl_smtp.write_raw_data(conn, utl_raw.cast_to_raw(CONVERT(message,'IW8ISO8859P8')));
    -- utl_smtp.write_raw_data(conn, utl_raw.cast_to_raw(message));
    END;
    PROCEDURE write_mb_text(conn IN OUT NOCOPY utl_smtp.connection,
    message IN VARCHAR2) IS
    BEGIN
    utl_smtp.write_raw_data(conn, utl_raw.cast_to_raw(message));
    END;
    PROCEDURE write_raw(conn IN OUT NOCOPY utl_smtp.connection,
    message IN RAW) IS
    BEGIN
    utl_smtp.write_raw_data(conn, message);
    END;
    PROCEDURE attach_text(conn IN OUT NOCOPY utl_smtp.connection,
    data IN VARCHAR2,
    mime_type IN VARCHAR2 DEFAULT 'text/plain',
    inline IN BOOLEAN DEFAULT TRUE,
    filename IN VARCHAR2 DEFAULT NULL,
    last IN BOOLEAN DEFAULT FALSE) IS
    BEGIN
    begin_attachment(conn, mime_type, inline, filename);
    write_text(conn, data);
    end_attachment(conn, last);
    END;
    PROCEDURE attach_base64(conn IN OUT NOCOPY utl_smtp.connection,
    data IN RAW,
    mime_type IN VARCHAR2 DEFAULT 'application/octet',
    inline IN BOOLEAN DEFAULT TRUE,
    filename IN VARCHAR2 DEFAULT NULL,
    last IN BOOLEAN DEFAULT FALSE) IS
    i PLS_INTEGER;
    len PLS_INTEGER;
    BEGIN
    begin_attachment(conn, mime_type, inline, filename, 'base64');
    -- Split the Base64-encoded attachment into multiple lines
    i := 1;
    len := utl_raw.length(data);
    WHILE (i < len) LOOP
    IF (i + MAX_BASE64_LINE_WIDTH < len) THEN
    utl_smtp.write_raw_data(conn,
    utl_encode.base64_encode(utl_raw.substr(data, i,
    MAX_BASE64_LINE_WIDTH)));
    ELSE
    utl_smtp.write_raw_data(conn,
    utl_encode.base64_encode(utl_raw.substr(data, i)));
    END IF;
    utl_smtp.write_data(conn, utl_tcp.CRLF);
    i := i + MAX_BASE64_LINE_WIDTH;
    END LOOP;
    end_attachment(conn, last);
    END;
    PROCEDURE begin_attachment(conn IN OUT NOCOPY utl_smtp.connection,
    mime_type IN VARCHAR2 DEFAULT 'text/plain',
    inline IN BOOLEAN DEFAULT TRUE,
    filename IN VARCHAR2 DEFAULT NULL,
    transfer_enc IN VARCHAR2 DEFAULT NULL) IS
    BEGIN
    write_boundary(conn);
    write_mime_header(conn, 'Content-Type', mime_type);
    IF (filename IS NOT NULL) THEN
    IF (inline) THEN
    write_mime_header(conn, 'Content-Disposition',
    'inline; filename="'||filename||'"');
    ELSE
    write_mime_header(conn, 'Content-Disposition',
    'attachment; filename="'||filename||'"');
    END IF;
    END IF;
    IF (transfer_enc IS NOT NULL) THEN
    write_mime_header(conn, 'Content-Transfer-Encoding', transfer_enc);
    END IF;
    utl_smtp.write_data(conn, utl_tcp.CRLF);
    END;
    PROCEDURE end_attachment(conn IN OUT NOCOPY utl_smtp.connection,
    last IN BOOLEAN DEFAULT FALSE) IS
    BEGIN
    utl_smtp.write_data(conn, utl_tcp.CRLF);
    IF (last) THEN
    write_boundary(conn, last);
    END IF;
    END;
    PROCEDURE end_mail(conn IN OUT NOCOPY utl_smtp.connection) IS
    BEGIN
    end_mail_in_session(conn);
    end_session(conn);
    END;
    FUNCTION begin_session RETURN utl_smtp.connection IS
    conn utl_smtp.connection;
    BEGIN
    -- open SMTP connection
    conn := utl_smtp.open_connection(smtp_host, smtp_port);
    utl_smtp.helo(conn, smtp_domain);
    RETURN conn;
    END;
    -- Handling the Email Subject Line
    function mimeheader_encode(
    p_str varchar2
    , p_charset varchar2 := 'UTF-8') return varchar2 is
    l_str varchar2(2000);
    begin
    l_str:=utl_raw.cast_to_varchar2(utl_encode.quoted_printable_encode(utl_raw.cast_to_raw(p_str)));
    l_str:=replace(l_str,'='||chr(13)||chr(10),''); --unfold the data
    l_str:=replace(l_str,'?','=3f'); --quote question marks
    l_str:=replace(l_str,' ','=20'); --quote spaces
    l_str:='=?'||p_charset||'?Q?'||l_str||'?='; -- add prefix and suffix
    return l_str;
    end;
    PROCEDURE begin_mail_in_session(conn IN OUT NOCOPY utl_smtp.connection,
    sender IN VARCHAR2,
    recipients IN VARCHAR2,
    subject IN VARCHAR2,
    mime_type IN VARCHAR2 DEFAULT 'text/plain',
    -- mime_type IN VARCHAR2 DEFAULT 'text/plain; charset=windows-1255',
    priority IN PLS_INTEGER DEFAULT NULL) IS
    my_recipients VARCHAR2(32767) := recipients;
    my_sender VARCHAR2(32767) := sender;
    BEGIN
    -- Specify sender's address (our server allows bogus address
    -- as long as it is a full email address ([email protected]).
    utl_smtp.mail(conn, get_address(my_sender));
    -- Specify recipient(s) of the email.
    WHILE (my_recipients IS NOT NULL) LOOP
    utl_smtp.rcpt(conn, get_address(my_recipients));
    END LOOP;
    -- Start body of email
    utl_smtp.open_data(conn);
    -- Set "From" MIME header
    write_mime_header(conn, 'From', sender);
    -- Set "To" MIME header
    write_mime_header(conn, 'To', recipients);
    -- Set "Content-Type" MIME header
    write_mime_header(conn, 'Content-Type', mime_type);
    -- write_mime_header(conn, 'Content-Type', 'text/html; charset=UTF-8');
    -- Set "Subject" MIME header
    -- write_mime_header(conn, 'Subject', subject);
    -- write_mime_header(conn, 'Subject', CONVERT(subject,'IW8ISO8859P8'));
    write_mime_header(conn, 'Subject',mimeheader_encode(p_str => subject,p_charset => 'UTF-8'));
    -- write_mime_header(conn, 'Subject',CONVERT(subject,'IW8MSWIN1255'));
    -- Set "X-Mailer" MIME header
    write_mime_header(conn, 'X-Mailer', MAILER_ID);
    -- Set priority:
    -- High Normal Low
    -- 1 2 3 4 5
    IF (priority IS NOT NULL) THEN
    write_mime_header(conn, 'X-Priority', priority);
    END IF;
    -- Send an empty line to denotes end of MIME headers and
    -- beginning of message body.
    utl_smtp.write_data(conn, utl_tcp.CRLF);
    IF (mime_type LIKE 'multipart/mixed%') THEN
    write_text(conn, 'This is a multi-part message in MIME format.' ||
    utl_tcp.crlf);
    END IF;
    END;
    PROCEDURE end_mail_in_session(conn IN OUT NOCOPY utl_smtp.connection) IS
    BEGIN
    utl_smtp.close_data(conn);
    END;
    PROCEDURE end_session(conn IN OUT NOCOPY utl_smtp.connection) IS
    BEGIN
    utl_smtp.quit(conn);
    END;
    END;

  • How can I email a video clip I downloaded into my iPhoto library to my friends? I tried creating an email and attaching the clip but there is no sound and no picture when the 5 minute attachment "plays." How can I file= export it to them from iPhoto?

    How can I email a video clip I downloaded into my iPhoto library to my friends? I tried creating an email and attaching the clip but there is no sound and no picture when the 5 minute attachment "plays." How can I file=>export it to them from iPhoto?

    Have them install Quicktime on their PC's from Apple's website, that's the easiest fix.

  • How to send email with attachment

    Hi friends,
    I am using soa 11.1.1.7.0
    Jdev 11.1.1.7.0
    WebLogic:- 10.3
    I want to generated email with attachment in BPEL 11g. Below is what i did in my bpel process
    Create simple hello world bpel process.
    In email activity below details are given
    <scope name="Email1">
    <bpelx:annotation>
    <bpelx:pattern patternName="bpelx:email"></bpelx:pattern>
    </bpelx:annotation>
       <variables>
       <variable name="varNotificationReq"
                              messageType="ns1:EmailNotificationRequest"/>
                    <variable name="varNotificationResponse"
                              messageType="ns1:ArrayOfResponse"/>
                    <variable name="NotificationServiceFaultVariable"
                              messageType="ns1:NotificationServiceErrorMessage"/>
                </variables>
                <sequence name="Sequence1">
                    <assign name="EmailParamsAssign">
                        <copy>
                            <from expression="string('Default')"/>
                            <to variable="varNotificationReq" part="EmailPayload"
                                query="/EmailPayload/ns1:FromAccountName"/>
                        </copy>
                        <copy>
                            <from expression="string('')"/>
                            <to variable="varNotificationReq" part="EmailPayload"
                                query="/EmailPayload/ns1:FromUserName"/>
                        </copy>
                        <copy>
                            <from expression="string('')"/>
                            <to variable="varNotificationReq" part="EmailPayload"
                                query="/EmailPayload/ns1:Bcc"/>
                        </copy>
                        <copy>
                            <from expression="string('')"/>
                            <to variable="varNotificationReq" part="EmailPayload"
                                query="/EmailPayload/ns1:Cc"/>
                        </copy>
                        <copy>
                            <from expression="string('')"/>
                            <to variable="varNotificationReq" part="EmailPayload"
                                query="/EmailPayload/ns1:ReplyToAddress"/>
                        </copy>
                        <copy>
                            <from expression="bpws:getVariableData('inputVariable','payload','/client:process/client:subject')"/>
                            <to variable="varNotificationReq" part="EmailPayload"
                                query="/EmailPayload/ns1:Subject"/>
                        </copy>
                        <copy>
                            <from expression="bpws:getVariableData('inputVariable','payload','/client:process/client:to')"/>
                            <to variable="varNotificationReq" part="EmailPayload"
                                query="/EmailPayload/ns1:To"/>
                        </copy>
                        <copy>
                            <from><Content xmlns="http://xmlns.oracle.com/ias/pcbpel/NotificationService"><MimeType xmlns="http://xmlns.oracle.com/ias/pcbpel/NotificationService">multipart/mixed</MimeType><ContentBody xmlns="http://xmlns.oracle.com/ias/pcbpel/NotificationService"><MultiPart xmlns="http://xmlns.oracle.com/ias/pcbpel/NotificationService"> <BodyPart xmlns="http://xmlns.oracle.com/ias/pcbpel/NotificationService"><MimeType xmlns="http://xmlns.oracle.com/ias/pcbpel/NotificationService"/><ContentBody xmlns="http://xmlns.oracle.com/ias/pcbpel/NotificationService"/><BodyPartName xmlns="http://xmlns.oracle.com/ias/pcbpel/NotificationService"/></BodyPart> <BodyPart xmlns="http://xmlns.oracle.com/ias/pcbpel/NotificationService"><MimeType xmlns="http://xmlns.oracle.com/ias/pcbpel/NotificationService"/><ContentBody xmlns="http://xmlns.oracle.com/ias/pcbpel/NotificationService"/><BodyPartName xmlns="http://xmlns.oracle.com/ias/pcbpel/NotificationService"/></BodyPart></MultiPart></ContentBody></Content></from>
                            <to variable="varNotificationReq" part="EmailPayload"
                                query="/EmailPayload/ns1:Content"/>
                        </copy>
                        <copy>
                            <from expression="string('text/html; charset=UTF-8')"/>
                            <to variable="varNotificationReq" part="EmailPayload"
                                query="/EmailPayload/ns1:Content/ns1:ContentBody/ns1:MultiPart/ns1:BodyPart[1]/ns1:MimeType"/>
                        </copy>
                        <copy>
                            <from expression="bpws:getVariableData('inputVariable','payload','/client:process/client:body')"/>
                            <to variable="varNotificationReq" part="EmailPayload"
                                query="/EmailPayload/ns1:Content/ns1:ContentBody/ns1:MultiPart/ns1:BodyPart[1]/ns1:ContentBody"/>
                        </copy>
                        <copy>
                            <from expression="string('text/plain')"/>
                            <to variable="varNotificationReq" part="EmailPayload"
                                query="/EmailPayload/ns1:Content/ns1:ContentBody/ns1:MultiPart/ns1:BodyPart[2]/ns1:MimeType"/>
                        </copy>
                        <copy>
                            <from expression="string('SampleStudent.txt')"/>
                            <to variable="varNotificationReq" part="EmailPayload"
                                query="/EmailPayload/ns1:Content/ns1:ContentBody/ns1:MultiPart/ns1:BodyPart[2]/ns1:BodyPartName"/>
                        </copy>
                        <copy>
                            <from expression="concat('file:///', bpws:getVariableData('inputVariable','payload','/client:process/client:attachmentURI'))"/>
                            <to variable="varNotificationReq" part="EmailPayload"
                                query="/EmailPayload/ns1:Content/ns1:ContentBody/ns1:MultiPart/ns1:BodyPart[2]/ns1:ContentBody"/>
                        </copy>                
                    </assign>
                    <invoke name="InvokeNotificationService"
                            portType="ns1:NotificationService"
                            partnerLink="NotificationService1"
                            inputVariable="varNotificationReq"
                            outputVariable="varNotificationResponse"
                            operation="sendEmailNotification"/>
                </sequence>
            </scope>
            <!--
              Asynchronous callback to the requester. (Note: the callback location and correlation id is transparently handled using WS-addressing.)
            -->
            <invoke name="callbackClient"
                    partnerLink="sendingemailwithattachmentsprcs_client"
                    portType="client:SendingEmailWithAttachmentsPrcsCallback"
                    operation="processResponse" inputVariable="outputVariable"/>
        </sequence>
    </process>
    I am able to generate Email with attachment but i cant see the data in the attached file.
    I think i need to convert the data before sending as a attachment. Could someone please help me in generating the txt files.
    Regards,
    Rajireddy.

    Re: sending fax

  • How to use Java with PL/SQL commands to send an email with attachment

    Apologizes in advance if this is the wrong place to ask the question.
    I need to use Java with PL/SQL commands to send an email with attachment. My java application runs from the command line and does some magic to gather info from an Oracle 11g db. If the DB has sendmail configured, I'd like to send the results of the data gathering as an attachment to the email addresses. I'm not sure how to do this. I've been reading up on on PL/SQL can send email with UTL_SMTP - with attachments. I'm just not sure how to translate that into being triggered by my Java application. Any suggestions or pointers on what I should read would be appreciated.
    Background - I've been programming in Java for 10+ years, but this is my first time using databases. I also have been on these forums for a long time, but lost my profile when it was switched to Oracle.
    Thanks for all help.

    user13726880 wrote:
    The original requirements were put together and given to me, an Oracle newbie. They expected the Java app to use something intrinsic to Oracle and Unix sendmail. To solve my problem, I use a JDBC connection to run some SQL commands. I take that data, format it and send the results by email to the user. By default the requirement is to send it as an HTML attachment using Unix 'sendmail'. So I do that using Runtime exec. I have also added JavaMail functionality as an alternative to sendmail. It works great and as expected.Sounds like a reasonable solution.
    Note however that PL/SQL itself can send email. And PL/SQL can call unix sendmail too.
    However myself I would have done it in java with JavaMail.

  • How we create custom infotype and how to configure with its subtypes.

    hai abap-hr gurus,
    how to create custom infotype and how to configure with its subtypes. when i am creating infotypes i am not getting how to configure subtypes.
    plz help me for this with an example code.
    thanks..
    kiran kumar

    Hi Kiran,
        Please fallow the below steps to create the custom infotype. If you have any quires let me know.
    For Creation of Infotype first Go to Transaction PM01, Enter the custom Infotype number which you want to create, it should be a 4 digit number and have to start with 9xxx.
    then select the `Employee Infotype' radio button
    after that select the `PS Structure Infotype'
    then click on Create… A separate table maintenance window appears
    then Create a PS structure with all the fields you want on the infotype
    Save and Activate the PS structure
    now Go back to the initial screen of PM01
    Click on `All' push button. It takes a few moments
    Click on `Technical Characteristics’. Infotype list screen appears
    Click on `Change'(pencil) button
    Now select your Infotype and click on `Detail' (magnifying glass) button
    Give `T591A' as subtype table & also Give `T591S' as subtype txt tab
    Give your subtype field as subtype field & Save and come back to PM01 initial screen
    Click on `Infotype Characteristics' … Infotype list screen appears
    Click on `Change' (pencil) button & on New Entries
    and then Enter your Infotype number and short text Here we have to set different Infotype Characteristics as per the requirement. (Better open another session with some standard Infotype's infotype characteristics screen and use as the reference
    to fill yours). Now save ur entries
    Now the Infotype is created and ready to use.
    If you want to change the layout of the Infotype as per your
    requirement…
    In the PM01 initial screen…Select `Screen' radio button and give
    2000 as the screen name, then click on edit.
    In the next screen.. Select `Layout Editor' and click `Change'.
    Screen default layout appears…here you can design/modify the
    screen..change the attributes of the fields..etc.
    Save and activate. (Don't forget to `Activate at every level)
    Regards,
    Ramakrishna kotha.

  • How do I send email with pictures attached, using PSE 9 and Windows 7 ?

    How do I send email with pictures attached, using PSE 9 and Windows 7 ?

    Try email attachment workflow in Organizer. http://tv.adobe.com/watch/learn-photoshop-elements-9/sharing-your-images-via-email/
    Thanks
    Andaleeb

  • Email with Attachment

    Hi All
    We are successfully able to send email with attachment on sql prompt. The problem is when we are trying to send the attachment through Application Express after submit process its showing the attached file but without its content.
    We hav created two such processes. Process one attachs the file as below
    declare
    file_id number;
    begin
    delete from dumy_file;
    select nvl(max(id),0)+1 into file_id from dumy_file;
    insert into dumy_file(id,name,file_obj_id,mime_type,blob_content)
    select file_id, filename, id ,mime_type,blob_content
    from htmldb_application_files where name = :P2_FILE;
    :P2_X := file_id;
    end;
    And process two send the email with attachment:
    declare
    file_name varchar2(100);
    mim_typ varchar2(50);
    begin
    select name into file_name from dumy_file where id = :P2_X;
    select MIME_TYPE into mim_typ from dumy_file where id = :P2_X;
    email_files(from_name => 'Aashu' ,
    to_names => :P2_EMAIL,
    subject => 'A test from APEX',
    message => 'A test message from APEX',
    html_message => 'A test message from APEX',
    filename1 => file_name,
    filetype1 => mim_typ);
    end;
    Here dumy_file is a custom table.
    Any help would be highly appreciated.
    Thanks
    saurabh

    [rem Purpose: Sends e-mail (text and/or html, either as a string or from a file)
    rem to one or more recipients (including cc and/or bcc recipients), along with
    rem up to 3 file attachments (text and/or binary; default is text/plain), using
    rem the UTL_SMTP package to send the e-mail, the DBMS_LOB package to read
    rem binary file attachments, and the UTL_ENCODE package to convert the binary
    rem attachments to BASE64 for character string (non-binary) transmission.
    rem BE AWARE THAT A COMMIT MAY BE DONE BY THIS ROUTINE (see HOWEVER... below).
    rem
    rem The complete parameter list for the email_files procedure is shown below:
    rem    from_name - name and e-mail address to put in the From field
    rem    to_names - names and e-mail addresses for the To field (separated by
    rem       commas or semicolons)
    rem    subject - text string for Subject field
    rem    message - text string or text file name for Message, if any
    rem    html_message - html string or html file name for Message, if any
    rem    cc_names - names and e-mail addresses for the Cc field, if any
    rem       (separated by commas or semicolons)
    rem    bcc_names - names and e-mail addresses for the Bcc field, if any
    rem       (separated by commas or semicolons)
    rem    filename1 - first file pathname to attach, if any
    rem    filetype1 - mime type of first file (defaults to 'text/plain')
    rem    filename2 - second file pathname to attach, if any
    rem    filetype2 - mime type of second file (defaults to 'text/plain')
    rem    filename3 - third file pathname to attach, if any
    rem    filetype3 - mime type of third file (defaults to 'text/plain')
    rem
    rem Sample names and e-mail addresses are: srea (attaches @<localhost> or
    rem @<mail domain>), [email protected], <[email protected]>, Steve Rea <[email protected]>,
    rem and "Steve Rea" <[email protected]> (e-mail addresses must be valid - validity
    rem checking is not done on them).
    rem
    rem A sample call in PL/SQL is shown below, which sends a text and html message,
    rem plus a text file and two binary files (note: the slash after "end;" must be
    rem the first character on it's line):
    rem
    rem    begin
    rem       email_files(from_name    => 'oracle' ,
    rem                   to_names     => '[email protected]',
    rem                   subject      => 'A test',
    rem                   message      => 'A test message',
    rem                   html_message => '<h2>A <u><i>test</i></u> message</h2>',
    rem                   filename1    => '/tmp/web_ptrbdca.txt',
    rem                   filename2    => '/tmp/password_standards.pdf',
    rem                   filetype2    => 'application/pdf',
    rem                   filename3    => '/tmp/wb703.jpg',
    rem                   filetype3    => 'image/jpeg');
    rem    end;
    rem    /
    rem
    rem If the message or html_message string has a file name in it (starting with
    rem a forward slash for unix or starting with '<drive letter>:\' or '\\' for
    rem Windows/DOS), the text or html file is copied into the e-mail as the message
    rem or html message; otherwise, the message or html_message is copied into the
    rem e-mail as-is.
    rem
    rem Attachment file types (mime types) that I've tested include:
    rem    text/plain, text/html, image/jpeg, image/gif, application/pdf,
    rem    application/msword
    rem A list of mime types can be seen at:
    rem    http://www.webmaster-toolkit.com/mime-types.shtml
    rem If the mime type does not begin with "text", it is assumed to be a binary
    rem file that will be encoded as base64 before transmission.
    rem
    rem This was derived from several sources, including:
    rem    Dave Wotton (Cambridge UK) - mail_files.sql at
    rem       http://home.clara.net/dwotton/dba/oracle_smtp.htm
    rem    Oracle Technology Network - maildemo.sql (demo_mail) at
    rem       http://www.oracle.com/technology/sample_code/tech/pl_sql/htdocs/Utl_Smtp_Sample.html
    rem    Akadia's "Read a file word by word using DBMS_LOB" Tip at
    rem       http://www.akadia.com/services/read_file_with_dbms_lob.html
    rem    Tom Kyte of Oracle's AskTom site (http://AskTom.oracle.com) -
    rem       answer to "File Exists which is not a BFILE" and others.
    rem
    rem NOTE: The user running this must have "create any directory" and "drop any
    rem directory" privileges ("create directory" was introduced in Oracle 9iR2),
    rem which must be granted from a system or dba account, such as:
    rem    grant create any directory to scott;
    rem    grant drop any directory to scott;
    rem  then:
    rem    connect / as sysdba
    rem    grant select on dba_directories to scott;
    rem or, for everyone to have directory privileges:
    rem    grant create any directory to public;
    rem    grant drop any directory to public;
    rem  then:
    rem    connect / as sysdba
    rem    grant select on dba_directories to public;
    rem Any file in any directory accessible to the user can be attached (not just
    rem the directories listed for the utl_file_dir parameter in the init.ora file).
    rem HOWEVER, if you are using this to send e-mail's with attached files (or
    rem reading the message text or message html from a file) from a trigger or
    rem from some other SQL that you can't or don't want to have a commit done,
    rem you will first need to create an Oracle directory entry for the directory
    rem containing the attached files and grant read access to it to public, such
    rem as:
    rem    create directory CESDIR_COMMON as '/home/common';
    rem    grant read on directory CESDIR_COMMON to public;
    rem
    rem You may also want to create a public synonym for this procedure, from the
    rem procedure's owner:
    rem    create or replace public synonym email_files for email_files;
    rem    grant execute on email_files to public;
    rem
    rem FYI: I tried using the utl_file package to read binary files:
    rem    utl_file.get_raw(v_file_handle,data,57);
    rem but got "ORA-29284: file read error" on .pdf files, so, I switched to use
    rem the dbms_lob package to read binary files:
    rem    dbms_lob.read(v_bfile_handle,read_bytes,v_pos,data);
    rem
    rem Author: Stephen Rea <[email protected]>
    rem    University of Arkansas Cooperative Extension Service
    rem Initial release: 12/21/04
    rem
    rem Updates:
    rem 1/31/05 - Fixed for triggers and other SQL that can't have a commit by
    rem    checking for and using already-defined Oracle directories ("create
    rem    directory" is a DDL statement that does a commit).
    rem 9/23/05 - Put exception handler in to handle the SMTP server being
    rem    down or unavailable.  (Solution from Ed Siegle at Swarthmore.)
    rem 7/14/06 - Additional changes to detect and handle Windows/DOS file names
    rem    (second and third characters ':\' for paths with drive letters, or
    rem    first and second characters '\\' for UNC paths).
    rem 8/25/06 - Some SMTP interfaces may require angle brackets (<>) around the
    rem    e-mail addresses, so, add them before returning results from get_address.
    rem    Also, they may not attach the host if relayed through a non-localhost,
    rem    so, attach the mail domain part (last two components) of the relay host
    rem    to the address if the mail domain is not specified in the address.
    rem
    create or replace procedure email_files(from_name varchar2,
                          to_names varchar2,
                          subject varchar2,
                          message varchar2 default null,
                          html_message varchar2 default null,
                          cc_names varchar2 default null,
                          bcc_names varchar2 default null,
                          filename1 varchar2 default null,
                          filetype1 varchar2 default 'text/plain',
                          filename2 varchar2 default null,
                          filetype2 varchar2 default 'text/plain',
                          filename3 varchar2 default null,
                          filetype3 varchar2 default 'text/plain')
    is
       -- Change the SMTP host name and port number below to your own values,
       -- if not localhost on port 25:
       smtp_host          varchar2(256) := 'localhost';
       smtp_port          number := 25;
       -- Change the boundary string, if needed, which demarcates boundaries of
       -- parts in a multi-part email, and should not appear inside the body of
       -- any part of the e-mail:
       boundary           constant varchar2(256) := 'CES.Boundary.DACA587499938898';
       recipients         varchar2(32767);
       directory_path     varchar2(256);
       file_name          varchar2(256);
       crlf               varchar2(2):= chr(13) || chr(10);
       mesg               varchar2(32767);
       conn               UTL_SMTP.CONNECTION;
       type varchar2_table is table of varchar2(256) index by binary_integer;
       file_array         varchar2_table;
       type_array         varchar2_table;
       i                  binary_integer;
       my_code            number;
       my_errm            varchar2(32767);
       -- Function to return the next email address in the list of email addresses,
       -- separated by either a "," or a ";".  From Oracle's demo_mail.  The format
       -- of mailbox may be in one of these:
       --    someone@some-domain
       --    "Someone at some domain" <someone@some-domain>
       --    Someone at some domain <someone@some-domain>
       FUNCTION get_address(addr_list IN OUT VARCHAR2) RETURN VARCHAR2 IS
          addr VARCHAR2(256);
          i    pls_integer;
          FUNCTION lookup_unquoted_char(str  IN VARCHAR2,
                                        chrs IN VARCHAR2) RETURN pls_integer IS
             c            VARCHAR2(5);
             i            pls_integer;
             len          pls_integer;
             inside_quote BOOLEAN;
          BEGIN
             inside_quote := false;
             i := 1;
             len := length(str);
             WHILE (i <= len) LOOP
                c := substr(str, i, 1);
                IF (inside_quote) THEN
                   IF (c = '"') THEN
                      inside_quote := false;
                   ELSIF (c = '\') THEN
                      i := i + 1; -- Skip the quote character
                   END IF;
                   GOTO next_char;
                END IF;
                IF (c = '"') THEN
                   inside_quote := true;
                   GOTO next_char;
                END IF;
                IF (instr(chrs, c) >= 1) THEN
                   RETURN i;
                END IF;
                <<next_char>>
                i := i + 1;
             END LOOP;
             RETURN 0;
          END;
       BEGIN
          addr_list := ltrim(addr_list);
          i := lookup_unquoted_char(addr_list, ',;');
          IF (i >= 1) THEN
             addr := substr(addr_list, 1, i - 1);
             addr_list := substr(addr_list, i + 1);
          ELSE
             addr := addr_list;
             addr_list := '';
          END IF;
          i := lookup_unquoted_char(addr, '<');
          IF (i >= 1) THEN
             addr := substr(addr, i + 1);
             i := instr(addr, '>');
             IF (i >= 1) THEN
                addr := substr(addr, 1, i - 1);
             END IF;
          END IF;
          i := lookup_unquoted_char(addr, '@');
          IF (i = 0 and smtp_host != 'localhost') THEN
             i := instr(smtp_host, '.', -1, 2);
             addr := addr || '@' || substr(smtp_host, i + 1);
          END IF;
          addr := '<' || addr || '>';
          RETURN addr;
       END;
       -- Procedure to split a file pathname into its directory path and file name
       -- components.
       PROCEDURE split_path_name(file_path IN VARCHAR2, directory_path OUT VARCHAR2,
          file_name OUT VARCHAR2) IS
          pos number;
       begin
          -- Separate the filename from the directory name
          pos := instr(file_path,'/',-1);
          if pos = 0 then
             pos := instr(file_path,'\',-1);
          end if;
          if pos = 0 then
             directory_path := null;
          else
             directory_path := substr(file_path,1,pos - 1);
          end if;
          file_name := substr(file_path,pos + 1);
       end;
       -- Procedure to append a file's contents to the e-mail
       PROCEDURE append_file(directory_path IN VARCHAR2, file_name IN VARCHAR2,
          file_type IN VARCHAR2, conn IN OUT UTL_SMTP.CONNECTION) IS
          generated_name  varchar2(30) := 'CESDIR' || to_char(sysdate,'HH24MISS');
          directory_name  varchar2(30);
          file_handle     utl_file.file_type;
          bfile_handle    bfile;
          bfile_len       number;
          pos             number;
          read_bytes      number;
          line            varchar2(1000);
          data            raw(200);
          my_code         number;
          my_errm         varchar2(32767);
       begin
          begin
             -- Grant access to the directory, unless already defined, and open
             -- the file (as a bfile for a binary file, otherwise as a text file).
             begin
                line := directory_path;
                select dd.directory_name into directory_name from dba_directories dd
                   where dd.directory_path = line and rownum = 1;
             exception
                when no_data_found then
                   directory_name := generated_name;
             end;
             if directory_name = generated_name then
                execute immediate 'create or replace directory ' || directory_name ||
                   ' as ''' || directory_path || '''';
                execute immediate 'grant read on directory ' || directory_name ||
                   ' to public';
             end if;
             if substr(file_type,1,4) != 'text' then
                bfile_handle := bfilename(directory_name,file_name);
                bfile_len := dbms_lob.getlength(bfile_handle);
                pos := 1;
                dbms_lob.open(bfile_handle,dbms_lob.lob_readonly);
             else
                file_handle := utl_file.fopen(directory_name,file_name,'r');
             end if;
             -- Append the file contents to the end of the message
             loop
                -- If it is a binary file, process it 57 bytes at a time,
                -- reading them in with a LOB read, encoding them in BASE64,
                -- and writing out the encoded binary string as raw data
                if substr(file_type,1,4) != 'text' then
                   if pos + 57 - 1 > bfile_len then
                      read_bytes := bfile_len - pos + 1;
                   else
                      read_bytes := 57;
                   end if;
                   dbms_lob.read(bfile_handle,read_bytes,pos,data);
                   utl_smtp.write_raw_data(conn,utl_encode.base64_encode(data));
                   pos := pos + 57;
                   if pos > bfile_len then
                      exit;
                   end if;
                -- If it is a text file, get the next line of text, append a
                -- carriage return / line feed to it, and write it out
                else
                   utl_file.get_line(file_handle,line);
                   utl_smtp.write_data(conn,line || crlf);
                end if;
             end loop;
          -- Output any errors, except at end when no more data is found
          exception
             when no_data_found then
                null;
             when others then
                my_code := SQLCODE;
                my_errm := SQLERRM;
                dbms_output.put_line('Error code ' || my_code || ': ' ||
                   my_errm);
          end;
          -- Close the file (binary or text)
          if substr(file_type,1,4) != 'text' then
             dbms_lob.close(bfile_handle);
          else
             utl_file.fclose(file_handle);
          end if;
          if directory_name = generated_name then
             execute immediate 'drop directory ' || directory_name;
          end if;
       end;
    begin
       -- Load the three filenames and file (mime) types into an array for
       -- easier handling later
       file_array(1) := filename1;
       file_array(2) := filename2;
       file_array(3) := filename3;
       type_array(1) := filetype1;
       type_array(2) := filetype2;
       type_array(3) := filetype3;
       -- Open the SMTP connection and set the From and To e-mail addresses
       conn := utl_smtp.open_connection(smtp_host,smtp_port);
       utl_smtp.helo(conn,smtp_host);
       recipients := from_name;
       utl_smtp.mail(conn,get_address(recipients));
       recipients := to_names;
       while recipients is not null loop
          utl_smtp.rcpt(conn,get_address(recipients));
       end loop;
       recipients := cc_names;
       while recipients is not null loop
          utl_smtp.rcpt(conn,get_address(recipients));
       end loop;
       recipients := bcc_names;
       while recipients is not null loop
          utl_smtp.rcpt(conn,get_address(recipients));
       end loop;
       utl_smtp.open_data(conn);
       -- Build the start of the mail message
       mesg := 'Date: ' || TO_CHAR(SYSDATE,'dd Mon yy hh24:mi:ss') || crlf ||
          'From: ' || from_name || crlf ||
          'Subject: ' || subject || crlf ||
          'To: ' || to_names || crlf;
       if cc_names is not null then
          mesg := mesg || 'Cc: ' || cc_names || crlf;
       end if;
       if bcc_names is not null then
          mesg := mesg || 'Bcc: ' || bcc_names || crlf;
       end if;
       mesg := mesg || 'Mime-Version: 1.0' || crlf ||
          'Content-Type: multipart/mixed; boundary="' || boundary || '"' ||
          crlf || crlf ||
          'This is a Mime message, which your current mail reader may not' || crlf ||
          'understand. Parts of the message will appear as text. If the remainder' || crlf ||
          'appears as random characters in the message body, instead of as' || crlf ||
          'attachments, then you''ll have to extract these parts and decode them' || crlf ||
          'manually.' || crlf || crlf;
       utl_smtp.write_data(conn,mesg);
       -- Write the text message or message file, if any
       if message is not null then
          mesg := '--' || boundary || crlf ||
             'Content-Type: text/plain; name="message.txt"; charset=US-ASCII' ||
              crlf ||
             'Content-Disposition: inline; filename="message.txt"' || crlf ||
             'Content-Transfer-Encoding: 7bit' || crlf || crlf;
          utl_smtp.write_data(conn,mesg);
          if instr(message,'/') = 1 or instr(message,':\') = 2 or
             instr(message,'\\') = 1 then
             split_path_name(message,directory_path,file_name);
             append_file(directory_path,file_name,'text',conn);
             utl_smtp.write_data(conn,crlf);
          else
             utl_smtp.write_data(conn,message || crlf);
          end if;
       end if;
       -- Write the HTML message or message file, if any
       if html_message is not null then
          mesg := '--' || boundary || crlf ||
             'Content-Type: text/html; name="message.html"; charset=US-ASCII' ||
             crlf ||
             'Content-Disposition: inline; filename="message.html"' || crlf ||
             'Content-Transfer-Encoding: 7bit' || crlf || crlf;
          utl_smtp.write_data(conn,mesg);
          if instr(html_message,'/') = 1 or instr(html_message,':\') = 2 or
             instr(html_message,'\\') = 1 then
             split_path_name(html_message,directory_path,file_name);
             append_file(directory_path,file_name,'text',conn);
             utl_smtp.write_data(conn,crlf);
          else
             utl_smtp.write_data(conn,html_message || crlf);
          end if;
       end if;
       -- Append the files
       for i in 1..3 loop
          -- If the filename has been supplied ...
          if file_array(i) is not null then
             split_path_name(file_array(i),directory_path,file_name);
             -- Generate the MIME boundary line according to the file (mime) type
             -- specified.
             mesg := crlf || '--' || boundary || crlf;
             if substr(type_array(i),1,4) != 'text' then
                mesg := mesg || 'Content-Type: ' || type_array(i) ||
                   '; name="' || file_name || '"' || crlf ||
                   'Content-Disposition: attachment; filename="' ||
                   file_name || '"' || crlf ||
                   'Content-Transfer-Encoding: base64' || crlf || crlf ;
             else
                mesg := mesg || 'Content-Type: application/octet-stream; name="' ||
                   file_name || '"' || crlf ||
                   'Content-Disposition: attachment; filename="' ||
                   file_name || '"' || crlf ||
                   'Content-Transfer-Encoding: 7bit' || crlf || crlf ;
             end if;
             utl_smtp.write_data(conn,mesg);
             -- Append the file contents to the end of the message
             append_file(directory_path,file_name,type_array(i),conn);
             utl_smtp.write_data(conn,crlf);
          end if;
       end loop;
       -- Append the final boundary line
       mesg := crlf || '--' || boundary || '--' || crlf;
       utl_smtp.write_data(conn,mesg);
       -- Close the SMTP connection
       utl_smtp.close_data(conn);
       utl_smtp.quit(conn);
    exception
       when utl_smtp.transient_error or utl_smtp.permanent_error then
          my_code := SQLCODE;
          my_errm := SQLERRM;
          begin
             utl_smtp.quit(conn);
          exception
             when utl_smtp.transient_error or utl_smtp.permanent_error then
                null;
          end;
          raise_application_error(-20000,
             'Failed to send mail - SMTP server down or unavailable: Error code ' ||
                my_code || ': ' || my_errm);
       when others then
          my_code := SQLCODE;
          my_errm := SQLERRM;
          raise_application_error(-20000,
             'Failed to send mail: Error code ' || my_code || ': ' || my_errm);
    end;
    Above is the code as required by you.In my original mail I have explained that how I'm calling this procedure.
    Thanks
    Saurabh

Maybe you are looking for

  • How to open a pdf file with command in WebBrowser control?

    Installed acrobat 6 or7 in my PC, then I load a WebBrowser control in IE to open a local pdf file with command line, such as "Page=3", and then open the same pdf file with WebBrowser control in other IE process, I found the command will affect other

  • Creation of Text Element in Custom Script for MEDRUCK

    hi,      i have a problem in the scripts, the script is customized one but driver program is standard one. few text element which are in the page windows but not appering in the output, how can we make them to appear in the output. can we add new tex

  • Managing the mail service for WebCenter Spaces

    I need to setup the mail service in WebCenter Spaces and could use some assistance. I have a standalone Linux DEV box that has WebCenter 11.1.1.2 installed. I have Documents, Discussions, wikis+blogs all working in this instance. Now, I need to confi

  • Re: setting path

    Grettings, I have a simple question. I have several java programs that I have written and that work successfully. My problem is that I am running these codes on numerous files located in several places. I would like to set the execution path rather t

  • What's the best way to sample multiple AI's with different sampling rates under one task?

    I'm using a PCI-6221 card and CVI 7.1. I have a tri-axis vibration sensor and two other pressure transducers. I want to take 10k samples from each vibration axis at 80 kHz. This is possible by configuring the scan rate of the "vibration task" to 240