Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

ORA-29278 को बायपास करने के लिए UTL_MAIL.SEND को क्रेडेंशियल दें

मूल रूप से आपको "निचले स्तर" का उपयोग करना होगा UTL_SMTP दूरस्थ एसएमटीपी सर्वर द्वारा आवश्यक विभिन्न एसएमटीपी संदेशों को भेजने के लिए पैकेज।

प्रमाणीकरण

Stefano Gio's Blog से :

 -- 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 ) बेस 64 एन्कोडेड हैं।

मेल भेजना

लेकिन बुरी खबर है, चूंकि अब आप एक निम्न-स्तरीय लाइब्रेरी का उपयोग कर रहे हैं, इसलिए आपको एसएमटीपी प्रोटोकॉल स्वयं। ऊपर के समान स्रोत से (केवल बिल्कुल न्यूनतम आवश्यक सामग्री रखने के लिए स्वयं द्वारा संपादित किया गया) ):

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 डेटाबेस 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 के दस्तावेज़ों को उद्धृत करने के लिए:

कृपया संबंधित दस्तावेज़ देखें कैसे बनाएं और वॉलेट प्रबंधित करें

कुछ और रीडिंग:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle getConnection धीमा

  2. ORACLE सेलेक्ट डिस्टिंक्ट कई कॉलम लौटाता है और कहाँ

  3. क्या यह एक संभावित ओरेकल बग है या क्या मुझे कुछ याद आ रहा है?

  4. Oracle डाटाबेस में PL/SQL Ref Cursors का परिचय

  5. Oracle में स्तंभ मानों की अदला-बदली