Как отправить HTML-адрес электронной почты

Я создаю простой модуль, который будет отправлять HTML-письма пользователям для сделок на нашем сайте.

Я много искал, но я не могу найти подходящее решение для Drupal. Теперь я могу отправлять письма, но обычный текст.

Что такое пошаговая процедура отправки HTML-сообщений в Drupal 7?

function example_form_submit( $form,&$form_state) {
    $friend_email=$form_state['values']['friend_email'];
    $mailto =$friend_email;  //gift to a friend
    $mailfrom ='[email protected]';
    $subject = "another message for  HTML email from example.com";
    $body="<h2 style='font-size:28px;color:red;'>Hello EMAIL, i here i want to be <b>bolded</b></h2>";
    if (drupal_mail('example', 'send_gift', $mailto, language_default(),$params,$mailfrom,TRUE)) {
        drupal_set_message(t('Your gift was sent successfully!!!'));
    }
    else {
        drupal_set_message(t('<font color="red">Error occured while sending your mail!!!</font>'));
    }


/****hook_mail*/
function example_mail($key,&$message,$params) {
    $language = $message['language'];
    switch ($key) {
        case 'send_gift':
            $message['subject']=t($params['subject'], $var, $language->language);
            $message['body'][]=$params['body'];
            $message['headers']['Content-Type'] = 'text/html; charset=UTF-8; format=flowed';
        break;
    }
}
25 голосов | спросил mrcniceguy 31 MaramSat, 31 Mar 2012 07:06:39 +04002012-03-31T07:06:39+04:0007 2012, 07:06:39

5 ответов


22

Как и в случае с geoff, одним из вариантов будет использование модуля Mime Mail, но вы также можете включить свой настраиваемый модуль для отправки HTML-сообщений электронной почты с помощью дополнительного кода. Короче, вам нужно будет изменить переменную mail_system и написать собственную реализацию MailSystemInterface. Примером этого является следующий код.

Внутри 'mymodule.install':

function mymodule_enable() {
  $current = variable_get('mail_system', array('default-system' => 'DefaultMailSystem'));
  $addition = array('mymodule' => 'MymoduleMailSystem');
  variable_set('mail_system', array_merge($current, $addition));
}

function mymodule_disable() {
  $mail_system = variable_get('mail_system', array('default-system' => 'DefaultMailSystem'));
  unset($mail_system['mymodule']);
  variable_set('mail_system', $mail_system);
}

Внутри 'mymodule.module':

class MymoduleMailSystem extends DefaultMailSystem {
  public function format(array $message) {
    $message['body'] = implode("\n\n", $message['body']);
    $message['body'] = drupal_wrap_mail($message['body']);
    return $message;
  }
}

Вам придется заменить экземпляры mymodule на имя вашего фактического модуля, а затем отключить и снова включить ваш модуль, чтобы изменить переменную, после чего все должно работать. Для полного примера вы можете проверить мой ответ здесь . Кроме того, эта страница на drupal.org, откуда я изначально получил всю информацию.

ответил Dooshta 31 MarpmSat, 31 Mar 2012 21:06:18 +04002012-03-31T21:06:18+04:0009 2012, 21:06:18
7

Mime Mail - это почти наверняка то, что вы ищете.

  

Это компонентный модуль Mime Mail (для использования другими модулями).

     
  • Он позволяет пользователям получать электронную почту HTML и может использоваться другими модулями. Функциональность почты принимает тело сообщения HTML, mime-endcodes и отправляет его.
  •   
  • Если HTML имеет встроенную графику, эти графики закодированы в MIME и включены как вложение сообщений.
  •   
  • Применяет стиль вашего сайта, автоматически включающий файлы стилей вашей темы в текстовом формате HTML-сообщения.
  •   
  • Если предпочтение получателя доступно и предпочитает открытый текст, HTML будет преобразован в обычный текст и отправлен как есть. В противном случае электронное письмо будет отправлено в текстовом HTML с альтернативой обычного текста.
  •   
  • Позволяет тематические сообщения с определенным почтовым ключом.
  •   
  • Преобразует стили CSS в встроенные атрибуты стиля.
  •   
  • Предоставляет простые действия системы и действия правил для отправки электронной почты HTML со встроенными изображениями и вложениями.
  •   
ответил geoff 31 MaramSat, 31 Mar 2012 08:35:42 +04002012-03-31T08:35:42+04:0008 2012, 08:35:42
2

Вы не отправляете надлежащий HTML-код, вы включаете только теги H1 и теги B, вам, вероятно, необходимо включить также и HTML-теги, начиная с <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

ответил GoodSp33d 31 MaramSat, 31 Mar 2012 08:53:53 +04002012-03-31T08:53:53+04:0008 2012, 08:53:53
2

Вы также можете посмотреть модуль Swift Mailer. Он позволяет отправлять HTML-сообщения электронной почты с помощью встроенных и обычных вложений (например, изображений или файлов). Кроме того, он также способен автоматически генерировать текстовые версии на основе электронной почты HTML.

Вы можете посмотреть на него http://www.drupal.org/project/swiftmailer

Для записи: я являюсь автором и сторонником модуля.

ответил sbrattla 2 PMpTue, 02 Apr 2013 12:26:39 +040026Tuesday 2013, 12:26:39
2

Ни один из вышеперечисленных ответов не работал для меня, так что вот мой вопрос по оригинальному вопросу.

Прежде всего, установите и включите модуль Mime Mail . Вы можете прочитать README.txt полные инструкции по его использованию. Я дам вам короткую версию.

Вам нужно включить Mime Mail для своего модуля. Вы можете сделать это, используя hook_enable или hook_update_N в example.install:

function example_enable() {
  mailsystem_set(array(
    'example_send_gift' => 'MimeMailSystem',
  ));
}

Когда вы перейдете к admin/config/system/mailsystem, вы увидите, что для вашего модуля добавлена ​​новая запись:

  

Класс примера (класс send_gift)

     

MimeMailSystem

Теперь вам больше не нужно конкретизировать заголовки text/html, Mime Mail позаботится об этом. Поэтому вам это не нужно:

$message['headers']['Content-Type'] = ...

Если вы хотите, вы можете добавить $message['plaintext'] к своей почте для альтернативы, отличной от HTML, но это не требуется.

Вот и все!

ответил Wim Mostrey 31 Jpm1000000pmTue, 31 Jan 2017 17:17:56 +030017 2017, 17:17:56

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132