Documentation for fullquottel

# Introduction

fullquottel is a program that helps to distinguish whether an email has the "tofu" style (tofu ... german "Text oben, Fullquote unten" for "text above, fullquote below"; cf. "top posting", "jeopardy style", ...) or not. It takes the (already decoded) email body as input (standard input) and returns one of the words: 'Goodquottel' or 'Fullquottel' on stdout.

# Details

The program performs several tests to decide whether the mail is a tofu mail or not. Each test produces a score. The final sum of the individual test scores is compared to a threshold. If it is above it, the mail is classified as tofu mail ('Fullquottel' is returned). Further more, the score itself is returned as number and as as row of where each score point produces one *.

Each test can be customized:

- It can be turned on and off (all tests are turned on by default).
- Its score can be specified (most of the tests have the score of 1.0 by default).
- The individual threshold of some tests can be specified.
- Some tests have additional parameters.

# The Tests

## Own Signature Test (ownSigTest)

This test searches for the own email signature (default in file: ~/.signature), no matter if it is quoted or not. If the own signature is included in a reply, this is a strong sign for a tofu mail.

## Microsoft Attribution Line Test (msTest)

People using MS Outlook (Express) often have the original mail at the bottom of their reply below a line like "----- Original Message -----". This test searches for this kind of lines. It is possible to compare the line number where it was found to a certain threshold. If the line number is equal to or higher than this threshold, the test is positive and the specified score is added.

Why the line number? It is possible that a user replies in a non-tofu way but has this "original message" line at the very beginning of his reply.

## Ratio Quoted Lines To All Lines Test (quotedToAllTest)

This test calculates the ratio between the number of quoted lines and the number of all lines. The ratio has a value between 0 and 1. It is compared to a threshold (default: 0.5) and in case the ratio is higher than the threshold the score is added to the final score. Additionally a factor can be specified that adds an additional weighted score:

score(quotedToAllTest) = ratio > threshold ? score + ratio * factor : 0

## Ratio Quoted Lines At Bottom Of The Mail To All Lines Test (bottomQuotedToAllTest)

This test calculates the ratio between the number of quoted lines at the bottom of the mail and the number of all lines. The ratio has a value between 0 and 1. It is compared to a threshold (default: 0.5) and in case the ratio is higher than the threshold the score is added to the final score. Additionally a factor can be specified that adds an additional weighted score:

score(bottomQuotedToAllTest) = ratio > threshold ? score + ratio * factor : 0

## Ratio Quoted Lines At Bottom Of The Mail To Quoted Lines Test (bottomQuotedToQuotedTest)

This test calculates the ratio between the number of quoted lines at the bottom of the mail and the number of all quoted lines. The ratio has a value between 0 and 1. It is compared to a threshold (default: 0.5) and in case the ratio is higher than the threshold the score is added to the final score. Additionally a factor can be specified that adds an additional weighted score:

score(bottomQuotedToQuotedTest) = ratio > threshold ? score + ratio * factor : 0

## Single Quote Block At The Bottom of The Mail Test (mailSingleBottomQuote)

This tests checks if the mail has only one quote block and if this quote block is at the bottom of the mail - the classical tofu style.

# Links used for programming

## option parser

- http://getpot.sourceforge.net/
- http://platon.sk/projects/main_page.php?project_id=3
- http://www.gubbe.ch/code/libcfgparse.php
- http://stlplus.sourceforge.net/stlplus/docs/ini_manager.html
- http://config-plus.sourceforge.net/

## Mime decoder

- http://directory.fsf.org/libs/cpp/mimetic.html
- http://codesink.org/mimetic_mime_library.html#snippets