Esempio n. 1
0
    def VerifieFusion(self, texteHTML="", listeDestinataires=[]):
        """ Vérifie que tous les mots-clés ont été remplacés """
        listeResultats = []
        for track in listeDestinataires:
            dictChamps = track.champs

            # Remplacement 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():
                try:
                    if valeur == None: valeur = u""
                    if type(valeur) == int: valeur = str(valeur)
                    texte = texte.replace(motcle, valeur)
                except:
                    pass

            # Vérifie si champs non remplacés
            x = r"\{[A-Za-z0-9_]*?\}"
            regex = re.compile(x)
            listeAnomalies = regex.findall(texte)
            if len(listeAnomalies) > 0:
                listeResultats.append((track.adresse, listeAnomalies))

        # Affichage des résultats
        if len(listeResultats) > 0:
            message = _(
                u"Certains mots-clés semblent ne pas avoir été remplacés lors de la fusion des données. Est-ce normal ?\n\n"
            )
            affichageMax = 10
            for adresse, listeAnomalies in listeResultats[:affichageMax]:
                message += u"   - %s : %s.\n" % (adresse,
                                                 ", ".join(listeAnomalies))
            if len(listeResultats) > affichageMax:
                message += _(u"   - Ainsi que %d autres...\n") % (
                    len(listeResultats) - affichageMax)
            message += _(u"\nSouhaitez-vous tout de même continuer l'envoi ?")
            dlgErreur = wx.MessageDialog(
                self, message, _(u"Anomalies"),
                wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_EXCLAMATION)
            if dlgErreur.ShowModal() == wx.ID_YES:
                return True
            else:
                return False
        else:
            return True
Esempio n. 2
0
 def MAJ_apercu(self):
     index = self.ctrl_adresse.GetSelection()
     if index == -1 :
         return
     xml = self.texte_xml
     if xml == None :
         return
     # Remplacement des champs standards
     for motcle, valeur in CTRL_Editeur_email.GetChampsStandards().iteritems() :
         xml = xml.replace(motcle, valeur)
     # Remplacement des champs spécifiques
     dictDonnee = self.donnees[index]
     for motcle, valeur in dictDonnee["champs"].iteritems() :
         if valeur == None or valeur == "//None" :
             valeur = ""
         xml = xml.replace(motcle, valeur)
     # MAJ éditeur
     self.ctrl_editeur.SetXML(xml)
 def MAJ_apercu(self):
     index = self.ctrl_adresse.GetSelection()
     if index == -1:
         return
     xml = self.texte_xml
     if xml == None:
         return
     # Remplacement des champs standards
     for motcle, valeur in CTRL_Editeur_email.GetChampsStandards().items():
         xml = xml.replace(motcle.encode("iso-8859-15"),
                           valeur.encode("iso-8859-15"))
     # Remplacement des champs spécifiques
     dictDonnee = self.donnees[index]
     for motcle, valeur in dictDonnee["champs"].items():
         if valeur == None or valeur == "//None":
             valeur = ""
         if type(valeur) == int:
             valeur = str(valeur)
         if type(valeur) == datetime.date:
             valeur = UTILS_Dates.DateDDEnFr(valeur)
         xml = xml.replace(motcle, valeur)
     # MAJ éditeur
     self.ctrl_editeur.SetXML(xml)
Esempio n. 4
0
    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)
Esempio n. 5
0
    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
        exp = dictExp["adresse"]
        nomexp = dictExp["nom_adresse"]
        serveur = dictExp["smtp"]
        port = dictExp["port"]
        connexionAuthentifiee = dictExp["auth"]
        connexionStartTLS = dictExp["startTLS"]
        motdepasse = dictExp["motdepasse"]
        utilisateur = dictExp["utilisateur"]
        
        # 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()

        # Envoi des mails
        dlg = wx.ProgressDialog(_(u"Envoi des mails"), _(u"Veuillez patienter..."), maximum = len(listeDestinataires)+1, parent=self)
        dlg.SetSize((370, 140))
        dlg.CenterOnScreen() 
        
        index = 1
        self.listeAnomalies = []
        self.listeSucces = []
        for track in listeDestinataires :
            adresse = track.adresse
            if adresseTest != None :
                adresse = adresseTest
##            adresse = FonctionsPerso.Supprime_accent2(adresse)
            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().iteritems() :
                texte = texte.replace(motcle, valeur)
            for motcle, valeur in dictChamps.iteritems() :
                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)
            
            # Envoi du mail
            try :
                labelAdresse = adresse.decode("iso-8859-15")
            except :
                labelAdresse = adresse
            label = _(u"Envoi %d/%d : %s...") % (index, len(listeDestinataires), labelAdresse)
            self.EcritStatusBar(label)
            dlg.Update(index, label)
            
            try :
                etat = UTILS_Envoi_email.Envoi_mail( 
                    adresseExpediteur=exp, 
                    nomadresseExpediteur=nomexp, 
                    listeDestinataires=[adresse,], 
                    listeDestinatairesCCI=[], 
                    sujetMail=sujet, 
                    texteMail=texte, 
                    listeFichiersJoints=listePieces, 
                    serveur=serveur, 
                    port=port, 
                    avecAuthentification=connexionAuthentifiee,
                    avecStartTLS=connexionStartTLS,
                    listeImages=listeImages,
                    motdepasse=motdepasse,
                    accuseReception=accuseReception,
                    utilisateur=utilisateur,
                    )
                self.listeSucces.append(track)
                
                # Mémorisation dans l'historique
                self.MemorisationHistorique(adresse, sujet)

            except Exception, err:
                err = str(err).decode("iso-8859-15")
                self.listeAnomalies.append((track, err))
                print ("Erreur dans l'envoi d'un mail : %s...", err)
                traceback.print_exc(file=sys.stdout)

                if index == len(listeDestinataires) :
                    dlgErreur = wx.MessageDialog(self, _(u"%s\n\nL'erreur suivante a été détectée :\n%s.") % (label, err), _(u"Erreur"), wx.OK | wx.ICON_ERROR)
                    dlgErreur.ShowModal()
                    dlgErreur.Destroy()
                else :
                    dlgErreur = wx.MessageDialog(self, _(u"%s\n\nL'erreur suivante a été détectée :\n%s.\n\nSouhaitez-vous quand même continuer le processus ?") % (label, err), _(u"Erreur"), wx.YES_NO|wx.YES_DEFAULT|wx.CANCEL|wx.ICON_ERROR)
                    if dlgErreur.ShowModal() != wx.ID_YES :
                        dlgErreur.Destroy()
                        # Arrêt du processus
                        dlg.Destroy()
                        handler.DeleteTemporaryImages()
                        self.EcritStatusBar(u"")
                        return
                    dlgErreur.Destroy()

            if len(listeDestinataires) > 1 :
                time.sleep(2) # Attente entre chaque envoi...
            index += 1