def OnBoutonTester(self, event): if self.GetPageActive().Validation() == False : return False # Récupération des paramètres dict_donnees = self.GetPageActive().GetDonnees() # Demande une adresse de destination adresse = UTILS_Parametres.Parametres(mode="get", categorie="emails", nom="adresse_test", valeur=u"") dlg = wx.TextEntryDialog(self, _(u"Saisissez une adresse Email de destination et cliquez sur Ok :"), _(u"Envoi d'un Email de test"), adresse) if dlg.ShowModal() != wx.ID_OK: dlg.Destroy() return adresse = dlg.GetValue() dlg.Destroy() # Mémorise l'adresse saisie if UTILS_Envoi_email.ValidationEmail(adresse) == False : dlg = wx.MessageDialog(self, _(u"L'adresse saisie n'est pas valide !"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return UTILS_Parametres.Parametres(mode="set", categorie="emails", nom="adresse_test", valeur=adresse) # Création du message de test message = UTILS_Envoi_email.Message( destinataires=[adresse, ], sujet=u"Test de messagerie", texte_html=u"<p>Ceci est un <b>test de messagerie</b> envoyé à %s.</p>" % datetime.datetime.now().strftime("%H:%M:%S"), ) try : messagerie = UTILS_Envoi_email.Messagerie( backend=dict_donnees["moteur"], hote=dict_donnees["smtp"], port=dict_donnees["port"], utilisateur=dict_donnees["utilisateur"], motdepasse=dict_donnees["motdepasse"], email_exp=dict_donnees["adresse"], nom_exp=dict_donnees["nom_adresse"], timeout=10, use_tls=dict_donnees["startTLS"], parametres=dict_donnees["parametres"], ) messagerie.Connecter() messagerie.Envoyer(message) messagerie.Fermer() except Exception as err: err = str(err) if six.PY2: err = err.decode("iso-8859-15") intro = _(u"L'envoi de l'email de test est impossible :") conclusion = _(u"Vérifiez votre connexion internet ou les paramètres de votre adresse d'expédition.") dlgErreur = DLG_Messagebox.Dialog(self, titre=_(u"Erreur"), introduction=intro, detail=err, conclusion=conclusion, icone=wx.ICON_ERROR, boutons=[_(u"Ok"),]) dlgErreur.ShowModal() dlgErreur.Destroy() return False dlg = wx.MessageDialog(self, _(u"L'email de test a été envoyé avec succès."), _(u"Test de connexion"), wx.OK | wx.ICON_INFORMATION) dlg.ShowModal() dlg.Destroy()
def Envoyer(self, listeDestinataires=[], adresseTest=None): # Expéditeur dictExp = self.ctrl_exp.GetDonnees() if dictExp == None: dlg = wx.MessageDialog( self, _(u"Vous n'avez sélectionné aucune adresse d'expéditeur !"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() if self.IsShown() == False: self.ShowModal() return # Accusé de réception accuseReception = self.check_accuseReception.GetValue() # Objet sujet = self.ctrl_objet.GetValue() if len(sujet) == 0: dlg = wx.MessageDialog( self, _(u"Vous devez obligatoirement saisir un objet pour ce message !" ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() if self.IsShown() == False: self.ShowModal() self.ctrl_objet.SetFocus() return # Destinataires if len(listeDestinataires) == 0: dlg = wx.MessageDialog( self, _(u"Vous devez sélectionner au moins un destinataire !"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() if self.IsShown() == False: self.ShowModal() return nbreAnomalies = 0 for dest in listeDestinataires: if dest.adresse == None: nbreAnomalies += 1 if nbreAnomalies > 0: dlg = wx.MessageDialog( self, _(u"%d adresse(s) Email ne sont pas renseignées !") % nbreAnomalies, _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return # Texte if len(self.ctrl_editeur.GetValue()) == 0: dlg = wx.MessageDialog( self, _(u"Vous devez obligatoirement saisir un texte !"), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() if self.IsShown() == False: self.ShowModal() self.ctrl_editeur.SetFocus() return texteHTML, listeImages, handler = self.ctrl_editeur.GetHTML( imagesIncluses=True) # Vérifie la fusion des mots-clés if self.VerifieFusion(texteHTML, listeDestinataires) == False: if self.IsShown() == False: self.ShowModal() return # Pièces jointes listePiecesCommunes = self.ctrl_pieces.GetDonnees() # Demande de confirmation if adresseTest == None and self.afficher_confirmation_envoi == True: dlg = wx.MessageDialog( self, _(u"Confirmez-vous l'envoi de ce message pour %d destinataires ?\n\nAttention, l'envoi peut prendre quelques minutes..." ) % len(listeDestinataires), _(u"Confirmation"), wx.YES_NO | wx.YES_DEFAULT | wx.CANCEL | wx.ICON_QUESTION) if dlg.ShowModal() != wx.ID_YES: dlg.Destroy() if self.IsShown() == False: self.ShowModal() return dlg.Destroy() # Préparation des messages liste_messages = [] for track in listeDestinataires: adresse = track.adresse if adresseTest != None: adresse = adresseTest listePiecesPersonnelles = track.pieces dictChamps = track.champs # Pièces Personnelles + communes listePieces = listePiecesPersonnelles listePieces.extend(listePiecesCommunes) # Traitement des champs pour la fusion texte = copy.deepcopy(texteHTML) for motcle, valeur in CTRL_Editeur_email.GetChampsStandards( ).items(): texte = texte.replace(motcle, valeur) for motcle, valeur in dictChamps.items(): if valeur == None: valeur = u"" if type(valeur) == int: valeur = str(valeur) if type(valeur) == bool: valeur = str(valeur) if type(valeur) == datetime.date: valeur = UTILS_Dates.DateDDEnFr(valeur) texte = texte.replace(motcle, valeur) # Mémorisation du message message = UTILS_Envoi_email.Message( destinataires=[ adresse, ], sujet=sujet, texte_html=texte, fichiers=listePieces, images=listeImages, champs=dictChamps, ) liste_messages.append(message) # Connexion messagerie dlg_progress = wx.ProgressDialog( _(u"Envoi des mails"), _(u"Connexion au serveur de messagerie..."), maximum=len(liste_messages) + 1, parent=None) dlg_progress.SetSize((450, 140)) dlg_progress.CenterOnScreen() try: messagerie = UTILS_Envoi_email.Messagerie( backend=dictExp["moteur"], hote=dictExp["smtp"], port=dictExp["port"], utilisateur=dictExp["utilisateur"], motdepasse=dictExp["motdepasse"], email_exp=dictExp["adresse"], nom_exp=dictExp["nom_adresse"], timeout=20, use_tls=dictExp["startTLS"], parametres=dictExp["parametres"]) messagerie.Connecter() except Exception as err: dlg_progress.Destroy() err = str(err) intro = _( u"La connexion au serveur de messagerie est impossible :") conclusion = _( u"Vérifiez votre connexion internet ou les paramètres de votre adresse d'expédition." ) dlgErreur = DLG_Messagebox.Dialog(self, titre=_(u"Erreur"), introduction=intro, detail=err, conclusion=conclusion, icone=wx.ICON_ERROR, boutons=[ _(u"Ok"), ]) dlgErreur.ShowModal() dlgErreur.Destroy() return False # Envoi des messages self.listeSucces = messagerie.Envoyer_lot( messages=liste_messages, dlg_progress=dlg_progress, afficher_confirmation_envoi=self.afficher_confirmation_envoi) # Fermeture messagerie try: messagerie.Fermer() except: pass # Fermeture dlg_progress si besoin if dlg_progress != None: try: dlg_progress.Destroy() except: pass # Suppression des images temporaires incluses dans le message handler.DeleteTemporaryImages() # Mémorisation dans l'historique if self.listeSucces != False: for message in self.listeSucces: self.MemorisationHistorique(message.GetLabelDestinataires(), message.sujet)
def Envoyer(self): # Demande de confirmation dlg = wx.MessageDialog(self, _(u"Confirmez-vous l'envoi du message vers %d numéros ?") % len(self.dictDonnees["liste_telephones"]), _(u"Confirmation"), wx.YES_NO|wx.YES_DEFAULT|wx.CANCEL|wx.ICON_QUESTION) reponse = dlg.ShowModal() dlg.Destroy() if reponse != wx.ID_YES : return False # --------------------- CONTACT EVERYONE BY ORANGE BUSINESS --------------------- if self.dictDonnees["plateforme"] == "contact_everyone" : # Récupération adresse d'expédition IDadresse = self.dictDonnees["adresse_expedition_email"] dictAdresse = UTILS_Envoi_email.GetAdresseExp(IDadresse=IDadresse) # Génération de la pièce jointe liste_lignes = [] for ligne in self.dictDonnees["message"].split("\n") : liste_lignes.append(u"T-%s" % ligne) for numero in self.dictDonnees["liste_telephones"] : numero = numero.replace(".", "") liste_lignes.append(u"#-%s" % numero) texte = "\n".join(liste_lignes) cheminFichier = UTILS_Fichiers.GetRepTemp(fichier="sms.txt") fichier = open(cheminFichier, 'w') fichier.write(texte.encode("iso-8859-15")) fichier.close() # Préparation du message message = UTILS_Envoi_email.Message(destinataires=[self.dictDonnees["orange_adresse_destination_email"],], sujet=self.dictDonnees["objet"], texte_html=_(u"Envoi de SMS"), fichiers=[cheminFichier,]) # Envoi de l'email resultat = self.EnvoyerEmail(message=message, dictAdresse=dictAdresse) if resultat == False: return False # --------------------- CLEVER SMS --------------------- if self.dictDonnees["plateforme"] == "cleversms" : # Récupération adresse d'expédition IDadresse = self.dictDonnees["adresse_expedition_email"] dictAdresse = UTILS_Envoi_email.GetAdresseExp(IDadresse=IDadresse) # Génération de la pièce jointe liste_lignes = [] message = self.dictDonnees["message"].replace("\n", "") for numero in self.dictDonnees["liste_telephones"] : numero = numero.replace(".", "") liste_lignes.append(u"%s;%s" % (numero, message)) texte = "\n".join(liste_lignes) cheminFichier = UTILS_Fichiers.GetRepTemp(fichier="sms.txt") fichier = open(cheminFichier, 'w') fichier.write(texte.encode("iso-8859-15")) fichier.close() # Préparation du message message = UTILS_Envoi_email.Message(destinataires=[self.dictDonnees["cleversms_adresse_destination_email"],], sujet=self.dictDonnees["objet"], texte_html=_(u"Envoi de SMS"), fichiers=[cheminFichier,]) # Envoi de l'email resultat = self.EnvoyerEmail(message=message, dictAdresse=dictAdresse) if resultat == False: return False # --------------------- CLEVER MULTIMEDIAS --------------------- if self.dictDonnees["plateforme"] == "clevermultimedias" : # Récupération adresse d'expédition IDadresse = self.dictDonnees["adresse_expedition_email"] dictAdresse = UTILS_Envoi_email.GetAdresseExp(IDadresse=IDadresse) # Génération de la pièce jointe liste_lignes = ["NUM;MESSAGE",] message = self.dictDonnees["message"].replace("\n", "") for numero in self.dictDonnees["liste_telephones"] : numero = numero.replace(".", "") numero = "+33" + numero[1:] liste_lignes.append(u"%s;%s" % (numero, message)) texte = "\n".join(liste_lignes) cheminFichier = UTILS_Fichiers.GetRepTemp(fichier="sms.txt") fichier = open(cheminFichier, 'w') fichier.write(texte.encode("iso-8859-15")) fichier.close() # Préparation du message message = UTILS_Envoi_email.Message(destinataires=[self.dictDonnees["clevermultimedias_adresse_destination_email"],], sujet=self.dictDonnees["objet"], texte_html=_(u"Envoi de SMS"), fichiers=[cheminFichier,]) # Envoi de l'email resultat = self.EnvoyerEmail(message=message, dictAdresse=dictAdresse) if resultat == False: return False # --------------------- MAILJET --------------------- if self.dictDonnees["plateforme"] == "mailjet": # Récupération token api_token = self.dictDonnees["token_sms_mailjet"] sender_id = self.dictDonnees["sender_sms_mailjet"] # Préparation de l'envoi headers = { "Authorization": "Bearer {api_token}".format(api_token=api_token), "Content-Type": "application/json" } api_url = "https://api.mailjet.com/v4/sms-send" # Envoi des SMS message = self.dictDonnees["message"].replace("\n", "") nbre_envois_reussis = 0 for numero in self.dictDonnees["liste_telephones"]: numero = numero.replace(".", "") numero = "+33" + numero[1:] # Création du message JSON message_data = { "From": sender_id, "To": numero, "Text": message } reponse = requests.post(api_url, headers=headers, json=message_data) if reponse.ok: nbre_envois_reussis += 1 else: print("Erreur envoi SMS :", reponse.text) dict_erreur = json.loads(reponse.text) texte_erreur = u"Code erreur : %s. Erreur : %s" % (dict_erreur["ErrorCode"], dict_erreur["ErrorMessage"]) dlg = DLG_Messagebox.Dialog(self, titre=_(u"Envoi de SMS"), introduction=_(u"L'envoi du SMS vers le numéro %s a rencontré une erreur :") % numero, detail=texte_erreur, conclusion=_(u"Que souhaitez-vous faire ?"), icone=wx.ICON_ERROR, boutons=[_(u"Continuer l'envoi"), _(u"Arrêter")]) reponse = dlg.ShowModal() dlg.Destroy() if reponse == 1: return False # Confirmation d'envoi dlg = wx.MessageDialog(self, _(u"Envoi des SMS terminé."), _(u"Confirmation"), wx.OK | wx.ICON_INFORMATION) dlg.ShowModal() dlg.Destroy() return True
def Envoyer(self): # Demande de confirmation dlg = wx.MessageDialog(self, _(u"Confirmez-vous l'envoi du message vers %d numéros ?") % len(self.dictDonnees["liste_telephones"]), _(u"Confirmation"), wx.YES_NO|wx.YES_DEFAULT|wx.CANCEL|wx.ICON_QUESTION) reponse = dlg.ShowModal() dlg.Destroy() if reponse != wx.ID_YES : return False # --------------------- CONTACT EVERYONE BY ORANGE BUSINESS --------------------- if self.dictDonnees["plateforme"] == "contact_everyone" : # Récupération adresse d'expédition IDadresse = self.dictDonnees["adresse_expedition_email"] dictAdresse = UTILS_Envoi_email.GetAdresseExp(IDadresse=IDadresse) # Génération de la pièce jointe liste_lignes = [] for ligne in self.dictDonnees["message"].split("\n") : liste_lignes.append(u"T-%s" % ligne) for numero in self.dictDonnees["liste_telephones"] : numero = numero.replace(".", "") liste_lignes.append(u"#-%s" % numero) texte = "\n".join(liste_lignes) cheminFichier = UTILS_Fichiers.GetRepTemp(fichier="sms.txt") fichier = open(cheminFichier, 'w') fichier.write(texte.encode("iso-8859-15")) fichier.close() # Préparation du message message = UTILS_Envoi_email.Message(destinataires=[self.dictDonnees["orange_adresse_destination_email"],], sujet=self.dictDonnees["objet"], texte_html=_(u"Envoi de SMS"), fichiers=[cheminFichier,]) # Envoi de l'email resultat = self.EnvoyerEmail(message=message, dictAdresse=dictAdresse) if resultat == False: return False # --------------------- CLEVER SMS --------------------- if self.dictDonnees["plateforme"] == "cleversms" : # Récupération adresse d'expédition IDadresse = self.dictDonnees["adresse_expedition_email"] dictAdresse = UTILS_Envoi_email.GetAdresseExp(IDadresse=IDadresse) # Génération de la pièce jointe liste_lignes = [] message = self.dictDonnees["message"].replace("\n", "") for numero in self.dictDonnees["liste_telephones"] : numero = numero.replace(".", "") liste_lignes.append(u"%s;%s" % (numero, message)) texte = "\n".join(liste_lignes) cheminFichier = UTILS_Fichiers.GetRepTemp(fichier="sms.txt") fichier = open(cheminFichier, 'w') fichier.write(texte.encode("iso-8859-15")) fichier.close() # Préparation du message message = UTILS_Envoi_email.Message(destinataires=[self.dictDonnees["cleversms_adresse_destination_email"],], sujet=self.dictDonnees["objet"], texte_html=_(u"Envoi de SMS"), fichiers=[cheminFichier,]) # Envoi de l'email resultat = self.EnvoyerEmail(message=message, dictAdresse=dictAdresse) if resultat == False: return False # --------------------- CLEVER MULTIMEDIAS --------------------- if self.dictDonnees["plateforme"] == "clevermultimedias" : # Récupération adresse d'expédition IDadresse = self.dictDonnees["adresse_expedition_email"] dictAdresse = UTILS_Envoi_email.GetAdresseExp(IDadresse=IDadresse) # Génération de la pièce jointe liste_lignes = ["NUM;MESSAGE",] message = self.dictDonnees["message"].replace("\n", "") for numero in self.dictDonnees["liste_telephones"] : numero = numero.replace(".", "") numero = "+33" + numero[1:] liste_lignes.append(u"%s;%s" % (numero, message)) texte = "\n".join(liste_lignes) cheminFichier = UTILS_Fichiers.GetRepTemp(fichier="sms.txt") fichier = open(cheminFichier, 'w') fichier.write(texte.encode("iso-8859-15")) fichier.close() # Préparation du message message = UTILS_Envoi_email.Message(destinataires=[self.dictDonnees["clevermultimedias_adresse_destination_email"],], sujet=self.dictDonnees["objet"], texte_html=_(u"Envoi de SMS"), fichiers=[cheminFichier,]) # Envoi de l'email resultat = self.EnvoyerEmail(message=message, dictAdresse=dictAdresse) if resultat == False: return False # Confirmation d'envoi dlg = wx.MessageDialog(self, _(u"Envoi des SMS effectué avec succès."), _(u"Confirmation"), wx.OK | wx.ICON_INFORMATION) dlg.ShowModal() dlg.Destroy() return True
def Envoyer_mail(self, commentaires="", joindre_journal=False): """ Envoi d'un mail avec pièce jointe """ from Utils import UTILS_Envoi_email # Expéditeur dictExp = self.GetAdresseExpDefaut() if dictExp == None : dlg = wx.MessageDialog(self, _(u"Vous devez d'abord saisir une adresse d'expéditeur depuis le menu Paramétrage > Adresses d'expédition d'Emails. Sinon, postez votre rapport de bug dans le forum de Noethys."), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return False moteur = dictExp["moteur"] adresseExpediteur = dictExp["adresse"] serveur = dictExp["smtp"] port = dictExp["port"] auth = dictExp["auth"] startTLS = dictExp["startTLS"] motdepasse = dictExp["motdepasse"] utilisateur = dictExp["utilisateur"] parametres = dictExp["parametres"] if adresseExpediteur == None : dlg = wx.MessageDialog(self, _(u"L'adresse d'expédition ne semble pas valide. Veuillez la vérifier."), _(u"Envoi impossible"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return False # Attacher le journal d'erreurs fichiers = [] if joindre_journal == True : customize = UTILS_Customize.Customize() nom_journal = UTILS_Fichiers.GetRepUtilisateur(customize.GetValeur("journal", "nom", "journal.log")) fichiers.append(nom_journal) # Préparation du message IDrapport = datetime.datetime.now().strftime("%Y%m%d%H%M%S") texteRapport = self.ctrl_rapport.GetValue().replace("\n","<br/>") if len(commentaires) == 0 : commentaires = _(u"Aucun") texte_html = _(u"<u>Rapport de bug %s :</u><br/><br/>%s<br/><u>Commentaires :</u><br/><br/>%s") % (IDrapport, texteRapport, commentaires) sujet = _(u"Rapport de bug Noethys n°%s") % IDrapport message = UTILS_Envoi_email.Message(destinataires=["noe" + "thys" + "@" + "gm" + "ail" + ".com",], sujet=sujet, texte_html=texte_html, fichiers=fichiers) # Envoi du mail try : messagerie = UTILS_Envoi_email.Messagerie(backend=moteur, hote=serveur, port=port, utilisateur=utilisateur, motdepasse=motdepasse, email_exp=adresseExpediteur, use_tls=startTLS, parametres=parametres) messagerie.Connecter() messagerie.Envoyer(message) messagerie.Fermer() except Exception as err : dlg = wx.MessageDialog(self, _(u"Le message n'a pas pu être envoyé. Merci de poster votre rapport de bug sur le forum de Noethys.\n\nErreur : %s !") % err, _(u"Envoi impossible"), wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() return False # Message de confirmation dlg = wx.MessageDialog(self, _(u"Le rapport d'erreur a été envoyé avec succès."), _(u"Rapport envoyé"), wx.OK | wx.ICON_INFORMATION) dlg.ShowModal() dlg.Destroy() return True
def Sauvegarde(listeFichiersLocaux=[], listeFichiersReseau=[], nom="", repertoire=None, motdepasse=None, listeEmails=None, dictConnexion=None): """ Processus de de création du ZIP """ # Si aucun fichier à sauvegarder if len(listeFichiersLocaux) == 0 and len(listeFichiersReseau) == 0 : return False # Initialisation de la barre de progression nbreEtapes = 3 nbreEtapes += len(listeFichiersLocaux) nbreEtapes += len(listeFichiersReseau) if motdepasse != None : nbreEtapes += 1 if repertoire != None : nbreEtapes += 1 if listeEmails != None : nbreEtapes += 1 # Création du nom du fichier de destination if motdepasse != None : extension = EXTENSIONS["crypte"] else: extension = EXTENSIONS["decrypte"] # Vérifie si fichier de destination existe déjà if repertoire != None : fichierDest = u"%s/%s.%s" % (repertoire, nom, extension) if os.path.isfile(fichierDest) == True : dlg = wx.MessageDialog(None, _(u"Un fichier de sauvegarde portant ce nom existe déjà. \n\nVoulez-vous le remplacer ?"), "Attention !", wx.YES_NO | wx.NO_DEFAULT | wx.ICON_EXCLAMATION) reponse = dlg.ShowModal() dlg.Destroy() if reponse != wx.ID_YES : return False # Récupération des paramètres de l'adresse d'expéditeur par défaut if listeEmails != None : dictAdresse = UTILS_Envoi_email.GetAdresseExpDefaut() if dictAdresse == None : dlgErreur = wx.MessageDialog(None, _(u"Envoi par Email impossible :\n\nAucune adresse d'expéditeur n'a été définie. Veuillez la saisir dans le menu Paramétrage du logiciel..."), _(u"Erreur"), wx.OK | wx.ICON_ERROR) dlgErreur.ShowModal() dlgErreur.Destroy() return False # Fenêtre de progression dlgprogress = wx.ProgressDialog(_(u"Sauvegarde"), _(u"Lancement de la sauvegarde..."), maximum=nbreEtapes, parent=None, style= wx.PD_SMOOTH | wx.PD_AUTO_HIDE | wx.PD_APP_MODAL) # Création du fichier ZIP temporaire nomFichierTemp = u"%s.%s" % (nom, EXTENSIONS["decrypte"]) fichierZip = zipfile.ZipFile(UTILS_Fichiers.GetRepTemp(fichier=nomFichierTemp), "w", compression=zipfile.ZIP_DEFLATED) numEtape = 1 dlgprogress.Update(numEtape, _(u"Création du fichier de compression..."));numEtape += 1 # Intégration des fichiers locaux for nomFichier in listeFichiersLocaux : dlgprogress.Update(numEtape, _(u"Compression du fichier %s...") % nomFichier);numEtape += 1 fichier = UTILS_Fichiers.GetRepData(nomFichier) if os.path.isfile(fichier) == True : fichierZip.write(fichier, nomFichier) else : dlgprogress.Destroy() dlgErreur = wx.MessageDialog(None, _(u"Le fichier '%s' n'existe plus sur cet ordinateur. \n\nVeuillez ôter ce fichier de la procédure de sauvegarde automatique (Menu Fichier > Sauvegardes automatiques)") % nomFichier, _(u"Erreur"), wx.OK | wx.ICON_ERROR) dlgErreur.ShowModal() dlgErreur.Destroy() return False # Intégration des fichiers réseau if len(listeFichiersReseau) > 0 and dictConnexion != None : # Création du répertoire temporaire repTemp = UTILS_Fichiers.GetRepTemp(fichier="savetemp") if os.path.isdir(repTemp) == True : shutil.rmtree(repTemp) os.mkdir(repTemp) # Recherche du répertoire d'installation de MySQL repMySQL = GetRepertoireMySQL(dictConnexion) if repMySQL == None : dlgprogress.Destroy() dlgErreur = wx.MessageDialog(None, _(u"Noethys n'a pas réussi à localiser MySQL sur votre ordinateur.\n\nNotez bien que MySQL doit être installé obligatoirement pour créer une sauvegarde réseau."), _(u"Erreur"), wx.OK | wx.ICON_ERROR) dlgErreur.ShowModal() dlgErreur.Destroy() return False # Création du fichier de login nomFichierLoginTemp = repTemp + "/logintemp.cnf" #os.path.abspath(os.curdir) + "/" + repTemp + "/logintemp.cnf" CreationFichierLoginTemp(host=dictConnexion["host"], port=dictConnexion["port"], user=dictConnexion["user"], password=dictConnexion["password"], nomFichier=nomFichierLoginTemp) # Création du backup pour chaque fichier MySQL for nomFichier in listeFichiersReseau : dlgprogress.Update(numEtape, _(u"Compression du fichier %s...") % nomFichier);numEtape += 1 fichierSave = u"%s/%s.sql" % (repTemp, nomFichier) args = u""""%sbin/mysqldump" --defaults-extra-file="%s" --single-transaction --opt --databases %s > "%s" """ % (repMySQL, nomFichierLoginTemp, nomFichier, fichierSave) print(("Chemin mysqldump =", args)) if six.PY2: args = args.encode('utf8') proc = subprocess.Popen(args, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.PIPE) out, temp = proc.communicate() if out not in ("", b""): print((out,)) try : if six.PY2: out = str(out).decode("iso-8859-15") except : pass dlgprogress.Destroy() dlgErreur = wx.MessageDialog(None, _(u"Une erreur a été détectée dans la procédure de sauvegarde !\n\nErreur : %s") % out, _(u"Erreur"), wx.OK | wx.ICON_ERROR) dlgErreur.ShowModal() dlgErreur.Destroy() return False # Insère le fichier Sql dans le ZIP try : fichierZip.write(fichierSave.encode('utf8'), u"%s.sql" % nomFichier) except Exception as err : dlgprogress.Destroy() print(("insertion sql dans zip : ", err,)) try : if six.PY2: err = str(err).decode("iso-8859-15") except : pass dlgErreur = wx.MessageDialog(None, _(u"Une erreur est survenue dans la sauvegarde !\n\nErreur : %s") % err, _(u"Erreur"), wx.OK | wx.ICON_ERROR) dlgErreur.ShowModal() dlgErreur.Destroy() return False # Supprime le répertoire temp shutil.rmtree(repTemp) # Finalise le fichier ZIP fichierZip.close() # Cryptage du fichier if motdepasse != None : dlgprogress.Update(numEtape, _(u"Cryptage du fichier..."));numEtape += 1 fichierCrypte = u"%s.%s" % (nom, EXTENSIONS["crypte"]) motdepasse = base64.b64decode(motdepasse) if six.PY3: motdepasse = motdepasse.decode('utf8') ancienne_methode = UTILS_Customize.GetValeur("version_cryptage", "sauvegarde", "1", ajouter_si_manquant=False) in ("1", None) UTILS_Cryptage_fichier.CrypterFichier(UTILS_Fichiers.GetRepTemp(fichier=nomFichierTemp), UTILS_Fichiers.GetRepTemp(fichier=fichierCrypte), motdepasse, ancienne_methode=ancienne_methode) nomFichierTemp = fichierCrypte extension = EXTENSIONS["crypte"] else: extension = EXTENSIONS["decrypte"] # Copie le fichier obtenu dans le répertoire donné if repertoire != None : dlgprogress.Update(numEtape, _(u"Création du fichier dans le répertoire cible..."));numEtape += 1 try : shutil.copy2(UTILS_Fichiers.GetRepTemp(fichier=nomFichierTemp), fichierDest) except : print("Le repertoire de destination de sauvegarde n'existe pas.") # Préparation du message message = UTILS_Envoi_email.Message(destinataires=listeEmails, sujet=_(u"Sauvegarde Noethys : %s") % nom, texte_html=_(u"Envoi de la sauvegarde de Noethys"), fichiers=[UTILS_Fichiers.GetRepTemp(fichier=nomFichierTemp),]) # Envoi par Email if listeEmails != None : dlgprogress.Update(numEtape, _(u"Expédition de la sauvegarde par Email..."));numEtape += 1 try : messagerie = UTILS_Envoi_email.Messagerie(backend=dictAdresse["moteur"], hote=dictAdresse["smtp"], port=dictAdresse["port"], utilisateur=dictAdresse["utilisateur"], motdepasse=dictAdresse["motdepasse"], email_exp=dictAdresse["adresse"], use_tls=dictAdresse["startTLS"], timeout=60*3, parametres=dictAdresse["parametres"]) messagerie.Connecter() messagerie.Envoyer(message) messagerie.Fermer() except Exception as err: dlgprogress.Destroy() print((err,)) if six.PY2: err = str(err).decode("iso-8859-15") dlgErreur = wx.MessageDialog(None, _(u"Une erreur a été détectée dans l'envoi par Email !\n\nErreur : %s") % err, _(u"Erreur"), wx.OK | wx.ICON_ERROR) dlgErreur.ShowModal() dlgErreur.Destroy() return False # Suppression des répertoires et fichiers temporaires dlgprogress.Update(numEtape, _(u"Suppression des fichiers temporaires..."));numEtape += 1 fichier = UTILS_Fichiers.GetRepTemp(fichier=u"%s.%s" % (nom, EXTENSIONS["decrypte"])) if os.path.isfile(fichier) == True : os.remove(fichier) fichier = UTILS_Fichiers.GetRepTemp(fichier=u"%s.%s" % (nom, EXTENSIONS["crypte"])) if os.path.isfile(fichier) == True : os.remove(fichier) # Fin du processus dlgprogress.Update(numEtape, _(u"Sauvegarde terminée avec succès !")) dlgprogress.Destroy() return True