मूल रूप से आपको "निचले स्तर" का उपयोग करना होगा 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 के दस्तावेज़ों को उद्धृत करने के लिए:
कृपया संबंधित दस्तावेज़ देखें कैसे बनाएं और वॉलेट प्रबंधित करें
कुछ और रीडिंग:
- Oracle के दस्तावेज़ों से ई-मेल भेजने के बारे में पीएल/एसक्यूएल
कुछ अच्छे उदाहरण भी हैं जो आपको
UTL_SMTP
. का उपयोग करके अपना मेल संदेश ठीक से भेजने के लिए दर्शाते हैं । - देखें SMTP प्रमाणीकरण विकिपीडिया पृष्ठ एक विशिष्ट एसएमटीपी सत्र के प्रतिलेखन के लिए।