ড্রুপাল_মেল সহ সংযুক্তি প্রেরণ করুন


14

আমি ড্রুপাল থেকে আমার ইমেলটি সংযুক্তি প্রেরণের চেষ্টা করছি। আমার কাস্টম মডিউলে আমি যুক্ত করেছি:

class SponsorprogramMailSystem implements MailSystemInterface {
  /**
   * 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)
    );
  }
}

এবং আমি এইচটিএমএল সহ মেলগুলি পাঠাতে পারি, সে অংশটি কাজ করছে।

তবে আমি যখন কোনও ফাইল সংযুক্ত করার চেষ্টা করি তখন এটি আমার ইনবক্সে আসে না। আমি আমার পরীক্ষার ফাইলটি এর মতো সংযুক্ত করি:

$attachment = array(
        'filecontent' => file_get_contents(DRUPAL_ROOT . '/README.txt'),
        'filename' => 'test.txt',
        'filemime' => 'text/plain',
      );

কিন্তু কিছুই আসে না।

যে কেউ কিভাবে আমি এটি ঠিক করতে পারি জানেন?


আপনার উদাহরণে কীভাবে সংযুক্তি যুক্ত হয় তা আমার কাছে অস্পষ্ট।
ডেভিড মাইস্টার

উত্তর:


17

অন্য উপায় থাকতে পারে তবে আমি খুঁজে পেয়েছি যে সংযুক্তি সহ ইমেল প্রেরণের জন্য মেলসিস্টেম এবং মাইমেল মডিউলগুলি ইনস্টল করতে হবে। সুতরাং প্রথমে এই দুটি মডিউল ইনস্টল করুন।

তারপরে $ বার্তায় সংযুক্তি পাস করতে হুক_মেল বাস্তবায়ন করুন

/**
 * Implements hook_mail().
 */
function mymodule_mail($key, &$message, $params) {
  $message['subject'] = $params['subject'];
  $message['body'][] = $params['body'];

  // Add attachment when available.
  if (isset($params['attachment'])) {
    $message['params']['attachments'][] = $params['attachment'];
  }
}

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

পরিচালনা না করা ফাইল যুক্ত করার সময়:

$attachment = array(
  'filepath' => $filepath, // or $uri
);

অথবা

$attachment = array(
  'filecontent' => file_get_contents($uri),
  'filename' => $filename,
  'filemime' => 'application/pdf'
);

ফাইল কনটেন্ট উপায় ব্যবহার করে, আপনি সম্ভবত জানুয়ারী 08, 2015 সহ দুটি পিএইচপি ত্রুটি পাবেন

পরিচালিত ফাইল যুক্ত করার সময়:

$attachment = file_load($fid);

তারপরে ইমেল প্রেরণ করুন:

$params = array(
  'key' => 'my_email_template',
  'to' => 'test@example.com',
  'from' => 'test@example.com',
  'subject' => 'Test email',
  'body' => 'test',
  'attachment' => $attachment
);

drupal_mail('mymodule', $key, $to, $language, $params, $from);

কোন শিরোনাম সেট করা প্রয়োজন?
সিদ্দিক

@ সিদ্দিকের কোনও শিরোনাম সেট করার দরকার নেই
eric.chenchao

3
$attachment = array(
      'filecontent' => $filepathname,
      'filename' => $namefile,
      'filemime' => 'application/pdf'
      );
//where $filepathname should contain the path to the file and $filename should contain the name of the file.
$to = 'test@example.com'; // emails
$from = 'test@example.com';

$params = array(
  'headers' => array('Content-Type' => 'text/html'),
  'key' => 'test',
  'subject' => 'Test email',
  'body' => 'test',
  'attachment' => $attachment
);

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

এটি আমার পক্ষে কাজ করেছে।


$ প্যারামগুলিতে এবং থেকে পপুলেট করা অদ্ভুত বলে মনে হচ্ছে তবে সেট করা নেই $ থেকে $ থেকে ... ... আমি নিশ্চিত না যে এটি কার্যকর হবে।
ড্র করুন

2

আমার মনে আছে আমি আগে এটি করতে চেয়েছিলাম, আমি এটি চেষ্টা করেছিলাম এবং আমার পক্ষে কাজ করেছি

function mymodule_mail($key, &$message, $params) {
  $data['user'] = $params['from'];
  $account = $data['user']->name;

  $file_content = file_get_contents('some/file/path');

  $attachments = array(
     'filecontent' => $file_content,
     'filename' => 'example-' . $account,
     'filemime' => 'application/pdf',
   );

  switch($key) {
    case 'notice':

      $langcode = $message['language']->language;
      $message = drupal_mail($module, $key, $to, $language, $params, $from, $send);
      $message['subject'] = 'example submission from '. $account;
      $message['body'][] =
        '<p>'. $account .' has submitted an example.</p>';
      $message['params']['attachments'][] = $attachments;
    $system = drupal_mail_system($module, $key);
    // Format the message body.
    $message = $system->format($message);
    // Send e-mail.
    $message['result'] = $system->mail($message);

    if($message['result'] == TRUE) {
        drupal_set_message(t('Your message has been sent.'));
    }
    else{
        drupal_set_message(t('There was a problem sending your message and it was not     sent.'), 'error');
    }
      break;
  }
}

1
file_get_contents()আমার জন্য কৌশলটি। যদি এটি ব্যবহার না করে, আমি ফাইল ফাইল সংযুক্তি পেয়ে যাচ্ছিলাম। ধন্যবাদ।
anou

@ তবে আপনি খুশি যে আমার সমাধানটি 2 বছর পরে আরও একটিকে সহায়তা করে: ডি
ইউসেফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.