Search code examples
phptriggerssmtp

Can a PHP app run when email is sent?


Is there a way to configure a server or a script to execute a php script when an email is received?

In theory this could be extended to other protocols, such as XMPP or SMS, etc.

What I have in mind is a user could send a message to checking-in@example.org and this would trigger a script which would then do whatever needed to be done, either irrelevant to the message (an automated message that gets sent whenever some other even occurs, like a server having issues) or related to the message (like it could store the subject in a database that other users could view as an RSS feed).

I know that most list-serve software have a means of sending commands (like unsubscribe), but I'm not sure how complicated the process is and if it is feasible to have something like this on a server-script level.

Would this need to occur at the IMAP/SMTP level, or could it be done closer to the script or HTTP server?

Just to give some context, one of the things I'm considering is a message-based clock in server for one of my work sites. Users could IM/email/text that they are at their scheduled location and this could trigger a script that would update a DB, rather then send the managers a direct message they need to log. This would just be one option (a web-based method is already in the works), but we want to make it as platform/protocol independent as possible. But if we can achieve that, we can look at implementing it for many other day-to-day needs.

Another way of asking might be: is there a way to have "discovery" of users from a server-script app or does something need to be doing a constant check to relevant sources to see such changes?


Solution

  • If you control your own machine you can configure it to pipe the e-mail through a filter. Simplest would be to setup a new account and setup a .forward or alias

    The following examples are for Sendmail, but (all?) Unix e-mail programs offer a similar service.

    Setting up an alias (option 1)

    Look in the directory /etc on your server for your alias file. Add the line:

    script: "|/path/toyourscript/pipe.php"

    Using a .forward file (option 2)

    Create a .forward file in your main home directory.

    "|/path/toyourscript/pipe.php"

    or:

    myemail@example.com,"|/path/toyourscript/pipe.php"

    If you are on shared hosting then most hosting providers also provide the possiblity to "pipe" e-mails received to a particular account through a script instead of storing them in a mailbox. Check the CPanel setup.