utl_smtp отправить 1kb вложение - PullRequest
0 голосов
/ 06 сентября 2018

Мне нужно отправить HTML-сообщение, а также прикрепить одно конкретное изображение для этого. Уже сделал HTML-часть сообщения, и теперь мне все еще нужно отправить это изображение на электронную почту, но я получаю только 1 КБ вложения.

Я действительно не могу понять, что я делаю неправильно. Перепробовал много методов, и я не могу понять.

Любая идея может помочь мне, пожалуйста. Спасибо!

a и b - просто маскированные значения, я не использую их вот так.

create or replace procedure send_html_utl_mail(p_from                IN VARCHAR2,
                                               p_to                  IN VARCHAR2,
                                               p_cc                  IN VARCHAR2 default null,
                                               p_subject             IN VARCHAR2,
                                               p_body                IN VARCHAR2,
                                               p_attach_name         IN VARCHAR2 DEFAULT NULL,
                                               p_attach_mime         IN VARCHAR2 DEFAULT NULL,
                                               p_attach_blob         IN BLOB DEFAULT NULL)
is
    l_conn              utl_smtp.connection;
    l_boundary          varchar2(32) := sys_guid();
    l_counter           pls_integer;
    l_length            pls_integer;
    buff_size           pls_integer := 57;
    l_raw               raw(57);
begin
    -- Connect
    l_conn := utl_smtp.open_connection( <a> );
    utl_smtp.helo( l_conn, '<b>' );
    utl_smtp.mail( l_conn, p_from );
    utl_smtp.rcpt( l_conn, p_to );
    utl_smtp.open_data(l_conn);

    -- Header
    utl_smtp.write_data( l_conn, 'From: ' || p_from || utl_tcp.crlf );
    utl_smtp.write_data( l_conn, 'To: ' || p_to || utl_tcp.crlf );
    utl_smtp.write_data( l_conn, 'CC: ' || p_cc || utl_tcp.crlf );
    utl_smtp.write_data( l_conn, 'Subject: ' || p_subject || utl_tcp.crlf );
    utl_smtp.write_data( l_conn, 'MIME-Version: 1.0' || utl_tcp.crlf );
    utl_smtp.write_data( l_conn, 'Content-Type: multipart/mixed; ' || utl_tcp.crlf );
    utl_smtp.write_data( l_conn, ' l_boundary= "' || l_boundary || '"' || utl_tcp.crlf );
    utl_smtp.write_data( l_conn, utl_tcp.crlf );

    -- Body
    utl_smtp.write_data( l_conn, '--' || l_boundary || utl_tcp.crlf );
    utl_smtp.write_data( l_conn, 'Content-type:text/html;' || utl_tcp.crlf );
    utl_smtp.write_data( l_conn, ' charset=iso-8859-1' || utl_tcp.crlf );
    utl_smtp.write_data( l_conn, utl_tcp.crlf );
    utl_smtp.write_data( l_conn, p_body || utl_tcp.crlf );
    utl_smtp.write_data( l_conn, utl_tcp.crlf );

    -- Attachment
    utl_smtp.write_data ( l_conn,  '--' || l_boundary || utl_tcp.crlf );
    utl_smtp.write_data ( l_conn,  'Content-Type: '|| p_attach_mime ||';'|| utl_tcp.crlf );
    utl_smtp.write_data ( l_conn, 'Content-Disposition: inline; filename="'|| p_attach_name ||'"' || utl_tcp.crlf);  
    utl_smtp.write_data ( l_conn, 'Content-Transfer-Encoding' || ': ' || 'base64' || utl_tcp.crlf);
    utl_smtp.write_data ( l_conn, utl_tcp.crlf);
    l_counter := 1;
    l_length := dbms_lob.getlength(p_attach_blob);
    while l_counter < l_length loop
        dbms_lob.read(p_attach_blob, buff_size, l_counter, l_raw);
        utl_smtp.write_raw_data( l_conn, utl_encode.base64_encode(l_raw));
        utl_smtp.write_data( l_conn, utl_tcp.crlf);
        l_counter := l_counter + buff_size;
    end loop;
    utl_smtp.write_data( l_conn, utl_tcp.crlf);

    -- Close Email
    utl_smtp.write_data( l_conn, '--' || l_boundary || '--' || utl_tcp.crlf );
    utl_smtp.write_data( l_conn, utl_tcp.crlf || '.' || utl_tcp.crlf );
    utl_smtp.close_data( l_conn );
    utl_smtp.quit( l_conn );    
end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...