Το πρόγραμμα TaxMail καλείται από τη γραμμή διαταγής με παράμετρο το όνομα
ενός αρχείου pdf ή xps, και περιμένει να υπάρχει και ένα αρχείο οδηγιών XML με 
το ίδιο όνομα στον ίδιο φάκελο, το οποίο προσπαθεί να φορτώσει. Αν δεν τα 
καταφέρει, τερματίζει και επιστρέφει αποτυχία.
 
Το αρχείο XML αυτό, μπορεί να περιέχει τις εγγραφές <EmailSent> και <WebSent>,
οι οποίες δείχνουν αν έχει σταλεί το έντυπο με email και αν έχει αποθηκευθεί 
στον web server αντίστοιχα. Η εγγραφή EmailSent περιέχει κάποιον αριθμό διάφορο 
του 0 για να δείξει ότι το email έχει σταλεί. Η εγγραφή <WebSent> περιέχει το 
κείμενο απάντησης του web server αν έχει γίνει επιτυχώς η αποθήκευση σε αυτόν, 
αλλιώς είναι κενή ή δεν υπάρχει καθόλου. Αν και οι δύο ενέργειες έχουν γίνει,
το πρόγραμμα γράφει στο logbook (το οποίο βρίσκεται στο φάκελο 
<CommonApplicationData>\INCA Hellas\TaxMail) και τερματίζει χωρίς άλλη ενέργεια, 
επιστρέφοντας 0 (επιτυχία).

Στον ίδιο φάκελο με το αρχείο XML, βρίσκονται με το ίδιο όνομα τα αρχεία Α και 
Β (και πιθανώς E) με το ίδιο όνομα και κατάληξη _a.txt και _b.txt (και _e.txt),
τα οποία το πρόγραμμα, προσθέτει σε ένα συμπιεσμένο αρχείο με κατάληξη .einv, 
μαζί με το κυρίως έγγραφο. 
Στην έκδοση Release, το έγγραφο μετονομάζεται με το πρόθεμα sending_.

Τα αρχεία _a,_b (,_e) και xps ή pdf, συμπιέζονται σε ένα αρχείο zip με κατάληξη .zip 
αν το tag <ZipFile> είναι διάφορο του 0, και .einv αν το tag είναι 0 ή δεν υπάρχει.
Τότε υπολογίζεται ένα hash SHA1. Αν πρόκειται να δημιουργηθεί .einv κι εφ'όσον έχει 
ζητηθεί κωδικοποίηση από το αρχείο οδηγιών με το tag <UseEncryption>, 
κωδικοποιείται με χρήση ενός hardcoded password και ενός initialization vector, 
το οποίο αποστέλλεται στον web server.  
Το αρχείο pdf μπορεί να υπογραφεί ψηφιακά χρησιμοποιώντας το πιστοποιητικό που 
καθορίζεται από τα πεδία <PdfCertPath> και <PdfCertPwd>.

Γίνεται προσπάθεια ενημέρωσης του web server καλώντας τη 
σελίδα που καθορίζεται από την εγγραφή <HttpUrl>. Στην εγγραφή <HttpProxyUrl> μπορεί
να καθοριστεί ο proxy, η λέξη "DEFAULT" οπότε χρησιμοποιείται η ρύθμιση του IE, ή κενό
ώστε να παρακαμφθεί τυχόν proxy. Η κλήση γίνεται με POST, με τις εξής μεταβλητές:
USER=το περιεχόμενο της εγγραφής <HttpUser>
PWD=το περιεχόμενο της εγγραφής <HttpPasswd>
SIGN=η ψηφιακή υπογραφή του αρχείου b
SIGNEX=η ψηφιακή υπογραφή (SHA1) που δημιουργήθηκε με βάση τα περιεχόμενα του 
unencrypted zip αρχείου με κατάληξη .einv
ZNR=ένας 4-ψήφιος αριθμός που παίρνεται από τη θέση 17 του ονόματος αρχείου του
εγγράφου
IV=16 bytes σε δεκαεξαδική μορφή, που χρησιμοποιήθηκαν για την κωδικοποίηση ως 
initialization vector
EMAIL=η λίστα των ηλεκτρονικών διευθύνσεων των παραληπτών, χωρισμένων με κόμμα.
EMAILCC=η λίστα των ηλεκτρονικών διευθύνσεων στους οποίους θα γίνει κοινοποίηση
EMAILBCC=η λίστα των ηλεκτρονικών διευθύνσεων στους οποίους θα γίνει κρυφή κοινοποίηση
Ανάλογα με το αποτέλεσμα της επικοινωνίας, ενημερώνεται και η εγγραφή <WebSent>,
με το περιεχόμενο της απάντησης από το web server.

ΜΟΝΟ ΓΙΑ ΤΗΝ ΕΚΔΟΣΗ STORAGE
---------------------------
Η έκδοση αυτή υποστηρίζει τη μεταφορά του αρχείου .zip ή .einv σε κάποια διαδικτυακή 
υπηρεσία αποθήκευσης αρχείων. Για το σκοπό αυτό υπάρχουν οι παρακάτω εγγραφές.
<StoragePath>Το πλήρες όνομα με το οποίο θα αποθηκευτεί το αρχείο καθορίζεται στην απάντηση του
web server μετά την ενημέρωσή του και αποθηκεύεται εδώ. 
<StorageSent> Περιέχει "OK" αν έχει γίνει επιτυχώς η αποθήκευση, αλλιώς είναι κενή 
ή δεν υπάρχει καθόλου.
<StorageService> -1 = Χωρίς αποθήκευση (default) 0 = Dropbox  1 = Google Drive (με service account)  
2 = Google Drive (με client id) 3 = Google Storage (με service account)  
4 = Google Storage (με client id)
<StorageDropboxToken> Αν χρησιμοποιείται το Dropbox, είναι είτε κρυπτογραφημένο το 
access token είτε ένας αριθμός από 1 (default) έως 99 που δείχνει ποιο από τα ενσωματωμένα 
access tokens θα χρησιμοποιηθεί.
<StorageGoogleServiceAccount>Αν χρησιμοποιείται το Google Drive ή Google Storage με service 
account, είναι ένας αριθμός από 1 (default) που δείχνει ποιο από τα ενσωματωμένα service 
accounts θα χρησιμοποιηθεί.
<StorageGoogleClientId>Αν χρησιμοποιείται το Google Drive ή Google Storage με client ID, 
είναι ένας αριθμός από 1 (default) που δείχνει ποιο από τα ενσωματωμένα client IDs θα 
χρησιμοποιηθεί.
<StorageGStorageProjectId>Αν χρησιμοποιείται το Google Storage, είναι το 
αναγνωριστικό του project, στο οποίο βρίσκεται το bucket που θα χρησιμοποιηθεί.
<StorageGStorageBucket>Αν χρησιμοποιείται το Google Storage, είναι το bucket που 
θα χρησιμοποιηθεί.
<StorageFileId>Σε περίπτωση επιτυχούς αποθήκευσης, εδώ καταγράφεται κάποιο μοναδικό
αναγνωριστικό του αρχείου, ανάλογα με την υπηρεσία αποθήκευσης.
Εφ' όσον τα αρχεία αποθηκεύονται διαδικτυακά, δεν υπάρχει λόγος για αποστολή τους ως
συνημμένα. Αν παρ'όλα αυτά, αυτό είναι επιθυμητό, μπορεί να οριστεί η εγγραφή 
<StorageSendAttachment> με αξία 1.
Για τη σύνδεση με τις υπηρεσίες αποθήκευσης χρησιμοποιείται ο proxy που έχει καθοριστεί
στην εγγραφή <HttpProxyUrl>
-----------------------------

Αν η ενημέρωση του web server και η πιθανή αποθήκευση έχουν γίνει, ή αν το 
αρχείο πρέπει να σταλεί ως συνημμένο, χρησιμοποιεί το mail server που καθορίζεται 
από τις εγγραφές <SmtpHost> και <SmtpPort>, με διαπιστευτήρια <SmtpUser> και 
<SmtpPasswd> και το αποστέλλει ως υψηλής προτεραιότητας, με συνημμένο το συμπιεσμένο 
αρχείο, στους παραλήπτες που καθορίζονται από τις εγγραφές <SmtpTo>, ενώ ο αποστολέας 
καθορίζεται από την εγγραφή <SmtpFrom>. Αντίγραφο παραλαμβάνουν και οι 
παραλήπτες που καθορίζονται από μία ή περισσότερες εγγραφές <SmtpCc> και 
<SmtpBcc>. Η αποστολή γίνεται με χρήση του πρωτοκόλου SSL αν η εγγραφή 
<SmtpUseSSL> υπάρχει και είναι διάφορη του 0. To timeout καθορίζεται με την 
εγγραφή <SmtpTimeout>, το θέμα με την <SmtpSubject> και το περιεχόμενο κείμενο 
με την εγγραφή <SmtpBody> (το οποίο θεωρείται HTML). Ανάλογα με το αποτέλεσμα
της αποστολής, ενημερώνεται η εγγραφή <EmailSent>.
Αν η εγγραφή <SmtpSyncMode> υπάρχει και είναι 0, ορίζει ότι η αποστολή θα γίνει ασύγχρονα. 
Αν στην εγγραφή <SmtpUser> υπάρχει η λέξη "DEFAULT", τότε χρησιμοποιούνται default 
διαπιστευτήρια. Αν και η <SmtpUser> και η <SmtpPasswd> είναι κενές, τότε το μήνυμα 
στέλνεται ανωνύμως στον SMTP server.

Στην έκδοση Release, το έγγραφο μετονομάζεται στο αρχικό του όνομα, αφαιρώντας
το πρόθεμα sending_, και το πρόγραμμα τερματίζει. 

