
اگر تا امروز ایمیلهای پروژههای خود را از طریق اپلیکیشنها یا سرویسهای جانبی میفرستادید، وقتش شده با یک راهکار مستقیم آشنا شوید: پکیج UTL_SMTP در اوراکل.
این ابزار قدرتمند به شما امکان میدهد مستقیماً از داخل دیتابیس و با PL/SQL ایمیل ارسال کنید — چه متن ساده، چه HTML رنگارنگ!
در این مقاله آمورش اوراکل در بخش آموزش پکیج های اوراکلی یاد میگیرید:
- UTL_SMTP چیست و چه کاربردی دارد
- مراحل دقیق ارسال ایمیل با این پکیج
- مثال عملی ارسال متن ساده و HTML
- نکات امنیتی و رفع خطاها
در دنیای امروز که بیشتر سیستمها با API کار میکنند، نیاز داریم دادهها را از سرویسهای بیرونی بگیریم یا به آنها بفرستیم. پیشنهاد می شود نوشته زیر را مطالعه کنید:
در این نوشته شما می خوانید
UTL_SMTP چیست و چرا استفاده کنیم؟
UTL_SMTP یک پکیج داخلی اوراکل است که با پروتکل SMTP (Simple Mail Transfer Protocol) کار میکند.
این پروتکل همان چیزی است که ۹۹٪ ایمیلهای جهان با آن منتقل میشوند.
مزیت اصلی این پکیج:
- بدون نیاز به نرمافزار جانبی
- کنترل کامل روی هدرها و ساختار ایمیل
- امکان ارسال به چند گیرنده
- قابل استفاده برای متن ساده و HTML
اگر بخواهید ایمیلهای گزارش، هشدار یا صورتحساب بهطور خودکار از دیتابیس ارسال شوند، UTL_SMTP بهترین گزینه است.
مراحل ارسال ایمیل با UTL_SMTP
- اتصال به سرور SMTP با
OPEN_CONNECTION - معرفی خود با
HELOیاEHLO - ثبت فرستنده با
MAIL - ثبت گیرنده با
RCPT - ورود به حالت نوشتن با
OPEN_DATA - نوشتن هدر و متن ایمیل با
WRITE_DATA - پایان نوشتن داده با
CLOSE_DATA - قطع ارتباط با
QUIT
جدول مرجع پروسیجرهای پکیج UTL_SMTP
| نام | کاربرد | مثال |
|---|---|---|
| OPEN_CONNECTION | اتصال به SMTP Server | c := UTL_SMTP.OPEN_CONNECTION('smtp.example.com', 25); |
| HELO / EHLO | معرفی دامنه فرستنده | UTL_SMTP.HELO(c, 'example.com'); |
| ثبت ایمیل فرستنده | 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 '||CHR(13)||CHR(10));
UTL_SMTP.WRITE_DATA(c, 'To: You '||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, 'Hi from UTL_SMTP
PL/SQL Rocks!
');
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 داری، در بخش کامنتها بپرس.
سؤالی درباره این مقاله داری؟
اگر نکتهای در این مقاله برات مبهم بود یا خواستی بیشتر بدونی، همین حالا برام بنویس تا دقیق و صمیمی پاسخت رو بدم — مثل یه گفتوگوی واقعی 💬
برو به صفحه پرسش و پاسخ
دیدگاهتان را بنویسید