sql >> Databáze >  >> RDS >> Oracle

Chcete-li obejít ORA-29278, dejte přihlašovací údaje na UTL_MAIL.SEND

V zásadě musíte použít "nižší úroveň" UTL_SMTP za účelem odeslání různých zpráv SMTP požadovaných vzdáleným serverem SMTP.

Ověření

Z blogu Stefana Ghio :

 -- 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);  

Hlavním problémem je, že musíte být schopni odeslat AUTH pomocí "správného" schématu ověřování pro váš server. Nemohu říci pro "smtp.live.com" konkrétně, ale v závislosti na konfiguraci serveru mohou být různé autentizační schéma, například PLAIN a LOGIN , DIGEST_MD5 , ... Obvykle (vždy ?) parametry (username , password ) jsou kódovány base64.

Odesílání pošty

Ale špatné zprávy je, protože nyní používáte nízkoúrovňovou knihovnu, musíte implementovat klientskou část Protokol SMTP vy sám. Ze stejného zdroje jako výše (upraveno mnou, abych zachoval pouze naprosto minimum nezbytných věcí ):

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); 

Používání SSL/TLS

A teď k velmi špatným zprávám :některý server vyžadoval zabezpečené připojení . Nárokování něčeho jako 530 Must issue a STARTTLS command first . Bohužel UTL_SMTP.STARTTLS je podporováno pouze od Oracle Database 11g verze 2 (11.2.0.2).

Pokud máte to štěstí, že používáte nejnovější verzi Oracle, měli byste napsat něco takového, abyste otevřeli zabezpečené spojení se svým serverem:

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);

Chcete-li citovat dokumentaci společnosti Oracle:

V odpovídající dokumentaci naleznete jak vytvořit a spravovat peněženku

Ještě pár čtení:



  1. Mohu slepě nahradit všechny funkce mysql_ funkcí mysqli_?

  2. Odstraňte prázdné řádky

  3. MySQL CAST vs CONVERT

  4. Říjen 2014CPU havaruje ArcGIS Desktop