---
name: "Courier::Filter::Module::FakeDate"
section: "3pm"
platform: "linux"
package: "courier-filter-perl"
version: "0.200+ds-6"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Courier::Filter::Module::FakeDate"
---

# Courier::Filter::Module::FakeDate(3pm)

Fake "Date:" message header filter module for the Courier::Filter framework

## NAME

Courier::Filter::Module::FakeDate - Fake "Date:" message header filter module for the Courier::Filter framework

## SYNOPSIS

```
    use Courier::Filter::Module::FakeDate;
    my $module = Courier::Filter::Module::Header->new(
        forward_tolerance   => {
            # years, months, weeks, days, hours, minutes, seconds
            hours       => 2
        },
        backward_tolerance  => {
            # years, months, weeks, days, hours, minutes, seconds
            days        => 5
        },

        ignore_unparseable  => 0,

        logger      => $logger,
        inverse     => 0,
        trusting    => 0,
        testing     => 0,
        debugging   => 0
    );

    my $filter = Courier::Filter->new(
        ...
        modules     => [ $module ],
        ...
    );
```

## DESCRIPTION

This class is a filter module class for use with Courier::Filter.  It matches a message if it has a `"Date"` header field that lies too far in the future or the past, relative to the local system's time.  If the message has a `"Resent-Date"` header field (see RFC 2822, 3.6.6), that one is examined instead, because the message could simply be an old one that has recently been re-sent, which is perfectly legitimate behavior.

In the case of a match, the response tells the sender that their `"Date"` header is implausible and that they should check their clock.

*Note*: Times in different time zones are compared correctly.

*Note*: When using this filter module, it is essential that the local system's own clock is set correctly, or there will be an increased risk of legitimate messages getting rejected.

### Constructor

The following constructor is provided:

- **new(%options)**: returns *Courier::Filter::Module::FakeDate*

  Creates a new **FakeDate** filter module.

  `%options` is a list of key/value pairs representing any of the following options:

  - **forward\_tolerance**

    - **backward\_tolerance**

    The maximum durations by which a message's `"Date"` or `"Resent-Date"` header may diverge into the future and the past, respectively, from the local system's time.  Each duration must be specified as a hash-ref containing one or more time units and their respective quantity/ies, just as specified by DateTime::Duration.  `"forward_tolerance"` defaults to *2 hours*. `"backward_tolerance"` defaults to *5 days* to account for transmission delays.

    For example:

    ```
        forward_tolerance  => { hours => 4 },
        backward_tolerance => { days  => 1, hours => 12 }
    ```

  - **ignore\_unparseable**

    A boolean value controlling whether messages whose `"Date"` or `"Resent-Date"` header does not loosely conform to RFCs 822 or 2822 should be ignored (**true**) or matched (**false**).  Defaults to **false**.

  All options of the **Courier::Filter::Module** constructor are also supported. Please see "new" in Courier::Filter::Module for their descriptions.

### Instance methods

See "Instance methods" in Courier::Filter::Module for a description of the provided instance methods.

## SEE ALSO

Courier::Filter::Module, Courier::Filter::Overview.

For AVAILABILITY, SUPPORT, and LICENSE information, see Courier::Filter::Overview.

## AUTHOR

Julian Mehnle \<julian@mehnle.net\>
