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 字段)以及为邮件创建格式化的正文。
分享到:
相关推荐
标题中的 "d8mail" 模块是专为 Drupal 8 设计的一个示例模块,其目的是展示如何利用 Drupal 8 的邮件 API 来发送电子邮件。在这个例子中,每当有新的文章节点被创建或保存时,系统会自动通过 Mandrill 这个第三方...
6. **过滤和验证**:为了防止垃圾邮件,MimeMail模块可以与其他反垃圾邮件解决方案配合使用,例如添加邮件验证机制,确保发送的邮件符合行业标准和最佳实践。 7. **国际化支持**:Drupal 6 强调多语言支持,...
8. **API 使用**:Drupal 提供了大量的 API,如日期和时间处理、国际化支持、邮件系统等。"news" 模块可能利用了这些 API 来增强功能,比如新闻的发布时间显示、多语言支持或者发送新闻更新通知。 9. **JavaScript ...
Drupal开发指南中文99.9%完整版 您是否还在为Drupal的无聊机制而烦恼; 您是否还在为对Drupal的一知半解而...如果有bug,可以给我发邮件hezll@msn.com谢谢大家支持,请注意并没有获得原作者授权,仅贡学习参考用
提交后的表单数据可以存储到数据库,发送到服务器进行进一步处理,或者触发其他操作,如发送邮件、更新内容等。Form API提供了灵活的回调机制来处理这些提交事件。 5. **表单状态管理** 表单API还负责管理表单的...
用户可以直接通过模块提供的界面,将页面链接及内容以电子邮件的形式发送给朋友或同事,而无需离开当前页面。这种便捷的分享方式有助于促进信息在个人网络中的传播。 为了使AddToAny更好地融入网站设计,模块还提供...
其次,Drupal的mail函数是一个核心API函数,用于发送邮件。它基于Drupal的邮件系统,可以方便地集成各种邮件传输方法。在Drupal中,发送邮件通常需要指定邮件主题(subject)、邮件接收地址(to)、邮件正文(body)...
3. 提醒与通知:可以通过电子邮件或其他方式向订阅者发送新新闻的通知。 4. 社交媒体集成:支持将新闻分享到Facebook、Twitter等社交媒体平台,增加曝光度。 5. 评论和讨论:鼓励用户参与互动,创建社区氛围。 在...
例如,`hook_comment_insert()` 钩子可以在评论被创建时调用,用于执行额外的操作,如发送通知邮件。 8. **视图(Views)**:Drupal的视图模块允许管理员和开发者自定义内容的展示方式,包括评论。可以创建新的视图...
总的来说,Mailgun Drupal 7 模块是高效、可靠的邮件解决方案,它结合了 Mailgun 服务的诸多优势,为 Drupal 网站提供了稳定的邮件发送平台,尤其适合那些对邮件发送有需求但预算有限的项目。通过熟练掌握这个模块,...
在使用 `Represent for Drupal` 模块时,必须注意 API 访问限制和安全问题。频繁的请求可能会导致 API 使用量超出限制,因此要合理设计数据更新频率。同时,确保在向 API 发送请求时使用 HTTPS,保护敏感信息不被...
- **电子报**:可以通过邮件形式发送更新内容给订阅者。 - **相册**:集成图片管理和展示功能。 - **文件上传与下载**:方便用户分享文件。 - **全文搜索**:内置搜索引擎,方便查找网站内容。 - **多角色权限管理**...
PHP 代码可以用来处理复杂逻辑,如计算最佳匹配、处理预约冲突、发送通知邮件等。同时,PHP 也允许开发者与外部服务(如支付网关、日历API)进行交互,进一步增强约会系统的功能。 综上所述,这个 Drupal 约会系统...
此钩子通常用于执行后台任务,如清理缓存、发送邮件等。 - **无参数**。 ##### 5. **hook_db_rewrite_sql($query,$primary_table,$primary_field,$args)** - **作用**:重写 SQL 查询,通常用于访问控制。 - **参数...
以下是关于使用 Drupal Webform 的一些关键知识点: 1. **安装与配置**:首先,你需要在 Drupal 站点上安装 Webform 模块。这通常通过 Drupal 的模块管理界面完成,下载模块的 `.zip` 文件,解压并上传到 sites/all...
PCO API(pco_api)模块利用了Drupal httpClient 。 如果我有更多时间,该模块可能会以沙箱或完整项目的形式发布。 如果您会从中受益,欢迎您从此存储库中获取代码。发送邮件CRON还会根据每个小组开会的时间触发...
这样可以有效地防止机器人、垃圾邮件发送者和其他滥用行为,而不会过多地影响合法用户的体验。 **安装与使用:** 在Drupal 7站点上,管理员需要首先将drupal-pow_captcha模块上传到站点的模块目录,然后在Drupal...