POP3 Retrieval

Avg Bid (USD)
Project Budget (USD)
$100 - $500

Project Description:
A linux CLI executable to download messages from a POP3 server to a file for each message.

## Deliverables

It's intend to work as any POP3 client, i.e. connect to the server, get the messages list, retrieve new messages (limited by the maximun defined), delete from the server (optional). This cycle must be repeated a definied number of times for each run, retrieving on each a definied max of messages, and closing the connection at the end of the cycle (deleting the messages if the setting is enabled). For each fetched message, it has to create a text file with the entire message (including headers), with the md5 of the message as filename in a specific directory. If a file with this name exists, we're probably in front of a duplicated message, so if it is true, it hasn't to create a new file. To the next cycle, it has to wait a delay time.

The app has to read the configuration XML file from a path received as a parameter; and multiple instances of the app may be running at the same time, each with a different config file.

Also, it has to record a XML log for each cycle, in which is described what has been done (numbers of emails on the UIDL, numbers of UID to fetch, UID fetched successfully, etc), and any error occurred (no network, no response from POP server, etc). The output of the log at the end of the cycle may be a file (named by the date of running) and/or a database (calling a configurable function on a configurable PostgreSQL DB). In error case, the app must be able to send an email with the warning (mail address and subject, configurable in the configuration file; the body, with a description of the error).

In the xml configuration file we can set:
* Connection parameters (host, port, SSL, username, password)
* Pop Retrieval
* * Number of cycles (number of attemps to download message for each run)
* Delay time between cycles (seconds to wait for a new cycle)
* Fetch messages max (the maximum numbers of messages to fetch for each cycle)
* Delete options (delete on download)
* Target
* * Target directory (may be a mounted network volume)
* Target directory max files (the max numbers of files in the directory; if it's reached, will not fetch any message until it has space)
* Alert
* * numbers of error to trigger mail
* email address
* subject
* body
* Log
* * Directory
* * Enable/Disable
* Directory

<!-- -->

* Database
* Enable/Disable
* Server
* Database
* Function
* User
* Password

The typical execution it's like this (where

*italic and underlined* words are parameters in the config.xml):
1. read the config.xml
2. repeat *cycles* times
1. connect to *host*
2. get the list of messages
3. if messages avaliable number is greater than *maxMessages*
retrieve the oldest *maxMessages* messages from the list
retrieve all messages from the list
4. for each message fetched
1. create a text file with the message, named as the md5 of the message
2. if the file exists, check if the message it's the same. If it's true, discard the message

<!-- -->

1. create a text file with the message, named as the md5 of the message
2. if the file exists, check if the message it's the same. If it's true, discard the message
5. delete downloaded messages from server
6. close connection
7. close XML log file, and call the function *function* of the PostgreSQL database *database* passing the XML log as a parameter
8. wait *delay* seconds

* config.xml example
* log.xml example

* * *This broadcast message was sent to all bidders on Wednesday Jun 25, 2008 4:11:42 PM:

The requierements has changed. Please review it,and check if your bids still valid. It's fundamentally drop the UID message getting, and replace it for md5 of the message for identifiyng it.

Skills required:
Engineering, Linux, MySQL, PHP, Software Architecture, Software Testing
Additional Files: zRAC_DOC_NameCryptedToProtectYourPrivacy_X200861917519489252342566603588774805602204807208816843312811808343575POP3Retreival.zip
About the employer:
Public Clarification Board
Bids are hidden by the project creator. Log in as the employer to view bids or to bid on this project.
You will not be able to bid on this project if you are not qualified in one of the job categories. To see your qualifications click here.