【问题标题】:Adding url() breaks hook_mail implementation添加 url() 会破坏 hook_mail 实现
【发布时间】:2011-05-04 00:57:40
【问题描述】:

我正在用 Drupal-7 编写一个模块,它可以动态地向客人发送一次性登录链接。一切正常,直到我将链接添加到$message 数组,当它阻塞时。如果我执行dpm($message),链接将出现在$message['body'] 数组中,正如我所料。如果我用 url() 函数注释掉该行,一切都会正常运行。为什么 php/Drupal 在这个愚蠢的小链接上卡住了?

/*
 * Implement hook_mail().
 */

function rsvp_mail($key, &$message, $params) {
    switch($key) {
      case "send invite" :
        $timestamp = REQUEST_TIME;
        $account = $params['account'];
        $message['subject'] = "And invitation for $account->name";
        $message['body'][] = 'Some body text.';
        $message['body'][] = 'Some more text!';
        //here's the line that's breaking my brain:
        $message['body'][] = url( 'http://wedding.juicywatermelon.com/rsvp/' . $account->uid . "/" . $timestamp . "/" . md5($account->pass . $timestamp) . "/" . 'user/' . $account->uid . '/edit/Wedding');             
        break;
    }
  }

ps - 为了简洁起见,我有代码在单独的函数调用中生成链接并将其移至钩子实现。然而,这对行为没有影响。

以及生成电子邮件的代码:

function rsvp_mail_send($account) {
  $module = 'rsvp';
  $from = "email@gmail.com";
  $key = "send invite";
  $params['account'] = $account;
  $to = $account->mail;
  $language = language_default();
  $send = TRUE;
  $result = drupal_mail($module, $key, $to, $language, $params, $from, $send);
}

【问题讨论】:

  • 您在 Drupal 的日志或您的系统 PHP 日志中是否有任何错误?您是否使用 Devel 模块将邮件路由回日志(在此阶段这是一个好主意)?检查这些事情可能会更清楚地了解正在发生的事情以及所涉及的长链 PHP 函数中发生故障的确切位置。
  • 奇怪!它真的不喜欢 $account 对象(它可以通过 - 我可以用 dpm() 确认)。我正在尝试在我生成的 url 中使用 $account obj 中的元素,但邮件系统不会接受这个。 :/ (我也可以通过 dpm() 很好地返回 url)
  • 我可以将 $account 对象传递给 url() 函数并返回 ok,我可以将它传递给 $message 对象并一起发送,但我不能将对象传递给url() 并将其传递给 $message 对象。
  • 您是否尝试过选择性地传入 $account 对象中的哪些字段?尽量不要传密码,只传uid,看看你有没有同样的经历。

标签: php drupal drupal-7


【解决方案1】:

您需要在 url() 函数中添加一个称为选项的额外参数,它是一个数组,在此数组中使用键“absolute”并将其设置为 TRUE 以指示您作为第一个传递的 URI参数是一个绝对 URL。

有关详细信息,请参阅文档页面: http://api.drupal.org/api/drupal/includes--common.inc/function/url/7

【讨论】:

  • @artusamak:注意。但是添加 $options 数组不会改变行为。
  • @artusamak pastebin.com/wGDawZtL - 如果我删除第 26 行,这很好用...感谢您的帮助!
  • 生成 url 可能不是问题,您可以记录返回的值来测试它吗?为此使用 watchdog()。完成此操作后,首先尝试对 url 进行硬编码,以查看其格式或对函数的调用是否良好。我认为您没有回答上一个问题,您是否显示任何错误/警告错误消息?
  • @artusamak - 感谢您的帮助!不,php 日志或看门狗(或开发人员)中没有生成错误消息。如果我设置 $result = drupal_mail('rsvp', 'send_invite', $account->mail, language_default(), $params = array('account' => $account), $from = 'starsinmypockets@gmail.com' , $发送 = 真);然后 dpm($result;) $result['result'] => TRUE 对于每封发送的邮件。我想知道它是否与标题中的文本编码有关?同样,将 url 更改为简单的字符串可以让电子邮件通过......但日志、dpm 等没有任何变化......我要尝试编码......谢谢
  • 添加行:$message['headers']['Content-Type'] = 'text/html;字符集=UTF-8;格式=流动; delsp=是的';无济于事。添加了看门狗条目,每次确认邮件结果=1...
猜你喜欢
  • 2014-09-10
  • 2011-03-24
  • 2018-11-28
  • 1970-01-01
  • 1970-01-01
  • 2020-01-16
  • 2013-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多