`
haohappy2
  • 浏览: 317392 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

用drupal邮件API发送邮件

阅读更多

Drupal 6 的 Mail API 是为 Drupal 模块提供邮件发送服务的。大多数时候,使用 Mail API 需要两个步骤:

1,在你的模块中实现 hook_mail().
2,在模块的其它地方,使用 drupal_mail() 函数调用你的 hook_mail() 实现,并进行附加的格式化和发送操作。

在上一节中,我们大体上看了一下 drupal_mail() 函数。现在,我们来仔细分析一下这个函数。在 emailusers_compose_form_submit() 函数中,我们用下列参数调用了 drupal_mail():

 

drupal_mail(
  'emailusers',
  'composemessage',
  $account->mail,
  user_preferred_language($account),
  $form_values,
  variable_get('site_mail', null),
  true // Automatically send
);

共有七个参数!为了了解这里究竟是怎么回事,我们逐个分析这些参数。

 

第一个参数 (emailusers) 是包含 hook_mail() 实现的模块的名称。稍后,我们将分析 emailusers_mail() 钩子,当执行 drupal_mail() 函数时,将调用这个钩子。

第二个参数,composemessage,是一个键值(key),它将被传递给hook_mail() 实现。稍后我们将看到,邮件钩子将根据这个键值确定如何处理消息。换句话说,只要使用不同的键值,就可以用邮件钩子处理各种不同的邮件发送任务。

第三个参数应该包含目的地址。在本例中,管理员将把 email 发送到他正在查看的账户的 emial 地址。地址存放在 $account->mail 中。

第四个参数是 t() 以及其它翻译工具翻译 email 消息时采用的语言。为什么要指定语言呢?因为接收邮件的用户喜欢的语言,可能与发送邮件的系统管理员采用的语言不同。

幸运的是,user_preferred_language()函数接受一个账户对象(如同load_user() 返回的对象)作为参数,这个函数可以返回适当的 locale 信息。

第五个参数保存了一个关联数组的数据,生成邮件时可能会用到此数据。这个数据被传递给 hook_mail() 的实现,稍后我们将用到它。在本例中,此数据恰好就是通过我们的表单提交的值。因此我们此处传递的是 $form_values。

再来看第六个参数,我们需要指定一个发送地址。这个邮件是谁发送的?Drupal 的全站配置中的一个值是管理员的 email 地址。我们可以通过读取配置使用这个地址 variable_get('site_mail', null)。这个函数尝试读取 'site_mail' 配置。如果找不到这个配置,将返回默认值 null (在这种情况下,邮件库将尝试分配一个适当的地址)。

七个参数中的最后一个是个布尔标志,它表明是否发送邮件。当 drupal_mail() 被执行时,它将返回一个具有特殊结构的数组,这个数组可以传递给drupal_mail_send()。不过,如果最后一个参数被设置为 true,drupal_mail() 将在返回前发送邮件。在这种情况下,就不必调用 drupal_mail_send() 函数了,甚至不必保存 drupal_mail() 的返回值。

如果邮件无法发送将会怎样?

如果邮件程序配置不当或是 Drupal 或 PHP 检测到邮件子系统的错误,将在屏幕上打印出一条错误消息。不过,如果底层的邮件系统已经接受了准备发送的邮件,出错消息将发送到 from 参数指定的地址。正因为如此,创建一个邮箱(或者别名)用于接受邮件派送错误是个很好的做法。

当 drupal_mail() 被调用时,它将进行一系列步骤接受传入的 7 个参数并创建一个适当的邮件。例如,它设置默认的 RFC 2822 邮件头部,并确保某些值被设定(例如 from 地址)。

随后它执行 hook_mail() 的实现(如果能找到的话)。

然和,它进行其它几个步骤,比如在发送邮件(可选的)以前执行hook_mail_alter() 并返回一条格式化了的消息。

因此,mail hook 是在这个过程的中间执行的。它做了些什么呢?简而言之,它负责设定适当的字段(例如 subject, CC 和 BCC 字段)以及为邮件创建格式化的正文。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics