यदि आप अपने कस्टम मॉड्यूल के माध्यम से मेल भेजने की कोशिश कर रहे हैं तो आप नीचे बताए गए गाइड का पालन कर सकते हैं। कहो, मेरे पास "कॉमर्स कैनवस (Commerce_canvas)" नामक एक मॉड्यूल था। 1. लिंक का समर्थन करने और अन्य एन्कोडिंग प्रकार जोड़ने के लिए सबसे पहले Drupal का मेल फ़ंक्शन
/**
* Implements hook_mail_alter()
* @param string $message
*/
function commerce_canvas_mail_alter(&$message) {
$headers = array(
'MIME-Version' => '1.0',
'Content-Type' => 'text/html; charset=iso-8859-1; format=flowed',
'Content-Transfer-Encoding' => '8Bit',
'X-Mailer' => 'Drupal',
);
foreach ($headers as $key => $value) {
$message['headers'][$key] = $value;
}
}
- फिर, अपने मॉड्यूल में HOOK_mail को हुक करें
/**
* Implements hook_mail()
* @param string $key
* @param string $message
* @param unknown_type $params
*/
function commerce_canvas_mail($key, &$message, $params) {
//Language Selection
$options = array(
'langcode' => $message['language']->language,
);
switch($key) {
case "user_payment_notification" :
$message['subject'] = isset($params['subject']) ? $params['subject'] : $message['subject'] = t('Payment recieved @site-name', array('@site-name' => variable_get('site_name', 'Express Canvas')), $options);
$message['body'][] = isset($params['body']) ? $params['body'] : NULL;
if (isset($params['headers']) && is_array($params['headers'])) {
$message['headers'] += $params['headers'];
}
break;
}
}
- फिर आपको अपने मॉड्यूल से मेल प्राप्त करने के लिए एक आवरण समारोह बनाने की आवश्यकता है।
function commerce_canvas_mail_send(array $values = array()) {
$module = $values['module'];
$key = $values['key'];
$to = $values['to'];
$from = $values['form'];
$language = isset($values['lang']) ? $values['lang'] : language_default();
$params = array(
'subject' => $values['subject'],
'body' => $values['body'],
);
if(array_key_exists('headers', $values)) {
$params['headers'] = $values['headers']; //Assumed as an array
}
$send = TRUE;
$mail = drupal_mail($module, $key, $to, $language, $params, $from, $send);
if($mail['result']) {
return TRUE;
} else {
$error_msg = 'Failed to send the email in commerce_canvas Module';
watchdog('canvas-email', $error_msg, array(), WATCHDOG_ALERT);
return FALSE;
}
}
यह फ़ंक्शन ईमेल भेजेगा और साथ ही कुछ भी गलत होने पर डिबग संदेश बना देगा। लेकिन फिर भी आप HTML मेल नहीं भेज पाएंगे क्योंकि आपको अपने स्वयं के साथ Drupal 7 के डिफ़ॉल्ट DefaultMailSystem को विस्तारित करने की आवश्यकता है । तो निम्नलिखित के रूप में करने की जरूरत है,
class CommerceCanvasMailSystem extends DefaultMailSystem {
/**
* Concatenate and wrap the e-mail body for plain-text mails.
*
* @param $message
* A message array, as described in hook_mail_alter().
*
* @return
* The formatted $message.
*/
public function format(array $message) {
$message['body'] = implode("\n\n", $message['body']);
return $message;
}
/**
* Send an e-mail message, using Drupal variables and default settings.
*
* @see http://php.net/manual/en/function.mail.php
* @see drupal_mail()
*
* @param $message
* A message array, as described in hook_mail_alter().
* @return
* TRUE if the mail was successfully accepted, otherwise FALSE.
*/
public function mail(array $message) {
$mimeheaders = array();
foreach ($message['headers'] as $name => $value) {
$mimeheaders[] = $name . ': ' . mime_header_encode($value);
}
$line_endings = variable_get('mail_line_endings', MAIL_LINE_ENDINGS);
return mail(
$message['to'],
mime_header_encode($message['subject']),
// Note: e-mail uses CRLF for line-endings. PHP's API requires LF
// on Unix and CRLF on Windows. Drupal automatically guesses the
// line-ending format appropriate for your system. If you need to
// override this, adjust $conf['mail_line_endings'] in settings.php.
preg_replace('@\r?\n@', $line_endings, $message['body']),
// For headers, PHP's API suggests that we use CRLF normally,
// but some MTAs incorrectly replace LF with CRLF. See #234403.
join("\n", $mimeheaders)
);
}
}
अगला आपको एक नया थीम फ़ंक्शन पंजीकृत करने की आवश्यकता है जो आपके कस्टम टेम्पलेट फ़ाइल को आपके hook_theme () में कॉल करेगा।
/**
* Implements hook_theme();
*/
function commerce_canvas_theme($existing, $type, $theme, $path) {
if($type == 'module') {
return array(
'tracking_code_email' => array(
'variables' => array(
'image_path' => NULL,
'user' => NULL,
'page' => NULL,
),
'template' => 'commerce-canvas-tracking-code',
'path' => drupal_get_path('module', 'commerce_canvas').'/theme',
),
);
}
}
अंतिम बार आपको ईमेल भेजने के समय इस थीम फ़ंक्शन को कॉल करना होगा,
function a_custom_function($params) {
$email_text_user = theme('tracking_code_email', array(
'image_path' => $base_url . '/' . drupal_get_path('module', 'commerce_canvas') . '/images',
'user' => null,
'page' => array(
'greet_text' => t('Thank you for your order at Express Canvas. Your order is ready and has shipped. You may track your order using FedEx tracking with your tracking number: '.$order->field_tracking_number['und']['0']['value'].''),
),
));
$sent_to_user = commerce_canvas_mail_send($email_values_user);
}
ये Drupal 7 में HTML ईमेल को सही ढंग से संभालने के लिए पूर्ण स्निपेट हैं। इस प्रकार हुक_टैम में आप अपना कस्टम टेम्प्लेट दे सकते हैं।