Як надіслати HTML-адресу електронної пошти


25

Я створюю простий модуль, який надсилатиме користувачам 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 ='no-reply@example.com';
    $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;
    }
}

Ви не проходите повну сторінку HTML
GoodSp33d

Відповіді:


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 - звідки я спочатку отримав всю інформацію.


2
я дотримувався ваших інструкцій + повний приклад, який ви дали зараз, все працює ... Дякую.
mrcniceguy

7

Модуль Mime Mail - це майже точно те, що ви шукаєте.

Це компонентний модуль Mime Mail (для використання іншими модулями).

  • Це дозволяє користувачам отримувати HTML-адресу електронної пошти і може використовуватися іншими модулями. Функція електронної пошти приймає тіло HTML-повідомлення, кодує його mime-endcod і надсилає його.
  • Якщо в HTML вбудована графіка, ця графіка кодується MIME і включається як додаток до повідомлення.
  • Приймає стиль вашого веб-сайту, автоматично додаючи файли стилів вашої теми у форматі HTML-повідомлення
  • Якщо вподобання одержувача доступне, і він надає перевагу простому тексту, HTML буде перетворений у звичайний текст та надісланий як є. В іншому випадку повідомлення електронної пошти буде надіслано в тематичному HTML з альтернативою простого тексту.
  • Дозволяє тематизувати повідомлення за допомогою конкретної поштової скриньки.
  • Перетворює стилі CSS в атрибути стилю inline.
  • Забезпечує прості системні дії та дії Правил для надсилання HTML-пошти з вбудованими зображеннями та вкладеннями.

5
я завантажив модуль мім-пошти + поштова система ... Будь ласка, будь ласка, поясніть, щоб зателефонувати на функцію мім-пошти на мій модуль як код вище.
mrcniceguy

3

Ви також можете подивитися модуль Swift Mailer. Це дозволяє вам надсилати HTML-листи електронною поштою як вбудованими, так і звичайними вкладеннями (такими як зображення або файли). Крім того, він також може автоматично генерувати текстові версії на основі електронної пошти HTML.

Ви можете ознайомитися з цим http://www.drupal.org/project/swiftmailer

Для запису: Я є автором та підтримувачем модуля.


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">


THX для ур-коментаря, я використав @Dooshta приклад, також додав належний html як запропоновано .. все працює.
mrcniceguy

Я впевнений, що у використанні doctype та повноцінної HTML-версії немає ніякої шкоди, але надсилати електронний лист HTML через drupal не потрібно. Щойно я видалив тег doctype & html і електронний лист добре відображався в Gmail & Outlook. Однак дуже важливо встановити виправлення Dooshta: перед тим, як здійснити ці зміни, я не зміг генерувати жодного HTML-коду.
сумнів1ejack

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, але це не потрібно.

Це воно!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.