基本的に、「下位レベル」UTL_SMTP
離れたSMTPサーバーに必要なさまざまなSMTPメッセージを送信するためのパッケージ。
認証
StefanoGhioのブログ から :
-- prepare base64 encoded username and password
l_encoded_username := UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode(UTL_RAW.cast_to_raw(username)));
l_encoded_password := UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode(UTL_RAW.cast_to_raw(password)));
-- Open connection and send EHLO and AUTH messages
l_conn := UTL_SMTP.open_connection(smtpHost, smtpPort);
UTL_SMTP.ehlo(l_conn, smtpHost);--DO NOT USE HELO
UTL_SMTP.command(l_conn, 'AUTH', 'LOGIN');
UTL_SMTP.command(l_conn, l_encoded_username);
UTL_SMTP.command(l_conn, l_encoded_password);
ここでの主な問題は、AUTH
を送信できる必要があるということです。 サーバーの「正しい」認証スキームを使用したメッセージ。 "smtp.live.com"については言えません 具体的には、サーバーの構成によっては、PLAIN
などの異なる認証スキームである可能性があります。 およびLOGIN
、DIGEST_MD5
、...通常(常に?)パラメータ(username
、password
)はbase64でエンコードされています。
メールの送信
しかし、悪いニュース つまり、現在低レベルのライブラリを使用しているため、SMTPプロトコル あなた自身。上記と同じソースから(絶対に必要なものだけを保持するように自分で編集 ):
UTL_SMTP.mail(l_conn, mailFrom);
UTL_SMTP.rcpt(l_conn, rcptTo);
[...]
--start multi line message
UTL_SMTP.open_data(l_conn);
--prepare mail header
UTL_SMTP.write_data(l_conn, 'To: ' || rcptTo || crlf);
UTL_SMTP.write_data(l_conn, 'From: ' || mailFrom || crlf);
UTL_SMTP.write_data(l_conn, 'Subject: ' || messageSubject || crlf);
--include the message body
UTL_SMTP.write_data(l_conn, messageBody || crlf || crlf);
--send the email and close connection
UTL_SMTP.close_data(l_conn);
UTL_SMTP.quit(l_conn);
SSL/TLSの使用
そして今、非常に悪いニュース :一部のサーバーには安全な接続が必要でした 。 530 Must issue a STARTTLS command first
。残念ながら、 UTL_SMTP.STARTTLS
>
Oracle Database 11gリリース2(11.2.0.2)以降でのみサポートされます。
幸運にも最新バージョンのOracleを使用できる場合は、サーバーとの安全な接続を開くために、次のようなものを作成する必要があります。
l_conn := UTL_SMTP.open_connection(l_conn, smtpHost,
wallet_path => 'file:/oracle/wallets/smtp_wallet',
wallet_password => 'password',
secure_connection_before_smtp => FALSE);
UTL_SMTP.starttls(l_conn);
Oracleのドキュメントを引用するには:
作成方法と作成方法については、対応するドキュメントを参照してください。ウォレットの管理
その他の測定値:
- からの電子メールの送信に関するOracleのドキュメントPL / SQL
UTL_SMTP
を使用してメールメッセージを適切に送信する方法を示す良い例もいくつかあります。 。 - SMTP認証ウィキペディアのページ を参照してください。 典型的なSMTPセッションの文字起こし用。