【问题标题】:Drupal 7 drupal_mail stripping out HTML?Drupal 7 drupal_mail 剥离 HTML?
【发布时间】:2012-08-23 20:47:02
【问题描述】:

我有一个自定义模块,我正在尝试使用 drupal_mail 函数 (D7) 生成 HTML 电子邮件。邮件正在通过,甚至显示文本/html,但是某处似乎在 HTMl 到达收件箱之前将其剥离。

首先,在一个函数中,我正在构建我的标题/正文/其他变量并发送到自定义函数:

    $body = "We thought you'd like to know that ".$fullname." has marked your project as completed.
    <br /><br />
    Please visit the link at <a href='http://".$_SERVER['HTTP_HOST']."/survey/customer/".$customer[0]->unique_id."'>http://".$_SERVER['HTTP_HOST']."/survey/customer/".$customer[0]->unique_id."</a> to take the survey.";
    $returnMail = latch_send_mail('pro_realized',$customer[0]->customer_email,$user->mail,$title,$body);

然后我就有了latch_mail的latch_send_email函数:

function latch_mail($key, &$message, $params) {
    $headers = array(
    'MIME-Version' => '1.0',
    'Content-Type' => 'text/html; charset=UTF-8; format=flowed',
    'Content-Transfer-Encoding' => '8Bit',
    'X-Mailer' => 'Drupal'
);

foreach ($headers as $key => $value) {
    $message['headers'][$key] = $value;
}

$message['body'][] = $params['body'];
$message['subject'] = $params['subject'];
}

function latch_send_mail($key,$to,$from,$title,$body,$headers='') {
    $params['body']=$body;
    $params['subject'] = t($title);
    return drupal_mail('latch', $key, $to, language_default(), $params, $from,TRUE);
}

我希望电子邮件带有我的 a 标签和 br 标签,但它是这样通过的:

We thought you'd like to know that John Doe has marked your project as completed. Please visit the link at http://latch.local/survey/customer/34c91b8883cd70b32c65feb7adf9c393 [1] to take the survey. [1] http://latch.local/survey/customer/34c91b8883cd70b32c65feb7adf9c393

不知何故,它把我的链接变成了脚注,同时完全删除了 br 标签。

您能提供的任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: php html drupal sendmail content-type


    【解决方案1】:

    这是一个完整的替代方法。首先,安装并启用Mime Mail 模块。您可以阅读README.txt 以获取有关如何使用它的完整说明。我会给你一个简短的版本。

    您需要为您的模块启用 Mime Mail。您可以在example.install 中使用hook_enablehook_update_N 执行此操作:

    function example_enable() {
      mailsystem_set(array(
        'example_examplekey' => 'MimeMailSystem',
      ));
    }
    

    当您转到admin/config/system/mailsystem 时,您会看到已为您的模块添加了一个新条目:

    示例模块(examplekey key)类

    MimeMail 系统

    现在您不再需要指定任何 text/html 标头,Mime Mail 会处理这个问题。所以你不需要这个:

    $headers['Content-Type'] = ...
    

    如果您愿意,您可以将$message['plaintext'] 添加到您的邮件中作为非 HTML 替代品,但这不是必需的。

    就是这样!

    【讨论】:

    • 我已经安装了 Mime Mail,这是我缺少的让电子邮件显示完整 HTML 的最后一块。谢谢!
    【解决方案2】:

    开箱即用,Drupal 无法发送 HTML 电子邮件。为了让 Drupal 支持 HTML 电子邮件,您需要 HTML Mail 模块。 http://drupal.org/project/htmlmail 一旦你知道所有的 HTML 都应该这样发送。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-08
      相关资源
      最近更新 更多