Run Script Once Mail Is Received

Ye' old general discussion board. Basically, for everything that isn't covered elsewhere. Come here to shoot the breeze, shoot your mouth off, or whatever suits your fancy.
This forum is not for asking programming related questions.

Moderator: General Moderators

Post Reply
Pineriver
Forum Commoner
Posts: 50
Joined: Fri Aug 15, 2003 5:24 pm

Run Script Once Mail Is Received

Post by Pineriver »

Okay everyone,
The problem I am trying to get around is I have several items for sale that require payment through paypal on my web site, once the person that is buying an item completes the paypal payment method, I get an email notifying me that the payment has been made to buy the item with the details.

The items require password and user name generation so that that user can unlock the program and use, things are beginning to pick up pace and would like a way to execute a process script when the paypal email notice has arrived that takes care of all of this for me.

Now, I can create the process script myself no problem but dont know quite how to catch the paypal notice.
Is there an existing service or something that can be created on an apache linux server for this?
josh
DevNet Master
Posts: 4872
Joined: Wed Feb 11, 2004 3:23 pm
Location: Palm beach, Florida

Re: Run Script Once Mail Is Received

Post by josh »

Pineriver wrote:Is there an existing service or something that can be created on an apache linux server for this?
sendmail


you'd have to write a script to run on the command line and have sendmail pipe the incoming mail to it. Doesn't paypal have another notification option? Using email would sound pretty silly to me, especially because emails can be spoofed and also do not have a 100% success rate. What happens when sendmail goes down, or a message gets bounced at no fault of yours.. your customers pay you but do not receive their product?
Pineriver
Forum Commoner
Posts: 50
Joined: Fri Aug 15, 2003 5:24 pm

Re: Run Script Once Mail Is Received

Post by Pineriver »

[quote]Doesn't paypal have another notification option?[quote]

Hmm Ill have to look more into that but I didnt see anything
josh
DevNet Master
Posts: 4872
Joined: Wed Feb 11, 2004 3:23 pm
Location: Palm beach, Florida

Post by josh »

User avatar
Chris Corbyn
Breakbeat Nuttzer
Posts: 13098
Joined: Wed Mar 24, 2004 7:57 am
Location: Melbourne, Australia

Post by Chris Corbyn »

I set something up yesterday to log all my incoming SPAM/JUNK in a database so I can gather stats and refine my spam filtering options. The basic principle could be used in the same way here though.

This is using the exim system filter (if you're not using exim this won't be much help ;)

The system_filter.exim file

Code: Select all

if
   "${if def:header_X-Spam_flag: {there}}" is "there"
then
   pipe "/usr/local/bin/spam-mail-log $sender_address $recipients $h_Subject: $message_body  $h_X-Spam_report: $h_X-Spam_score $message_id"
   headers add "X-Spam_new_subject: *****SPAM***** $h_subject:"
   headers remove Subject
   headers remove subject
   headers add "Subject: $h_X-Spam_new_subject:"
   headers remove X-Spam_new_subject

   if $h_X-Spam_score_int is above 100
   then
      fail text "This message looks like SPAM and has not been delivered ($h_X-Spam_score:)"
   endif

   finish
endif
(I also have a spam router that delivers mail with spam score between 5 and ten to the spam mailbox for the user account)

and the pipe I'm using (Yes it's written in PHP for CLI)

Code: Select all

#!/usr/local/bin/php
<?php

$conn = mysql_connect('localhost', 'spam', '******');
mysql_select_db('spamassassin');

if (count($argv) <  die();

$copy = array();

foreach ($argv as $v) $copy[] = mysql_real_escape_string($v);

$pre_query = "select * from spamlog where message_id = '$copy[7]'";
$pre_result = mysql_result($pre_query);
if (mysql_num_rows($pre_result) > 0) die();

$query = "
insert into
    spamlog (
        sender,
        recipient,
        subject,
        body,
        report,
        score,
        message_id,
        delivery_time)
    values (
        '$copy[1]',
        '$copy[2]',
        '$copy[3]',
        '$copy[4]',
        '$copy[5]',
        '$copy[6]',
        '$copy[7]',
        now())";
mysql_query($query);

mysql_close();

?>
You get the idea though, you can send the details of the email to a script which proccess them (all headers and everything).
Post Reply