برنامه نویسی ارسال ایمیل در ماژول دروپال

برنامه نویسی ارسال ایمیل در ماژول دروپال

ارسال ایمیل در دروپال

ارسال ایمیل، عملیاتی است که به وفور در یک سایت انجام می شود. در زمان ثبت نام کاربر، ارسال ایمیل از فرم تماس، آگاهی از وجود آپدیت ماژول ها و غیره مواردی هستند که به صورت طبیعی دروپال برای آنها ایمیل ارسال می کند. تنظیمات مختلفی برای ارسال این ایمیل ها در دروپال موجود است. شما به عنوان یک دروپال کار نیاز به دانستن ساز و کار ارسال ایمیل ندارید. همین طور ماژول های دیگری نیز هستند که با نثب آنها، ایمیل هایی ارسال می کنند و یا روی فرآیند ارسال ایمیل در دروپال عملیاتی را انجام می دهند.

ارسال ایمیل در ماژول

هیچکدام از این موارد بحث ما در این مقاله نیست. کاری که ما می خواهیم انجام بدهیم درگیر شدن در فرآیند ارسال ایمیل در یک ماژول دروپال است که خود می نویسیم. کار ما در این مقاله، برنامه نویسی است. نوشتن برنامه ای که با استفاده از روش های دروپال و تبعیت از API آن، ایمیل ارسال کنند. ممکن است در موقعیت های متفاوتی ماژول شما نیاز به ارسال ایمیل داشته باشد که با امکانات معمول در دروپال و ماژول های آن امکان پذیر نباشد. بنابراین باید خود دست به کار شده و ماژولی در این رابطه بنویسید.

ارسال ایمیل در هر جایی از ماژول دروپال

در مقاله های قبلی دروپالیکا در حوزه ماژول نویسی دروپال، مواردی مانند درست کردن فرم ها در دروپال (بخش اول و بخش دومایجاد صفحات جدید در سایت و ایجاد یک بلوک جدید آموزش داده شده است. در این مقاله صرفا به این می پردازیم که چطور با استفاده از ساز و کارهای دروپال، برنامه نویسی کنیم تا ایمیلی ارسال شود. بدیهی است که می توانید از این آموزش در هر جایی در دروپال استفاده کنید. می توانید صفحه ای داشته باشید که حاوی فرمی است که نتیجه آن ارسال یک ایمیل خواهد بود و یا بلوکی حاوی یک فرم داشته باشید که به ارسال ایمیل مبادرت می کند.

ارسال ایمیل در دروپال با تابع drupal_mail

برای ایجاد ایمیل و ارسال آن در دروپال باید تابع drupal_mail را فراخوانی کنیم. ورودی های این تابع در کد زیر مشخص شده است:

drupal_mail($module, $key, $to, $language, $params = array(), $from = NULL, $send = TRUE)

اولین ورودی این تابع نام یک ماژول است. این ماژولی است که قالب ایمیل را درست می کند. این ماژول می تواند ماژول دیگری باشد و یا خود ماژولی که داریم می نویسم. به هر حال ماژول یاد شده باید hook_mail را پیاده سازی کرده باشد. برای اینکه بدانیم یک ماژول چطور این کار را انجام می دهد، ابتدا به این موضوع می پردازیم.

پیاده سازی hook_mail

احتمالا برای ارسال ایمیل، hook_mail را پیاده سازی می کنیم. در مقالات قبل دروپالیکا، به این پرداخته ایم که چطور یک hook پیاده سازی می شود. مثلا در اینجا اگر ماژول ما drupalika_module نام دارد، باید تابعی به نام drupalika_module_mail داشته باشیم. یعنی نام ماژول جایگزین کلمه hook می شود.

hook_mail($key, &$message, $params)

این تابع ایمیل را بر اساس  متغیر های ورودی، آماده می کند. ورودی های چنین تابعی را در کد بالا ملاحظه می کنید. این تابع سه ورودی باید داشته باشد.

متغیر اول کلید است. در واقع این متغیر مشخص می کند که ایمیلی که قرار است ارسال شود از چه نوعی است. مثلا در یک ماژول ممکن است ایمیل های مختلفی ارسال شود، این پارامتر مشخص می کند که کدام یک از این ایمیل ها هم اکنون در حال ارسال است. مثلا ماژول Contact در دروپال که برای درست کردن فرم های تماس با ما از آن استفاده می کنیم، ایمیل های مختلفی ارسال می کند، هر کدام از این ایمیل ها با یک کلید مشخص می شوند که از یکدیگر متمایز شوند.

متغیر دوم، یک آرایه حاوی اطلاعاتی درباره پیامی است که ارسال می شود. خانه های مختلف این آرایه عبارتند از:

  • id
  • to
  • subject
  • body
  • from
  • headers

این آرایه به صورت ارجاعی به این تابع ارسال می شود و ما می توانیم آن را تغییر بدهیم. در واقع کاری که در این تابع انجام می دهیم تغییر همین آرایه است. مثلا موضوع و یا بدنه ایمیل را تولید کرده و در این آرایه در subject و body قرار می دهیم. مثلا به کد زیر توجه کنید:

function drupalika_module_mail($key, &$message, $params) {
	$message['subject'] = "Subject of email";
	$message['body'][] = "Body of email";
}

متغیر سوم تابع، پارامتر هایی هستند که توسط تابع drupal_mail ارسال شده اند. در واقع برنامه ای که می خواسته ایمیل را ارسال کند و تابع drpal_mail را فراخوانی کرده است، پارامتر هایی برای تکمیل در بدنه یا موضوع ایمیل و ... را ارسال کرده است که از طریق این متغیر سوم به اینجا می رسد.

به نمونه کد زیر توجه کنید:

function drupalika_module_mail($key, &$message, $params) {
	$message['subject'] = "Subject of email";
	$message['body'][] = t('@name sent you the following message:', array('@name' => $params['name']));
}

یک پارامتر name داریم که به این تابع ارسال شده است، از طریق آرایه $params به آن دسترسی پیدا می کنیم و از آن برای محتوای ایمیل استفاده کرده ایم. با استفاده از تابع t آن را در یک رشته متنی جایگزین کرده ایم.

چون ماژول ما، فقط یکنمونه ایمیل می فرستد، استفاده ای از متغیر $key نکرده ایم.

بیشتر درباره تابع drupal_mail

گفتیم که از تابع drupal_mail برای ارسال ایمیل در دروپال استفاده می کنیم. این تابع قادر است با استفاده از هر ماژولی ایمیل را ارسال کند. اگر بخواهیم در ماژول خودمان ایمیل را درست کنیم و تنظیمات مختلف آن را انجام بدهیم باید hook_mail را نیز پیاده سازی کنیم که در بخش قبل توضیح داده شد.

در اینجا صحبت در مورد تابع drupal_mail را ادامه می دهیم. همانطور که دیدیم، این تابع به صورت زیر تعریف شده است:

drupal_mail($module, $key, $to, $language, $params = array(), $from = NULL, $send = TRUE)

در مورد متغیر اول آن صحبت کردیم. متغیر دوم کلید است که مشخص می کند چه ایمیلی باید ارسال شود. در این باره نیز در بخش hook_mail توضیحاتی را ارائه کردیم. متغیر سوم یعنی to مشخص می کند که ایمیل باید برای چه فر یا افرادی ارسال شود. چند نمونه از مقادیر این متغیر را در فهرست زیر می بینید:

  • info@drupalika.org
  • info@drupalika.org, drupalika@gmail.com
  • Drupalika <info@drupalika.org>
  • Drupalika <info@drupalika.org>, DrupalikaOrg <info@gmail.com>

متغیر سوم، آبجکت زبان است. برای به دست آوردن آبجکت زبان پیش فرض سایت می توانید تابع language_default() را فراخوانی کنید و نتیجه آن را برای این ورودی به کار ببرید.

متغیر چهارم، آرایه پارامتر ها است. اینها مقادیری اختیاری هستند که برای درست کردن ایمیل ارسال می کنیم. درباره این پارامتر ها نیز در hook_mail صحبت کردیم.

متغیر پنجم، یعنی from مشخص می کند که ایمیل از طرف چه کسی ارسال شده است. مثلا می توانیم آدرس ایمیلی را که در قسمت From قرار می گیرد را در اینجا بنویسیم.

برای ارسال ایمیل، متغیر آخر یعنی send باید مقدار TRUE داشته باشد. به صورت پیش فرض نیز همین مقدار ارسال شده است.

نمونه ای از فراخوانی این تابع را در کد زیر مشاهده می کنید:

  $module = 'drupalika_module';
  $key = 'email';
  $to = "info@drupalika.org";
  $from = variable_get('site_mail', 'drupalika@gmail.com');
  global $user;
  $params = array(
	'name' => $user->name,
  );
  $language = language_default();
  $send = TRUE;
  $result = drupal_mail($module, $key, $to, $language, $params, $from, $send);
  if ($result['result'] == TRUE) {
    drupal_set_message(t('Your message has been sent.'));
  }
  else {
    drupal_set_message(t('Some problems have occurred.'), 'error');
  };

خروجی تابع drupal_mail نیز با اهمیت است. از این طریق شما می توانید ببینید که آیا سایت توانسته ایمیل را ارسال کند یا خیر. همانطور که در کد بالا می بینید. خروجی این تابع آرایه ای است که یکی از ایندکس های آن result است که نتیجه را مشخص می کند. فقط باید توجه کنید که در اینجا فقط در سطح برنامه شما مشخص می شود که ایمیل ارسال شده است یا خیر. در حالیکه مکانیزم های دیگری نیز در ارسال ایمیل تاثیر دارند که تضمینی برای ارسال صحیح آن ها نیست. بنابراین موفقیت در اینجا برای برنامه نویسی و کد شما کافی است ولی ارسال ایمیل واقعی تضمین نمی شود.

نظرات

سلام
بسیار ممنون

تصویر admin
لطف دارید جناب ستارزاده.

ارسال نظر