web-dev-qa-db-ja.com

mailManagerを使用してメールの件名と本文が空のままになる

Drupal 8.のカスタムモジュールでメールの送信をいじっています。メールは送信されましたが、件名と本文が空です。何日も問題があり、取得できません。コードとvar_dumpは次のとおりです。問題を見つけることができません。たぶん誰かができるでしょう!

hook_mailのコード:

<?php
/**
 * Implements hook_mail().
 */
function document_mail($key, $message, $params)
{
    $options = array(
        'langcode' => $message['langcode'],
    );
    switch ($key) {
       case 'send_file':
            $message['from'] = \Drupal::config('system.site')->get('mail');
            $message['subject'] = t('@title', array('@title' => $params['mail_title']), $options);
            $message['body'][] = $params['message'];
        break;
    }
}

メールを送信するコード:

    $mailManager = \Drupal::service('plugin.manager.mail');
    $module = 'document';
    $key = 'send_file';
    $to = '[email protected]';
    $params['mail_title'] = 'a title';
    $params['message'] = 'a message';
    $langcode = \Drupal::currentUser()->getPreferredLangcode();
    $send = true;
    $result = $mailManager->mail($module, $key, $to, $langcode, $params, null, $send);
    var_dump($result);
    if ($result['result'] !== true) {
        drupal_set_message(t('There was a problem sending your message and it was not sent.'), 'error');
    } else {
        drupal_set_message(t('Your message has been sent.'));
    }

mailManagerの$ resultからの結果のvar_dump

array(12) { 
["id"]=> string(18) "document_send_file" 
["module"]=> string(8) "document" 
["key"]=> string(9) "send_file" 
["to"]=> string(24) "[email protected]," 
["from"]=> string(22) "[email protected]" 
["reply-to"]=> NULL 
["langcode"]=> string(2) "en" 
["params"]=> array(2) 
{ 
    ["mail_title"]=> string(7) "a title" 
    ["message"]=> string(9) "a message" 
} 
["send"]=> bool(true) 
["subject"]=> object(Drupal\Core\StringTranslation\TranslatableMarkup)#410 (5) 
{ 
    ["string":protected]=> string(6) "@title" 
        ["translatedMarkup":protected]=> NULL 
        ["options":protected]=> array(1) 
        { 
                ["langcode"]=> string(2) "en" 
        } 
        ["stringTranslation":protected]=> NULL 
        ["arguments":protected]=> array(1) 
        { 
            ["@title"]=> string(7) "a title" 
        } 
    } 
    ["body"]=> array(1) 
    { 
        [0]=> string(9) "a message" 
    } 
    ["headers"]=> array(7) 
    { 
        ["MIME-Version"]=> string(3) "1.0" 
        ["Content-Type"]=> string(51) "text/plain; charset=UTF-8; format=flowed; delsp=yes" 
        ["Content-Transfer-Encoding"]=> string(4) "8Bit" 
        ["X-Mailer"]=> string(6) "Drupal" 
        ["Return-Path"]=> string(22) "[email protected]" 
        ["Sender"]=> string(22) "[email protected]" 
        ["From"]=> string(44) "a string" 
    }
    ["result"]=> bool(true)
} 
1
eeriek

参照($message)で&を渡すのを忘れたと思うので、以下の詳細に従って hook_mail の実装を再確認してください:

hook_mail($key, &$message, $params)

それ以外の場合、$messageを変更しても効果はありません。

0
kenorb

以下のように、本文から空の配列タグを削除します。

$message['body'] = $params['message'];
0
i am batman