APEX_MAIL : ارسال ایمیل از طریق PL/SQL

پکیج APEX_MAIL اوراکل : ارسال ایمیل از طریق زبان برنامه نویسی PL/SQL
در این قسمت از مقاله زمیوس قصد داریم آموزش دیتابیس می خواهیم از طریق پکیج اوراکلی به نام APEX_MAIL و از طریق زبان برنامه نویسی PL/SQL ارسال ایمیل انجام دهیم و از دیتابیس بتوانیم ایمیل ارسال کنیم.
معرفی
راه های مختلفی برای ارسال ایمیل از طریق زبان PL/SQL وجود دارد:
UTL_TCP : تمام تعاملات و ارتباطات را با استفاده از پروتکل اصلی TCP انجام می دهد.
UTL_SMTP : تمام تعاملات و ارتباطات را با استفاده از پروتکل اصلی SMTP انجام می دهد. این رویکرد و روش بسیار محبوب شده است، زیرا بسیار سادهتر از کدنویسی مستقیم عملیات TCP است، نمونه کدهای زیادی در اینترنت وجود دارد، و به شما این امکان را میدهد که هر عملیاتی که از طریق ایمیل در دسترس است را انجام دهید.
UTL_MAIL : یک پکیج built-in داخلی Oracle می باشد که یک رابط interface ایمیل اولیه را فراهم می کند.این سرویس یک سری محدودیت هایی دارد از جمله پشتیبانی محدودی از فایل های پیوست در ایمیل می باشد ، بنابراین برنامه نویس ها اغلب ترجیح میدهند از رویکرد UTL_SMTP استفاده کنند.
APEX_MAIL : این در واقع یک سرویس API در سیستم APEX است و ایمیل ها در به صورت صف و پشت هم در جدول قرار می گیرند که به نوبت از طریق یک job دیتابیسی ارسال ایمیل صورت گیرد و ارسال ایمیل ها در بستر و رویکرد UTL_SMTP ارسال می شود. برای استفاده از پکیج APEX_MAIL بایستی حتما سرویس APEX را کامل نصب کنید .
چه دلیلی دارد ما از پکیج APEX_MAIL استفاده کنیم؟
این پکیج نسبت به پکیج UTL_MAIL انعطاف پذیری و قابلیت های بیشتری دارد.
طریقه کد نویسی و دستورات اجرا کردن ارسال ایمیل در پکیج APEX_MAIL خیلی ساده تر و خواناتر از پکیج UTL_SMTP می باشد.
این پکیج به صورت تراکنش محور transactional کار می کند به این صورت که ایمیل ها فقط زمانی ارسال می شوند که session پایگاه داده تغییرات را در جداول صف queue انجام دهد. به این معناست که اگر درخواستهای ایمیل از یک تراکنش بزرگتر باشد که با شکست مواجه میشود، میتوان آن را Rollback کرد.
تراکنش ها به صورت نامتقارن asynchronous می باشد. ایمیل ها در صف queue قرار می گیرند و می توانند بعدا ارسال شوند. که به این معنی است که ایمیل ها در صف قرار بگیرد حتما و به بدون تاخیر ارسال می شود.همچنین اگر سرور ایمیل مقصد به طور موقت کار نکند، ایمیل ها تا زمان ارسال در صف باقی می مانند.
همیشه به شما این اجازه را می دهد که با ساختار های آماده ایمیل mail template کار کنید. که آموزش این مورد در این مقاله قرار نمی گیرد.
اگرچه برای استفاده از پکیج APEX_MAIL در کد PL/SQL حتما توسط یک برنامه کاربردی APEX نامیده می شود، طراحی شده است، اما پکیج APEX_MAIL برای کد PL/SQL به صورت مستقل به خوبی کار می کند.
نصب و راه اندازی سرور ایمیل APEX
یک سرور ایمیل APEX ایمیل ها را به یک mail server یا سرورهای وابسته به بستر ایمیل ارسال می کند. جزئیات سرویس باید در instance به نام APEX تنظیم شود و که برای اینکار شما می توانید در آدرس زیر تنظیمات را انجام دهید:
با استفاده از فضای کاری INTERNAL وارد دیتابیس APEX شوید.
سپس به آدرس "(Manage Instance > Instance Settings > Email (tab" بروید.
بعد از انجام تنظیمات نهایی سرور ایمیل روی گزینه "Apply Changes" را کلیک کنید.
اگر دیتابیس شما به صورت سرورهای محلی local باشد نام سرور به صورت پیش فرض به نام "localhost" روی پورت 25 می باشد. البته اگر به یک سرور ایمیل خارجی دسترسی دارید می توانید TLS استفاده کنید که در این صورت سرور شما که همان instance به نام APEX می باشد به یک سرویس احراز هویت Certificate لازم دارد. که برای این کار مراحل زیر را انجام دهید:
با استفاده از فضای کاری INTERNAL وارد دیتابیس APEX شوید.
سپس به آدرس "(Manage Instance > Instance Settings > Wallet (tab" بروید.
سپس مسیر کیف پول Wallet را وارد کنید و با پیشوند "file:" و اگر کیف پول روی ورود خودکار auto-login تنظیم شده باشد، نیاز به وارد کردن رمز عبور کیف پول Wallet نیست.
بعد از انجام تنظیمات نهایی سرور ایمیل روی گزینه "Apply Changes" را کلیک کنید.
شبکه ACL
ما باید مطمئن شویم که پایگاه داده می تواند یک فراخوانی callout به سرور ایمیل ایجاد کند که این به یک شبکه ACL برای میزبان host و port پورت خاص نیاز دارد که ما در مثال زیر از آدرس "localhost:25" برای سرور ایمیل استفاده کردیم و اصل ACL باید کاربر "APEX_XXXXXX" باشد.
تنظیمات گروه امنیتی Security (اختیاری)
اگر PL/SQL بخواهد از طریق APEX بخواهد پکیج را فراخوانی کند نیازی به تنظیمات این بخش نیست.
اگر بخواهید از پکیج APEX_MAIL از زبان برنامه نویسی PL/SQL بدون استفاده از APEX استفاده کنید حتما نیاز است به صورت مثال زیر تنظیمات گروه های امنیتی را به صورت دستی انجام دهید.
APEX نسخه قبل از 5.1 برای انجام این کار باید اقدامات و مسیرهای طولانی تری را مانند دستور زیر انجام می دادیم.
ارسال ایمیل های متن ساده
با استفاده از پروسیجر و فانکشن هایی با ویژگی overload به نام SEND می توانید ارسال ایمیل را به شکل زیر انجام دهید که اجرای این فانکشن مانند دستور زیر یک مقداری عددی برمی گرداند که این همان MAIL_ID جدول صف هایی ایمیل به نام APEX_MAIL_QUEUE می باشد.
شما می توانید همچنین در ارسال ایمیل پارامترهای P_CC, P_BCC و P_REPLYTO را تنظیم کنید.
ایمیل های HTML
پارامتر P_BODY_HTML به شما اجازه می دهد که ایمیل هایی ارسال کنید که بدنه متن آن به صورت HTML باشد.
پیوست ها (Attachments)
با استفاده از پروسیجری به نام ADD_ATTACHMENT می توانید در ارسال ایمیل فایل هایی را به صورت CLOB و BLOB به ایمیل الصاق attach کنید. همچنین برای ارسال ایمیل نیاز به پروسیجر SEND داریم و MAIL_ID مربوط به ایمیل مربوطه ارسال شده را دریافت کنیم.
مثال زیر نمونه ای ارسال ایمیل با دوفایل پیوست به صورت BLOB و CLOB می باشد.
مدیریت صف ارسال در APEX mail
در پکیچ APEX_MAIL تمامی ایمیل هایی که بایستی ارسال شود در جدولی به نام APEX_MAIL_QUEUE ذخیره و insert می شود. و تمامی فایل های پیوست ایمیل در جدولی به نام APEX_MAIL_ATTACHMENTS قرار می گیرد و تمامی ایمیل ها مرتب شده در جدول از طریق جاب دیتابیسی به نام ORACLE_APEX_MAIL_QUEUE اجرا و ارسال می شود که این جاب در واقع برای ارسال ایمیل پروسیجری به نام WWV_FLOW_MAIL.PUSH_QUEUE_IMMEDIATE را هر 5 دقیقه یکبار اجرا و فراخوانی میکند.
از طریق دستور می توانیم بررسی کنیم که چه تعداد ایمیلی وجود دارد که در صف بایستی ارسال شود.
از طریق اجرا دستور زیر می توانید ارسال ایمیل را به صورت دستی و force اجرا کنید.
برای مطالعه بیشتر لینک های زیر را مشاهده کنید:

کار با Built-in Functions در پایتون (2)
در این مقاله زمیوسی در بخش آموزش قصد داریم در مورد کار با Built-in Functions در پایتون صحبت کنیم. شما قبلاً با محبوب ترین تابع در پایتون یعنی ()print آشنا شدید.

Cheat Sheet در پایتون - مبانی پایتون (1)
پایتون 3 یک زبان برنامه نویسی واقعا همه کاره است که دوستش دارم هم برای توسط توسعه دهندگان وب web developers، دانشمندان داده data scientists و ...

10 وب سایت برای حل تمام سوالات مربوط به برنامه نویسی
در این مقاله زمیوسی، قصد داریم در مورد 10 سایت که برای حل تمام سوالات مربوط به برنامه نویسی شما صحبت کنیم. در هنگام یادگیری برنامه نویسی یا توسعه یک نرم افزار ....

APEX_ZIP : مدیریت فایل های Zip از PL/SQL
در این قسمت از آموزش مقاله زمیوس در بخش دیتابیس قصد داریم مجدد با یکی از قابلیت های APEX آشنا شویم در این مقاله با استفاده از پکیج APEX_ZIP ...