+paramètre clé pour encode/decode +récupérer le contenu du dernier mail concerné +A FAIRE:gérer SMTP+POP+IMAP + ERREUR: Importation depuis IMAP mais erreur au niveau d'encode/decode caractère erroné qui ne s'affiche pas {???} [stable~50]

This commit is contained in:
xdrm-brackets 2015-05-24 18:02:06 +02:00
parent 7a92932493
commit 0d628eb157
7 changed files with 101 additions and 22 deletions

View File

@ -1,4 +1,9 @@
smtp_server = smtp.gmail.com smtp_server = smtp.gmail.com
smtp_port = 587 smtp_port = 587
smtp_login = equal_mailadress_or_different_login
imap_server = imap.gmail.com
imap_port = 993
mail_address = test@mail.com mail_address = test@mail.com
login = equal_mailadress_or_different_login

View File

@ -2,24 +2,38 @@
path=$(readlink -f $(dirname $0)) path=$(readlink -f $(dirname $0))
if [ $# -eq 1 ] if [ $# -ge 1 ]
then # si 1 paramètre then # si 1 paramètre au moins
if [ $# -ge 2 ] # si au moins 2 paramètres
then
param=$2;
else
param="";
fi;
case $1 in case $1 in
'help') cat "$path/source/help"|less;; 'help') cat "$path/source/help"|less;;
'init') # initialise le contenu du fichier de config 'init') # initialise le contenu du fichier de config
echo "smtp_server = smtp.gmail.com" > "$path/.config" echo "smtp_server = smtp.gmail.com" > "$path/.config"
echo "smtp_port = 587" >> "$path/.config" echo "smtp_port = 587" >> "$path/.config"
echo "smtp_login = equal_mailadress_or_different_login" >> "$path/.config" echo "" >> "$path/.config"
echo "imap_server = imap.gmail.com" >> "$path/.config"
echo "imap_port = 993" >> "$path/.config"
echo "" >> "$path/.config"
echo "mail_address = test@mail.com" >> "$path/.config" echo "mail_address = test@mail.com" >> "$path/.config"
echo "" >> "$path/.config"
echo "login = equal_mailadress_or_different_login" >> "$path/.config"
;; ;;
'config') nano "$path/.config";; # ouvre en modification le fichier de config 'config') nano "$path/.config";; # ouvre en modification le fichier de config
'write') nano "$path/bucket-file";; # ouvre en modification le bucket file 'write') nano "$path/bucket-file";; # ouvre en modification le bucket file
'empty') echo "">"$path/bucket-file";; # vide le bucket file 'empty') echo "">"$path/bucket-file";; # vide le bucket file
# ouvre en lecture le bucket file # ouvre en lecture le bucket file
'read') echo "\n======================================="; cat "$path/bucket-file"|less; echo "\n=======================================";; 'read') echo "\n======================================="; cat "$path/bucket-file"; echo "\n=======================================";;
'encode') python "$path/source/encode.py";; 'encode') python "$path/source/encode.py" $param;;
'decode') python "$path/source/decode.py";; 'decode') python "$path/source/decode.py" $param;;
'send') python "$path/source/send.py";; 'receive') python "$path/source/receive.py" $param;;
'send') python "$path/source/send.py" $param;;
*) echo "Erreur"; *) echo "Erreur";
esac; esac;
else else

View File

@ -6,6 +6,10 @@ import getpass, sys, os
# RECUPERATION DU CHEMIN ABSOLU # RECUPERATION DU CHEMIN ABSOLU
path = os.path.abspath( os.path.dirname(sys.argv[0]) ) path = os.path.abspath( os.path.dirname(sys.argv[0]) )
# OUVERTURE ET LECTURE DU FICHIER # OUVERTURE ET LECTURE DU FICHIER
inFile = open(path + '/../bucket-file', 'r'); inFile = open(path + '/../bucket-file', 'r');
m = inFile.read().decode('utf-8'); m = inFile.read().decode('utf-8');
@ -15,7 +19,9 @@ inFile.close();
# DEFINITION DE L'ALPHABET # DEFINITION DE L'ALPHABET
SIGMA = getSigma(); SIGMA = getSigma();
# CHOIX DE LA CLE if( len(sys.argv) >= 2 ): # si clé en argument
userkey = int( sys.argv[1], 0 );
else: # sinon saisie
userkey = int( raw_input('Cle (hex ou int): '), 0 ); userkey = int( raw_input('Cle (hex ou int): '), 0 );
# CALCUL de LEVEL en fonction de la clé (LEVEL = nombre de rotors) # CALCUL de LEVEL en fonction de la clé (LEVEL = nombre de rotors)

View File

@ -15,7 +15,9 @@ inFile.close();
# DEFINITION DE L'ALPHABET # DEFINITION DE L'ALPHABET
SIGMA = getSigma(); SIGMA = getSigma();
# CHOIX DE LA CLE if( len(sys.argv) >= 2 ): # si clé en argument
userkey = int( sys.argv[1], 0 );
else: # sinon saisie
userkey = int( raw_input('Cle (hex ou int): '), 0 ); userkey = int( raw_input('Cle (hex ou int): '), 0 );
# CALCUL de LEVEL en fonction de la clé (LEVEL = nombre de rotors) # CALCUL de LEVEL en fonction de la clé (LEVEL = nombre de rotors)

View File

@ -1,5 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import email
import imaplib
import smtplib import smtplib
from email.MIMEMultipart import MIMEMultipart from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText from email.MIMEText import MIMEText
@ -16,11 +18,14 @@ def getConf(pPath):
conf = {}; conf = {};
for i in lines: for i in lines:
try:
confKey = i[:i.index('=')].replace(' ', ''); confKey = i[:i.index('=')].replace(' ', '');
confVal = i[i.index('=')+1:].replace(' ', '').replace('\n', ''); confVal = i[i.index('=')+1:].replace(' ', '').replace('\n', '');
conf[confKey] = confVal; conf[confKey] = confVal;
except ValueError:
pass;
if( len(conf) == 4 ): # si le fichier de config est bien récupéré et qu'il est complet if( len(conf) == 6 ): # si le fichier de config est bien récupéré et qu'il est complet
return conf; return conf;
else: else:
return False; return False;
@ -34,7 +39,7 @@ def sendMail(pConf, pPass, pTo, pSubject, pMessage):
pMsg = MIMEMultipart(); pMsg = MIMEMultipart();
pMsg['From'] = pConf['mail_address']; pMsg['From'] = pConf['mail_address'];
pMsg['To'] = pTo; pMsg['To'] = pTo;
pMsg['Subject'] = pSubject; pMsg['Subject'] = "[ENIGMAIL] "+pSubject;
pMsg.attach( MIMEText(pMessage.encode('utf-8')) ); pMsg.attach( MIMEText(pMessage.encode('utf-8')) );
@ -44,7 +49,7 @@ def sendMail(pConf, pPass, pTo, pSubject, pMessage):
srv.starttls(); srv.starttls();
srv.ehlo(); srv.ehlo();
srv.login(pConf['smtp_login'], pPass); srv.login(pConf['login'], pPass);
srv.sendmail( pConf['mail_address'], pTo, pMsg.as_string() ); srv.sendmail( pConf['mail_address'], pTo, pMsg.as_string() );
print "> Mail envoye !"; print "> Mail envoye !";
@ -53,6 +58,27 @@ def sendMail(pConf, pPass, pTo, pSubject, pMessage):
finally: finally:
srv.quit(); srv.quit();
# cette fonction récupère les mails
def getMail(pConf, pPass):
mail = imaplib.IMAP4_SSL(pConf['imap_server'], pConf['imap_port']);
mail.login(pConf['login'], pPass); # identification
mail.list();
mail.select("inbox"); # On choisit le dossier INBOX.
result, data = mail.uid('search', None, '(HEADER Subject "[ENIGMAIL]")'); # on cherche les mails contenant [ENIGMAIL] dans le sujet
latest_email_uid = data[0].split()[-1];
result, data = mail.uid('fetch', latest_email_uid, '(RFC822)');
m = data[0][-1];
# Pour le dernier mail contenant [ENIGMAIL] dans le sujet, on met le contenu dans bucket file
body = '';
b = email.message_from_string(m);
if( b.is_multipart() ):
for p in b.get_payload():
body += p.get_payload()
return body;
# fonction qui renvoie l'alphabet # fonction qui renvoie l'alphabet

Binary file not shown.

View File

@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
from enigmail import *
import getpass, sys, os
# RECUPERATION DU CHEMIN ABSOLU
path = os.path.abspath( os.path.dirname(sys.argv[0]) );
# paramètres utilisateurs
conf = getConf(path);
if( conf == False ): # si manque des paramètres
print "parametres manquants";
raise SystemExit(0);
Pass = str( getpass.getpass('Mot de passe : ') );
print '...';
# si il existe bien un mail et qu'il n'y a pas d'erreurs
body = getMail(conf, Pass);
if( body != '' ):
# ECRITURE FICHIER
outFile = open(path + '/../bucket-file', 'w');
outFile.write( body );
outFile.close();
else:
print "Erreur";