2013-08-19 3 views
2

У меня проблемы с drupal_mail(). Я получаю электронную почту, но тема и тело пусты.Drupal_mail() пустое тело и без темы

Drupal версии 7

код ниже

$params = array(
    'subject' => t('Client Requests Quote'), 
    'body' => t("Body of the email goes here"), 
); 
drupal_mail("samplemail", "samplemail_html_mail", "[email protected]", language_default(), $params, "[email protected]", TRUE); 

Я даже попробовал его с крючка ниже, и я получаю тот же результат.

function hook_mail($key, &$message, $params) { 
switch ($key) { 
    case 'samplemail_html_mail': 
     /* 
     * Emails with this key will be HTML emails, 
     * we therefore cannot use drupal default headers, but set our own headers 
     */ 
     /* 
     * $vars required even if not used to get $language in there since t takes in: t($string, $args = array(), $langcode = NULL) */ 
     $message['subject'] = t($params['subject'], $var, $language->language); 
     /* the email body is here, inside the $message array */ 
     $body = "<html><body> 
      <h2>HTML Email Sample with Drupal</h2> 
      <hr /><br /><br /> 
      {$params['body']} 
      </body></html>"; 
     $message['body'][] = $body; 
     $message['headers']['Content-Type'] = 'text/html; charset=UTF-8; format=flowed'; 
     break; 
} 
} 

drupal_mail_system() работает, но он поставляется в виде простого текста.

+0

Вы должны заменить «hook» на свое имя модуля. Например. 'function mymodule_mail (' – jantimon

+0

По-прежнему не работает. Такая же проблема. Нет тела или предмета. – user742736

ответ

3

В вашем модуле вы не должны использовать hook_mail, это должно быть _hook().

изменение * Функция hook_mail ($ ключ, & $ сообщение, $ PARAMS) {* к функции samplemail_mail ($ ключа, & $ сообщений, $ Params) {

+0

Все еще не работает, все еще получая пустой объект и объект. Функция hook теперь называется registration_form_mail, где имя_регистрации - это имя модуля. – user742736

+0

[Решение] (http://stackoverflow.com/questions/18306832/drupal-mail-empty-body-and-no-subject/18458890#18458890) проверьте это. – shangan

1

Попробуйте использовать следующий фрагмент кода.

// Use these two lines when you want to send a mail. 
global $user; 
drupal_mail('test', 'test_mail', 'your_mail_id', user_preferred_language($user), $params, $from_mail_id, TRUE); 

/** 
* Implements hook_mail(). 
*/ 
function test_mail($key, &$message, $params) { 
    switch ($key) { 
    case 'test_mail': 
     $params['subject'] = t('Subject is here'); 
     $params['message'] = 'message is here'; 
     $message['subject'] = $params['subject']; 
     $message['body'][] = $params['message']; 
     break; 
    } 
} 

Примечание: 'test' - это имя модуля.

0

Решение!

Пробуйте использовать код ниже в вашем модуле "registration_form". Этот код будет отправлять почту часто при обновлении страницы, поскольку триггер почты выполняется в hook_init. Используйте, где захотите.



    /** 
    * Implements hook_init(); 
    */ 
    function registration_form_init() { 
    $first_name = 'Shankar'; 
    $params = array(
        'subject' => 'Signup Invitation', 
        'body' => '<p>Dear ' . $first_name . ',</p> 
           <p>Congratulations! Your account <b> ' . $first_name . ' </b>has been successfully created with SOME portal.</p> 
               <p>Thanks,SOME portal POSTMASTER</p>', 
        'first_name' => $first_name 
       ); 
       drupal_mail('registration_form', 'invitation', $email, language_default(), $params);  
    } 
    /** 
    * Implements hook_mail(); 
    */ 
    function registration_form_mail($key, &$message, $params) { 
     switch ($key) { 
      case 'invitation':  
       $message['subject'] = $params['subject']; 
       $message['body'][] = $params['body']; 
       break; 
     } 
    }