web-dev-qa-db-ja.com

メールでクエリ結果を送信する

これが私の機能である場合:

<?php
//dsm($query);


function customstatsB_menu() {
  $items['customstatsB'] = array(
    'title' => 'Maestros Inactivos + email',
    'page callback' => 'customstatsB_all',
    'access arguments' => array('access customstatsB content'),
    'type' => MENU_CALLBACK
  );
  return $items;
}
/**
* Valid permissions for this module
* @return array An array of valid permissions for the customstats module
 * No repetir permisos, este es únicamente un modulo, y cada query NO necesita permisos. PERMISOS A NIVEL MODULE x ROL.
 */

function customstatsB_perm() {
  return array('access customstatsB content');
} // function customstats_perm()

//return array('access customstats content', 'administer customstats');

function customstatsB_all() {

/**
 * MAESTROS INACTIVOS 
 */

$query = "
SELECT name, status, rid, mail
FROM users
JOIN users_roles ON users.uid = users_roles.uid
WHERE mail NOT LIKE '%@hotmail.com' 
AND users_roles.rid =6
AND users.status =0
";

  // get the links (no range limit here)
  $queryResult =  db_query($query);
  while ($links = db_fetch_object($queryResult)) {
    //$page_content .= l($links->name, 'node/'.$links->mail) . '<br />';
    $page_content .= 
    l($links->name, 'mailto:'.$links->mail) . '<br />';
  }

  // check to see if there was any content before
  // returning the page
  if ($page_content == '') {
    // let the user know there is no content to show
    $page_content = "No existe información para mostrar.";
  }

  return $page_content;
}

return array('access customstatsB content', 'administer customstatsB');

/**
 * Email configs 
 */




function customstatsB_mail($key, &$message, $params)
  {
     $params = array(
        'subject' => t('SQL Results Tester'),
        'body' => t("Body of the email goes here"),
      );

      drupal_mail("customstatsB", "customstatsB_normal_mail", "[email protected]", language_default(), $params, "[email protected]");
      drupal_mail("customstatsB", "customstatsB_html_mail", "[email protected]", language_default(), $params, "[email protected]");
  }
      $language = $message['language'];
      switch ($key)
      {
           case 'customstats_normal_mail':
              $message['subject'] = t($params['subject'], $var, $language->language);
              $message['body'][] = $params['body'];
              break;
          case 'customstats_html_mail':

              $message['subject'] = t($params['subject'], $var, $language->language);

               $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;
      }
  }

そして、hook_mailとdrupal_mailを使用してメールを送信していますが、クエリ結果をメールの本文に挿入するにはどうすればよいですか?

また、私はhook_menuを介してpagestatbacks customstats1からcustomstats15を作成しました。ユーザーが各ページに個別にアクセスしたときに個別のメールを送信する必要があります。私はいくつかのチュートリアルを読みましたが、これを行うことができませんでした。

よろしくお願いします。

2
MauF

'body'パラメータを指定するには、hook_mail()を呼び出す必要があります。 2つの手順ですが、十分に文書化されているため、少し混乱します。 http://api.drupal.org/api/drupal/includes%21mail.inc/function/drupal_mail/6

上記のリンクから「example_notify()」と「example_mail()」を参照してください。

あなたの場合、あなたはhook_mailの呼び出しの外でdrupal_mailを呼び出す必要があります。例については、以下を参照してください。 drupal_mailを呼び出すときに$ paramのように本文を渡すことも、hook_mailを呼び出すときに本文を編集することもできます。

誰かがそのページにアクセスするといつでもメールが送信されるため、これは最良の例ではありませんが、どこからdrupal_mailを呼び出そうとしているかはわかりません。

$query = "
SELECT uid
FROM users
JOIN users_roles ON users.uid = users_roles.uid
WHERE mail NOT LIKE '%@mail.com' 
AND users_roles.rid =6
AND users.status =0
";


 // get the links (no range limit here)
  $queryResult =  db_query($query);
  while ($links = db_fetch_object($queryResult)) {
    $account = user_load($links->uid);
    $body = t('Message for %name', array('%name' => $links->name));
    $subject = t('New email!');
    $params = array('body' => $body, 'subject' => $subject);
    drupal_mail('customstats', 'html_mail', $account->mail, user_preferred_language($account), $params);  
    $page_content .= l($account->name, 'mailto:'.$account->mail) . '<br />';
   }


  if ($page_content == '') {
    $page_content = "No existe información para mostrar.";
  }

  return $page_content;
}
1
acouch