1

我使用联系人模块向我的邮箱发送电子邮件,如何自定义电子邮件正文?默认为:

the user name (http://example.com/user/3) use
http://example.com/contact ...

the message body

我已经hook_form_alter在联系我们表单中添加了一些字段。例如:电话、地址、公司名称。电子邮件地址,如何使它们显示在电子邮件正文中。谢谢你。

4

4 回答 4

3

考虑使用webform 模块。您无需实现任何挂钩来添加字段或配置要通过电子邮件发送的字段。

Drupal 的联系模块要容易得多

于 2013-01-10T10:19:00.453 回答
2

Muhammad 提出了一个很好的解决方案,我们应该使用Webform 模块来添加字段。这样你就不需要写任何代码了。

对于您的特定需要,您可以使用hook_mail_alter来帮助您更改电子邮件消息,并且您可以在电子邮件正文中添加额外的字段。

于 2013-01-10T11:02:12.367 回答
2

Entityforms模块使用标准的 Drupal 字段,这意味着您可以使用任何标准的 Drupal 字段。对于那些使用过 Webforms 的人,这个模块将 Webform 的功能带入了“标准”Drupal 字段/实体世界。

虽然 Webform 是一个拥有大量追随者的优秀模块,但它并没有与标准的 Drupal 字段或实体感知模块集成。所以对于 Drupal 7 站点,推荐使用 Entityforms 模块!

与 Webform 一样,它与表单提交通知的规则模块很好地集成,并允许复杂的通知逻辑。

于 2013-11-02T16:00:46.603 回答
2

正如您在contact.module中看到的,有一些预定义的硬编码变量。如果您将自己的字段添加到表单中,则它们不适用于邮件。

为了使它们在那里可用,您需要编写、注册和编写自己的邮件处理程序;

实施hook_mail

function email_example_mail($key, &$message, $params) {
  global $user;

  $options = array(
    'langcode' => $message['language']->language,
  );

  switch ($key) {
    case 'contact_message':
      $message['subject'] = t('E-mail sent from @site-name', array('@site-name' => variable_get('site_name', 'Drupal')), $options);
      $message['body'][] = t('@name sent you the following message:', array('@name' => $user->name), $options);
      $message['body'][] = check_plain($params['message']);
      break;
  }
}

然后是发送邮件的方法:

function email_example_mail_send($form_values) {
  $module = 'email_example';
  $key = 'contact_message';

  $to = $form_values['email'];
  $from = variable_get('site_mail', 'admin@example.com');

  $params = $form_values;
  $language = language_default();
  $send = TRUE;
  $result = drupal_mail($module, $key, $to, $language, $params, $from, $send);
  if ($result['result'] == TRUE) {
    drupal_set_message(t('Your message has been sent.'));
  }
  else {
    drupal_set_message(t('There was a problem sending your message and it was not sent.'), 'error');
  }
}

然后将从自定义提交处理程序中调用此方法:

function email_example_contact_form_submit($form, &$form_state) {
  email_example_mail_send($form_state);
}

您在其中注册hook_form_alter(我不知道核心联系表格的确切 form_id,请将其放在我放置的位置contact):

function email_example_contact_form_alter($form, &$form_state) {
  $form['#submit']['my_very_own_submit'] = array();
}

来自开发人员的示例

于 2013-01-10T12:40:30.867 回答