কাস্টম টেমপ্লেট সহ ইমেল প্রেরণের জন্য কীভাবে দ্রুপাল_মেল () ব্যবহার করবেন


31

আমি drupal_mail()ইমেলগুলি প্রেরণের জন্য ফাংশনটি ব্যবহার করতে চাই তবে একটি কাস্টম এইচটিএমএল টেমপ্লেট দিয়ে যাতে তারা আমার ওয়েবসাইট ডিজাইনের সাথে মিল রাখে তবে আমি হুকস এবং মডিউল ইত্যাদির সম্পূর্ণ নবাগত, তাই আমি কোনও ধরণের ব্যাখ্যা বা প্রশংসা করব নতুনদের দয়া করে গাইড করুন।

আমি নিজে টেমপ্লেট তৈরি করতে পারি, drupal_mail()এটির কীভাবে এটি ব্যবহার করতে হয় সে সম্পর্কে আমার কেবল জানতে হবে।

উত্তর:


39

আপনি যদি নিজের কাস্টম মডিউলটির মাধ্যমে মেলগুলি প্রেরণের চেষ্টা করছেন তবে নীচের বর্ণিত গাইডটি অনুসরণ করতে পারেন। বলুন, আমার কাছে "কমার্স ক্যানভাস (কমার্স_ক্যানভাস)" নামে একটি মডিউল ছিল। ১. লিঙ্কগুলি সমর্থন করার জন্য এবং অন্যান্য এনকোডিংয়ের ধরণ যুক্ত করতে প্রথমে ড্রুপালের মেল ফাংশনটি পরিবর্তন করুন


/**
 * 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;
    }
}
  1. তারপরে, আপনার মডিউলে 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;
    }
}


  1. তারপরে আপনার মডিউল থেকে মেলটি চাওয়ার জন্য আপনাকে একটি র‍্যাপার ফাংশন তৈরি করতে হবে।

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;
    }
}

এই ফাংশনটি ইমেল প্রেরণ করবে এবং ত্রুটিযুক্ত কিছু হলে ডিবাগ বার্তা তৈরি করবে। তবে তবুও আপনি এইচটিএমএল মেলটি প্রেরণ করতে পারবেন না কারণ আপনার নিজের সাথে ড্রপাল 7 এর ডিফল্ট ডিফল্ট মেল সিস্টেমটি প্রসারিত করতে হবে । সুতরাং নিম্নলিখিত হিসাবে করা প্রয়োজন,


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);

}

এগুলি এইচটিএমএল ইমেলটি সঠিকভাবে দ্রুপাল handle এ হ্যান্ডেল করার সম্পূর্ণ স্নিপেট are এইভাবে হুক_থমে আপনি আপনার পছন্দসই টেম্পলেটটি দিতে পারেন।


1
আপনার উত্তরের জন্য আপনাকে অনেক ধন্যবাদ - আমি ঠিক তাই চেয়েছিলাম! দুর্ভাগ্যক্রমে এখন যেহেতু আমি কাজটি জড়িত দেখেছি এবং সেখানে মডিউল রয়েছে যা আমার জন্য সবকিছু করতে পারে আমি মনে করি আমার নিজের হুক তৈরির দিকে ছুটে যাওয়ার আগে অপেক্ষা করব। যাইহোক, আমি আপনার উত্তরের জন্য আপনাকে যথেষ্ট ধন্যবাদ জানাতে পারি না কারণ এটি আমি যা চেয়েছিলাম তা সবই। আমি আশা করি আমি একাধিকবার উপচে পড়তে পারি
অ্যান্ডি

11
দুর্দান্ত উত্তর। আমি
ড্রপালকে যেভাবে

1
But still you won't be able to send the HTML mail...ঠিক আছে।
এজাজ

@ এজে, হ্যাঁ আপনি পারেন এটি যে।
অনিক মুখোপাধ্যায়

1
রেকর্ডের জন্য: নিম্নলিখিত মডিউলটি ব্যবহার করা আরও সহজ: drupal.org/project/simple_mail
মঙ্গল

11

আপনি যদি কাস্টম টেম্পলেটগুলির সাহায্যে বহির্গামী মেলগুলি থিম করতে চান তবে আপনার এইচটিএমএল মেল মডিউলটি ব্যবহার করা উচিত ।

আপনি আপনার বার্তাগুলিকে একইভাবে থিম করতে দেয় ঠিক একইভাবে আপনি আপনার ওয়েবসাইটের বাকী থিমটি দিন।

এটি অন্যান্য মডিউলগুলির সাথে প্রিন্ট , মেল মাইম ইত্যাদির সাথে ভালভাবে কাজ করে

এইচটিএমএল মেল ব্যবহার করতে আপনাকে মেল সিস্টেম মডিউল ইনস্টল করতে হবে ।


1
দয়া করে নোট করুন যে এইচটিএমএল মেল মাইম মাইম মডিউলটির সাথে কাজ করে, মাইম মেল নয় (মাইম মেল এবং এইচটিএমএল মেল একই জিনিস করে এবং একে অপরকে ওভাররাইড করে)।
প্যাট্রিক কেনি

@ আইড্রোক আপনার উত্তরের জন্যও ধন্যবাদ আপনি কি জানেন যে আমি পিএইচপি কোড ব্যবহার করে প্রেরিত থিম ইমেলগুলিতে এইচটিএমএল মেল মডিউলটি ব্যবহার করতে পারি কিনা?
অ্যান্ডি

4

ব্যবহারের উদাহরণ:

    $module = 'module_name';
    $key = 'key';
    $language = language_default();
    $params = array();
    $from = NULL;
    $send = FALSE;
    $message = drupal_mail($module, $key, $email, $language, $params, $from, $send);

    $message['subject'] = $subject;
    $message['body'] = array();
    $message['body'][] = $line1;
    $message['body'][] = $line2;

    // Retrieve the responsible implementation for this message.
    $system = drupal_mail_system($module, $key);

    // Format the message body.
    $message = $system->format($message);

    // Send e-mail.
    $message['result'] = $system->mail($message);

4
এটা সবসময় ব্যবহার মেল করতে সুপারিশ করা হয় drupal_mail()বদলে $system->mail(..অর্ডার ব্যবহার করতে আপনাকে অবশ্যই hook_mail_alterব্যবহার করে পাঠানো হয়েছে ফাংশন (যা শুধুমাত্র মেইল জন্য কাজ করে drupal_mail()
AjitS

আমি কীভাবে ফাংশনটি ব্যবহার করব (সিনট্যাক্স / কোড ওয়াইজ) সম্পর্কে আমি পুরোপুরি সচেতন, আমি কীভাবে একটি থিম তৈরি করতে হয় তা জানতে চাই যাতে আমি drupal_mailইত্যাদির সাথে প্রেরিত সমস্ত ইমেলগুলিতে আবেদন করতে পারি তবে যাইহোক আপনাকে ধন্যবাদ
অ্যান্ডি

আমি এই কোডটি ব্যবহার করছি, এটি কার্যকর কাজ করছে তবে পাশাপাশি একটি ফাঁকা মেইল ​​প্রেরণ করেছে।
সিরসোদিয়া

3

এইচটিএমএল ইমেল প্রেরণ করতে, আপনি মাইমেল মডিউলটি ব্যবহার করতে পারেন । এটি সেট আপ হয়ে গেলে এবং কনফিগার হয়ে গেলে আপনি কেবল টেম্পলেটটি প্রস্তুত করতে পারেন, নামটি mimemail-message.tpl.phpলিখতে পারেন , এটি আপনার থিম ডিরেক্টরিতে রেখে দিতে পারেন এবং এটি স্বয়ংক্রিয়ভাবে সমস্ত বিদায়ী ই-মেইলে প্রয়োগ করা হবে (ধরে নিলে আপনি মাইমেল দ্বারা প্রেরণ করার জন্য সমস্ত মেল কনফিগার করেছেন) ।

মডিউল সেট আপ করা ওভাররাইডের চেয়ে সম্ভবত সহজ drupal_mail()


আপনার উত্তর করার জন্য আপনাকে ধন্যবাদ! আমি কি এই মডিউলটি দিয়ে পিএইচপি ব্যবহার করে ইমেলগুলি প্রেরণ করতে পারি? যদি তাই হয়, আপনি আমাকে কিভাবে দয়া করে দেখাতে পারেন?
অ্যান্ডি

মাইমেল, মেল সিস্টেম মডিউলটির সাথে মিলিত হয়ে সাইটটি প্রেরিত সমস্ত ই-মেইল গ্রহণ করবে। সুতরাং, কাস্টম মডিউল সহ যে কোনও মডিউল দ্বারা প্রেরিত সমস্ত ইমেল স্বয়ংক্রিয়ভাবে মাইমেল এর মাধ্যমে প্রেরণ করা হবে। কোন ইমেলগুলি প্রভাবিত হয়েছে তা যদি আপনি সীমাবদ্ধ করতে চান তবে আপনি মেল সিস্টেমের মডিউল কনফিগারেশন বিকল্পগুলি ব্যবহার করতে পারেন।
প্যাট্রিক কেনি

1
আমি মনে করি অ্যান্ডি ঠিক তাই বলেছিল। সত্য, আপনার এটি করতে মাইমেল মডিউল বা আপনার নিজস্ব মেলসিস্টেমটি রোল করতে হবে তবে অ্যান্ডিকে ইমেল বডিটি কীভাবে থিম করতে হবে যা হুক_মেল () ফাংশনে করা উচিত এবং এতে একটি থিম ('আমার_কাস্টম_থেম') কল করতে হবে?
আইয়েশক

1
আমি মনে করি @ অ্যান্ডি জানতে চায় যে মাইমেল মডিউলটির কোনও ফাংশন রয়েছে যা ইমেলগুলি প্রেরণের জন্য বলা যেতে পারে।
কিমলালুনো

@ কিয়ামলালুনো আপনি সঠিক, আমি এটি জানতে চাই দয়া করে
অ্যান্ডি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.