|Oracle9i Supplied PL/SQL Packages and Types Reference
Release 1 (9.0.1)
Part Number A89852-02
UTL_SMTP , 11 of 15
These APIs provide more fine-grain control to the
data() API; in other words, to the SMTP
open_data() sends the
DATA command. After that,
write_raw_data() write a portion of the e-mail message. A repeat call to
write_raw_data() appends data to the e-mail message. The
close_data() call ends the e-mail message by sending the sequence
<CR><LF>.<CR><LF> (a single period at the beginning of a line).
UTL_SMTP.OPEN_DATA ( RETURN reply; UTL_SMTP.OPEN_DATA ( UTL_SMTP.WRITE_DATA ( UTL_SMTP.WRITE_RAW_DATA ( UTL_SMTP.CLOSE_DATA ( RETURN reply; UTL_SMTP.CLOSE_DATA (
The SMTP connection.
The portion of the text of the message to be sent, including headers, in [RFC822] format.
The calls to
close_data() must be made in the right order. A program calls
open_data() to send the
DATA command to the SMTP server. After that, it can call
write_raw_data() repeatedly to send the actual data. The data is terminated by calling
open_data() is called, the only APIs that can be called are
close_data(). A call to other APIs will result in an
INVALID_OPERATION exception being raised.
The application must ensure that the contents of the body parameter conform to the MIME(RFC822) specification. The
data() routine will terminate the message with a
<CR><LF>.<CR><LF> sequence (a single period at the beginning of a line), as required by RFC821. It will also translate any sequence of
<CR><LF>.<CR><LF> (single period) in the body to
<CR><LF>..<CR><LF> (double period). This conversion provides the transparency as described in Section 4.5.2 of RFC821.
Notice that this conversion is not bullet-proof. Consider this code fragment:
utl_smtp.write_data(`some message.' || chr(13) || chr(10)); utl_smtp.write_data(`.' || chr(13) || chr(10));
Since the sequence
<CR><LF>.<CR><LF> is split between two calls to
write_data(), the implementation of
write_data() will not detect the presence of the data-terminator sequence, and therefore, will not perform the translation. It will be the responsibility of the user to handle such a situation, or it may result in premature termination of the message data.
XXX_data() should be called only after
rcpt() have been called. The connection to the SMTP server must be open and a mail transaction must be active when this routine is called.
Note that there is no function form of
write_data() because the SMTP server does not respond until the data-terminator is sent during the call to
VARCHAR2) data sent using
write_data() API is converted to US7ASCII before it is sent. If the text contains multibyte characters, each multibyte character in the text that cannot be converted to US7ASCII is replaced by a `?' character. If 8BITMIME extension is negotiated with the SMTP server using the
EHLO() API, multibyte
VARCHAR2 data can be sent by first converting the text to
RAW using the
UTL_RAW package, and then sending the
RAW data using