> For the complete documentation index, see [llms.txt](https://coldbox-mailservices.ortusbooks.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://coldbox-mailservices.ortusbooks.com/advanced/mail-events.md).

# Mail Events

The module will register two [interception points.](https://coldbox.ortusbooks.com/the-basics/interceptors) `PreMailSend` and `PostMailSend`. These interception points are useful to alter the mail object before it gets sent out, and/or perform any functions after the mail gets sent out. An example interceptor would be:

{% tabs %}
{% tab title="BoxLang" %}

```java
class extends="coldbox.system.Interceptor"{

    void function configure(){
    }

    function preMailSend( event, data, buffer, rc, prc ){
        var environment = getSetting('environment');
        var appName = getSetting('appName');

        if(environment eq 'development'){
            //change recipient if we are on development
            data.mail.setTo('johndoe@example.com');
            //prefix the subject if we are on development
            data.mail.setSubject('<DEV-#appName#> #data.mail.getSubject()#');
        }
    }

    function postMailSend( event, data, buffer, rc, prc ){
        if( data.result.error ){
            //log mail failure here...
        }
    }

}
```

{% endtab %}

{% tab title="CFML" %}

```javascript
component extends="coldbox.system.Interceptor"{

    void function configure(){
    }

    function preMailSend( event, data, buffer, rc, prc ){
        var environment = getSetting('environment');
        var appName = getSetting('appName');

        if(environment eq 'development'){
            //change recipient if we are on development
            data.mail.setTo('johndoe@example.com');
            //prefix the subject if we are on development
            data.mail.setSubject('<DEV-#appName#> #data.mail.getSubject()#');
        }
    }

    function postMailSend( event, data, buffer, rc, prc ){
        if( data.result.error ){
            //log mail failure here...
        }
    }

}
```

{% endtab %}
{% endtabs %}

### preMailSend

Announced before the mail payload is sent to the chosen mailer protocol for sending. This is your last change to influence the payload.

#### Data Passed

| Key    | Type | Description             |
| ------ | ---- | ----------------------- |
| `mail` | Mail | The mail payload object |

### postMailSend

Announced after the mail payload has been sent via the mailer protocol of choice.

#### Data Passed

| Key      | Type   | Description                                                                                                           |
| -------- | ------ | --------------------------------------------------------------------------------------------------------------------- |
| `mail`   | Mail   | The mail payload object                                                                                               |
| `result` | struct | The result structure from the mailer protocol. At most it will contain an `error` boolean key and a `messages` array. |


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://coldbox-mailservices.ortusbooks.com/advanced/mail-events.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
