ESC را فشار دهید تا بسته شود

زمیوس آموزش، یادگیری و سرگرمی

آموزش جامع پکیج UTL_SMTP — از اتصال تا ارسال ایمیل در اوراکل

اگر تا امروز ایمیل‌های پروژه‌های خود را از طریق اپلیکیشن‌ها یا سرویس‌های جانبی می‌فرستادید، وقتش شده با یک راهکار مستقیم آشنا شوید: پکیج UTL_SMTP در اوراکل.

این ابزار قدرتمند به شما امکان می‌دهد مستقیماً از داخل دیتابیس و با PL/SQL ایمیل ارسال کنید — چه متن ساده، چه HTML رنگارنگ!

در این مقاله آمورش اوراکل در بخش آموزش پکیج های اوراکلی یاد می‌گیرید:

  • UTL_SMTP چیست و چه کاربردی دارد
  • مراحل دقیق ارسال ایمیل با این پکیج
  • مثال عملی ارسال متن ساده و HTML
  • نکات امنیتی و رفع خطاها

در دنیای امروز که بیشتر سیستم‌ها با API کار می‌کنند، نیاز داریم داده‌ها را از سرویس‌های بیرونی بگیریم یا به آن‌ها بفرستیم. پیشنهاد می شود نوشته زیر را مطالعه کنید:

در این نوشته شما می خوانید

UTL_SMTP چیست و چرا استفاده کنیم؟

UTL_SMTP یک پکیج داخلی اوراکل است که با پروتکل SMTP (Simple Mail Transfer Protocol) کار می‌کند.

این پروتکل همان چیزی است که ۹۹٪ ایمیل‌های جهان با آن منتقل می‌شوند.

مزیت اصلی این پکیج:

  • بدون نیاز به نرم‌افزار جانبی
  • کنترل کامل روی هدرها و ساختار ایمیل
  • امکان ارسال به چند گیرنده
  • قابل استفاده برای متن ساده و HTML

اگر بخواهید ایمیل‌های گزارش، هشدار یا صورت‌حساب به‌طور خودکار از دیتابیس ارسال شوند، UTL_SMTP بهترین گزینه است.

مراحل ارسال ایمیل با UTL_SMTP

  1. اتصال به سرور SMTP با OPEN_CONNECTION
  2. معرفی خود با HELO یا EHLO
  3. ثبت فرستنده با MAIL
  4. ثبت گیرنده با RCPT
  5. ورود به حالت نوشتن با OPEN_DATA
  6. نوشتن هدر و متن ایمیل با WRITE_DATA
  7. پایان نوشتن داده با CLOSE_DATA
  8. قطع ارتباط با QUIT

جدول مرجع پروسیجرهای پکیج UTL_SMTP

نام کاربرد مثال
OPEN_CONNECTION اتصال به SMTP Server c := UTL_SMTP.OPEN_CONNECTION('smtp.example.com', 25);
HELO / EHLO معرفی دامنه فرستنده UTL_SMTP.HELO(c, 'example.com');
MAIL ثبت ایمیل فرستنده UTL_SMTP.MAIL(c, 'me@example.com');
RCPT ثبت ایمیل گیرنده UTL_SMTP.RCPT(c, 'you@example.com');
OPEN_DATA شروع نوشتن پیام UTL_SMTP.OPEN_DATA(c);
WRITE_DATA نوشتن متن و هدرها UTL_SMTP.WRITE_DATA(c, 'Subject: Test');
CLOSE_DATA پایان نوشتن پیام UTL_SMTP.CLOSE_DATA(c);
QUIT بستن اتصال UTL_SMTP.QUIT(c);

ارسال ایمیل متن ساده با استفاده از پکیج UTL_SMTP

				
					DECLARE
  c  UTL_SMTP.connection;
BEGIN
  c := UTL_SMTP.OPEN_CONNECTION('smtp.example.com', 25);
  UTL_SMTP.HELO(c, 'example.com');
  UTL_SMTP.MAIL(c, 'me@example.com');
  UTL_SMTP.RCPT(c, 'you@example.com');

  UTL_SMTP.OPEN_DATA(c);
  UTL_SMTP.WRITE_DATA(c, 'From: me@example.com'||CHR(13)||CHR(10));
  UTL_SMTP.WRITE_DATA(c, 'To: you@example.com'||CHR(13)||CHR(10));
  UTL_SMTP.WRITE_DATA(c, 'Subject: Test Email'
  ||CHR(13)||CHR(10)||CHR(13)||CHR(10));
  UTL_SMTP.WRITE_DATA(c, 'Hello from Oracle!');
  UTL_SMTP.CLOSE_DATA(c);

  UTL_SMTP.QUIT(c);
END;
/

				
			

ارسال ایمیل HTML با UTF-8 با استفاده از پکیج UTL_SMTP

				
					DECLARE
  c  UTL_SMTP.connection;
BEGIN
  c := UTL_SMTP.OPEN_CONNECTION('smtp.example.com', 25);
  UTL_SMTP.EHLO(c, 'example.com');
  UTL_SMTP.MAIL(c, 'me@example.com');
  UTL_SMTP.RCPT(c, 'you@example.com');
  
  UTL_SMTP.OPEN_DATA(c);
  UTL_SMTP.WRITE_DATA(c, 'From: Me <me@example.com>'||CHR(13)||CHR(10));
  UTL_SMTP.WRITE_DATA(c, 'To: You <you@example.com>'||CHR(13)||CHR(10));
  UTL_SMTP.WRITE_DATA(c, 'Subject: HTML Test'||CHR(13)||CHR(10));
  UTL_SMTP.WRITE_DATA(c, 'Content-Type: text/html; charset=UTF-8'
  ||CHR(13)||CHR(10)||CHR(13)||CHR(10));
  UTL_SMTP.WRITE_DATA(c, '<h2 style="color:blue">Hi from UTL_SMTP</h2>
  <p>PL/SQL Rocks!</p>');
  UTL_SMTP.CLOSE_DATA(c);
  
  UTL_SMTP.QUIT(c);
END;
/

				
			

نکات امنیتی در استفاده از پکیج UTL_SMTP

  • ACL (Access Control List) را فعال کنید. بدون این کار، خطای ORA-24247 دریافت می‌کنید.
  • SMTP امن (TLS/SSL) برای سرورهایی مانند Gmail نیاز به پیکربندی اضافه و Oracle Wallet دارید.
  • مدیریت خطاها:
    • ORA-29278: مشکل موقت یا احراز هویت
    • ORA-29279: رد ایمیل توسط سرور

سوالات متداول درباره پکیج UTL_SMTP در اوراکل

برای استفاده از UTL_SMTP باید ابتدا دسترسی شبکه‌ای کاربر را با ACL (Access Control List) فعال کنید.

این کار با پکیج DBMS_NETWORK_ACL_ADMIN انجام می‌شود.

بدون این پیکربندی هنگام اجرای کد خطای ORA-24247: network access denied خواهید گرفت.

بله، با تنظیم هدر Content-Type به text/html می‌توانید ایمیل HTML ارسال کنید.

برای پیوست‌ها باید از کدگذاری Base64 و مرزبندی MIME استفاده کنید.

این قابلیت نیازمند ایجاد ساختار ایمیل چندبخشی (multipart/mixed) است.

UTL_MAIL ساده‌تر است و برای ارسال سریع ایمیل بدون کنترل دقیق طراحی شده.

UTL_SMTP کنترل کامل روی دستورات SMTP و هدرها را به شما می‌دهد، اما نیازمند کدنویسی بیشتر است.

اگر دقت و انعطاف مد نظر باشد، UTL_SMTP بهتر است.

به‌صورت پیش‌فرض خیر. برای کار با سرورهایی که TLS یا SSL نیاز دارند (مثل Gmail)، باید از Oracle Wallet به همراه UTL_TCP یا Java Stored Procedures** استفاده کنید تا قبل از شروع تبادل داده، لایه امنیتی برقرار شود.

جمع‌بندی

پکیج UTL_SMTP اوراکل ابزاری دقیق و منعطف برای ارسال ایمیل در محیط دیتابیس است.

اگر دنبال کنترل کامل روی ساختار ایمیل خود هستید یا می‌خواهید فرآیندهای گزارش‌گیری و هشدار را خودکار کنید، این پکیج انتخابی مطمئن است.

📥 اگر سوالی داری در مورد پکیج UTL_SMTP در Oracle داری، در بخش کامنت‌ها بپرس.

سؤالی درباره این مقاله داری؟

اگر نکته‌ای در این مقاله برات مبهم بود یا خواستی بیشتر بدونی، همین حالا برام بنویس تا دقیق و صمیمی پاسخت رو بدم — مثل یه گفت‌وگوی واقعی 💬

برو به صفحه پرسش و پاسخ

میثم راد

من یه برنامه نویسم که حسابی با دیتابیس اوراکل رفیقم! از اونایی ام که تا چیزی رو کامل نفهمم،ول کن نیستم، یادگرفتن برام مثل بازیه، و نوشتن اینجا کمک می کنه تا چیزایی که یاد گرفتم رو با بقیه به شریک بشم، با هم پیشرفت کنیم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *