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



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" باشد.

شبکه ACL

 

تنظیمات گروه امنیتی Security (اختیاری)

اگر PL/SQL بخواهد از طریق APEX بخواهد پکیج را فراخوانی کند نیازی به تنظیمات این بخش نیست.

اگر بخواهید از  پکیج APEX_MAIL از زبان برنامه نویسی PL/SQL بدون استفاده از APEX  استفاده کنید حتما نیاز است به صورت مثال زیر تنظیمات گروه های امنیتی را  به صورت دستی انجام دهید.

تنظیمات گروه امنیتی Security

APEX نسخه قبل از 5.1 برای انجام این کار باید اقدامات و مسیرهای طولانی تری را مانند دستور زیر انجام می دادیم.   

2تنظیمات گروه امنیتی Security

ارسال ایمیل های متن ساده

با استفاده از پروسیجر و فانکشن هایی با ویژگی overload به نام SEND می توانید ارسال ایمیل را به شکل زیر انجام دهید که اجرای این فانکشن مانند دستور زیر یک مقداری عددی برمی گرداند که این همان MAIL_ID جدول صف هایی ایمیل به نام APEX_MAIL_QUEUE می باشد.

ارسال ایمیل های متن سادهشما می توانید  همچنین در ارسال ایمیل پارامترهای P_CC, P_BCC و P_REPLYTO  را تنظیم کنید.

 

ایمیل های HTML

پارامتر P_BODY_HTML  به شما اجازه می دهد که ایمیل هایی ارسال کنید که بدنه متن آن به صورت HTML باشد.

ایمیل های HTML

 

پیوست ها (Attachments)

با استفاده از پروسیجری به نام ADD_ATTACHMENT  می توانید در ارسال ایمیل فایل هایی را به صورت CLOB و BLOB به ایمیل الصاق attach کنید. همچنین برای ارسال ایمیل نیاز به پروسیجر SEND داریم و MAIL_ID مربوط به ایمیل مربوطه ارسال شده را دریافت کنیم.

مثال زیر نمونه ای ارسال ایمیل با دوفایل پیوست به صورت BLOB و CLOB می باشد.

پیوست ها (Attachments)

مدیریت صف ارسال در APEX mail

در پکیچ APEX_MAIL تمامی ایمیل هایی که بایستی ارسال شود در جدولی به نام  APEX_MAIL_QUEUE ذخیره و insert می شود. و تمامی فایل های پیوست ایمیل در جدولی به نام APEX_MAIL_ATTACHMENTS  قرار می گیرد و تمامی ایمیل ها مرتب شده در جدول از طریق جاب دیتابیسی به نام ORACLE_APEX_MAIL_QUEUE اجرا و ارسال می شود که این جاب در واقع برای ارسال ایمیل پروسیجری به نام WWV_FLOW_MAIL.PUSH_QUEUE_IMMEDIATE را هر 5 دقیقه یکبار اجرا و فراخوانی میکند.

از طریق دستور می توانیم بررسی کنیم که چه تعداد ایمیلی وجود دارد که در صف بایستی ارسال شود.

مدیریت صف ارسال در APEX mail

از طریق اجرا دستور زیر می توانید ارسال ایمیل را به صورت دستی و force اجرا کنید.

مدیریت صف ارسال در APEX mail 2

برای مطالعه بیشتر لینک های زیر را مشاهده کنید: 

    جهت ثبت پیام باید در سایت عضو شوید و یا وارد سایت شده باشید .
    ورود به حساب کاربری / ایجاد حساب کاربری
    کار با Built-in Functions در پایتون (2)

    کار با Built-in Functions در پایتون (2)

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

    Cheat Sheet در پایتون - مبانی پایتون (1)

    Cheat Sheet در پایتون - مبانی پایتون (1)

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

    10 وب سایت برای حل تمام سوالات مربوط به برنامه نویسی

    10 وب سایت برای حل تمام سوالات مربوط به برنامه نویسی

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

    APEX_ZIP : مدیریت فایل های Zip از PL/SQL

    APEX_ZIP : مدیریت فایل های Zip از PL/SQL

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