オラクルでメールを送ってみる

oracleのマニュアルみながらutl_smtpパッケージ使って
id:yohei-aにメールを送ってみたw

DECLARE
  c UTL_SMTP.CONNECTION;

  PROCEDURE send_header(name IN VARCHAR2, header IN VARCHAR2) AS
  BEGIN
    UTL_SMTP.WRITE_DATA(c, name || ': ' || header || UTL_TCP.CRLF);
  END;

BEGIN
  c := UTL_SMTP.OPEN_CONNECTION('-----------------------');
  UTL_SMTP.HELO(c, 'foo.com');
  UTL_SMTP.MAIL(c, '-----------------------');
  UTL_SMTP.RCPT(c, '-----------------------');
  UTL_SMTP.OPEN_DATA(c);
  send_header('From',    '"Sender" <--------------------------->');
  send_header('To',      '"Recipient" <--------------------------->');
  send_header('Subject', 'Konnichiwa');
  UTL_SMTP.WRITE_DATA(c, UTL_TCP.CRLF || 'niwa desu. utl_smtp package wo tukatte mail okutte mimasita.');
  UTL_SMTP.CLOSE_DATA(c);
  UTL_SMTP.QUIT(c);
EXCEPTION
  WHEN utl_smtp.transient_error OR utl_smtp.permanent_error THEN
    BEGIN
      UTL_SMTP.QUIT(c);
    EXCEPTION
      WHEN UTL_SMTP.TRANSIENT_ERROR OR UTL_SMTP.PERMANENT_ERROR THEN
        NULL; -- When the SMTP server is down or unavailable, we don't have
              -- a connection to the server. The QUIT call will raise an
              -- exception that we can ignore.
    END;
    raise_application_error(-20000,
      'Failed to send mail due to the following error: ' || sqlerrm);
END;
/

数分後にスパムメールが来たとid:youhei-aから言われましたがww

ひとまず2バイト文字はおくれませんでした。
きっとエンコードすれば良いはず

本当はutl_mail使いたかったのですが、「引数がおかしいよ?」てオラクルに怒られて
中見ようとおもったら、パッケージボディがラッピングされてて見れなかったのでひとまず放置

あとは、utl_smtpをプロシージャ内で使うときにACLではねられてしまったので調査中

あと何個か解決したら、これとjob_schedulerでがばがば送れる!