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() # Envoi de l'email try : etat = UTILS_Envoi_email.Envoi_mail( adresseExpediteur=dictAdresse["adresse"], listeDestinataires=[self.dictDonnees["orange_adresse_destination_email"],], sujetMail=self.dictDonnees["objet"], texteMail=_(u"Envoi de SMS"), listeFichiersJoints=[cheminFichier,], serveur=dictAdresse["smtp"], port=dictAdresse["port"], avecAuthentification=dictAdresse["auth"], avecStartTLS=dictAdresse["startTLS"], motdepasse=dictAdresse["motdepasse"], utilisateur=dictAdresse["utilisateur"], ) except Exception, err: print (err,) err = str(err).decode("iso-8859-15") dlgErreur = wx.MessageDialog(None, _(u"Une erreur a été détectée dans l'envoi de l'Email !\n\nErreur : %s") % err, _(u"Erreur"), wx.OK | wx.ICON_ERROR) dlgErreur.ShowModal() dlgErreur.Destroy() return False
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
class Dialog(wx.Dialog, Base): def __init__(self, parent): wx.Dialog.__init__(self, parent, -1, name="DLG_Envoi_sms", style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.MAXIMIZE_BOX|wx.MINIMIZE_BOX) Base.__init__(self) self.parent = parent titre = _(u"Envoi de SMS") intro = _(u"Vous pouvez envoyer ici des SMS aux individus ou familles à condition que votre plateforme d'envoi ait été intégrée à cette fonctionnalité. Consultez la liste des prestataires pris en charge dans la liste déroulante Plateforme de la page des paramètres.") self.SetTitle(titre) self.ctrl_bandeau = CTRL_Bandeau.Bandeau(self, titre=titre, texte=intro, hauteurHtml=30, nomImage="Images/32x32/Sms.png") # Initialisation des pages self.InitPages(self) self.static_line = wx.StaticLine(self, -1) self.bouton_aide = CTRL_Bouton_image.CTRL(self, texte=_(u"Aide"), cheminImage="Images/32x32/Aide.png") self.bouton_retour = CTRL_Bouton_image.CTRL(self, texte=_(u"Retour"), cheminImage="Images/32x32/Fleche_gauche.png") self.bouton_suite = CTRL_Bouton_image.CTRL(self, texte=_(u"Suite"), cheminImage="Images/32x32/Fleche_droite.png", margesImage=(0, 0, 4, 0), positionImage=wx.RIGHT) self.bouton_annuler = CTRL_Bouton_image.CTRL(self, texte=_(u"Annuler"), cheminImage="Images/32x32/Annuler.png") self.__set_properties() self.__do_layout() self.Bind(wx.EVT_BUTTON, self.Onbouton_aide, self.bouton_aide) self.Bind(wx.EVT_BUTTON, self.Onbouton_retour, self.bouton_retour) self.Bind(wx.EVT_BUTTON, self.Onbouton_suite, self.bouton_suite) self.Bind(wx.EVT_BUTTON, self.OnBoutonAnnuler, self.bouton_annuler) self.Bind(wx.EVT_CLOSE, self.OnClose) self.bouton_retour.Enable(False) self.nbrePages = len(self.listePages) self.pageVisible = 0 # Création des pages self.Creation_Pages() self.GetPage("parametres").MAJ() def Creation_Pages(self): """ Creation des pages """ self.dictPages = {} index = 0 for dictPage in self.listePages : self.sizer_pages.Add(dictPage["ctrl"], 1, wx.EXPAND, 0) if index > 0 : dictPage["ctrl"].Show(False) index += 1 self.sizer_pages.Layout() def __set_properties(self): self.bouton_aide.SetToolTip(wx.ToolTip(_(u"Cliquez ici pour obtenir de l'aide"))) self.bouton_retour.SetToolTip(wx.ToolTip(_(u"Cliquez ici pour revenir à la page précédente"))) self.bouton_suite.SetToolTip(wx.ToolTip(_(u"Cliquez ici pour passer à l'étape suivante"))) self.bouton_annuler.SetToolTip(wx.ToolTip(_(u"Cliquez pour annuler"))) self.SetMinSize((770, 650)) def __do_layout(self): grid_sizer_base = wx.FlexGridSizer(rows=4, cols=1, vgap=0, hgap=0) # Bandeau grid_sizer_base.Add(self.ctrl_bandeau, 1, wx.EXPAND, 0) # Contenu sizer_base = wx.BoxSizer(wx.VERTICAL) sizer_pages = wx.BoxSizer(wx.VERTICAL) grid_sizer_base.Add(sizer_pages, 1, wx.EXPAND, 0) grid_sizer_base.Add(self.static_line, 0, wx.LEFT|wx.RIGHT|wx.EXPAND, 10) # Boutons grid_sizer_boutons = wx.FlexGridSizer(rows=1, cols=6, vgap=10, hgap=10) grid_sizer_boutons.Add(self.bouton_aide, 0, 0, 0) grid_sizer_boutons.Add((20, 20), 0, wx.EXPAND, 0) grid_sizer_boutons.Add(self.bouton_retour, 0, 0, 0) grid_sizer_boutons.Add(self.bouton_suite, 0, 0, 0) grid_sizer_boutons.Add(self.bouton_annuler, 0, wx.LEFT, 10) grid_sizer_boutons.AddGrowableCol(1) grid_sizer_base.Add(grid_sizer_boutons, 1, wx.ALL|wx.EXPAND, 10) grid_sizer_base.AddGrowableRow(1) grid_sizer_base.AddGrowableCol(0) self.SetSizer(grid_sizer_base) grid_sizer_base.Fit(self) self.Layout() self.CenterOnScreen() self.sizer_pages = sizer_pages def Onbouton_aide(self, event): from Utils import UTILS_Aide UTILS_Aide.Aide("") def AfficherPage(self, numPage=0): # rend invisible la page affichée page = self.listePages[self.pageVisible]["ctrl"] page.Sauvegarde() page.Show(False) # Fait apparaître nouvelle page self.pageVisible = numPage page = self.listePages[self.pageVisible]["ctrl"] page.MAJ() page.Show(True) self.sizer_pages.Layout() def Onbouton_retour(self, event): # Affiche nouvelle page self.AfficherPage(self.pageVisible - 1) # Si on quitte l'avant-dernière page, on active le bouton Suivant if self.pageVisible == self.nbrePages-1: self.bouton_suite.Enable(True) self.bouton_suite.SetImage(Chemins.GetStaticPath("Images/32x32/Valider.png")) self.bouton_suite.SetTexte(_(u"Valider")) else: self.bouton_suite.Enable(True) self.bouton_suite.SetImage(Chemins.GetStaticPath("Images/32x32/Fleche_droite.png")) self.bouton_suite.SetTexte(_(u"Suite")) # Si on revient à la première page, on désactive le bouton Retour if self.pageVisible == 0 : self.bouton_retour.Enable(False) def Onbouton_suite(self, event): # Vérifie que les données de la page en cours sont valides validation = self.ValidationPages() if validation == False : return # Si on est déjà sur la dernière page : on termine if self.pageVisible == self.nbrePages-1 : self.listePages[self.pageVisible]["ctrl"].Sauvegarde() self.Terminer() return # Affiche nouvelle page self.AfficherPage(self.pageVisible + 1) # Si on arrive à la dernière page, on désactive le bouton Suivant if self.pageVisible == self.nbrePages-1 : self.bouton_suite.SetImage(Chemins.GetStaticPath("Images/32x32/Valider.png")) self.bouton_suite.SetTexte(_(u"Envoyer")) # Si on quitte la première page, on active le bouton Retour if self.pageVisible > 0 : self.bouton_retour.Enable(True) def OnClose(self, event): self.OnBoutonAnnuler() def OnBoutonAnnuler(self, event=None): self.Annuler() def Annuler(self): """ Annulation des modifications """ self.EndModal(wx.ID_CANCEL) def ValidationPages(self) : """ Validation des données avant changement de pages """ return self.listePages[self.pageVisible]["ctrl"].Validation() def Terminer(self): # Envoi du message if self.Envoyer() != True : return False # Fermeture self.EndModal(wx.ID_OK) 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() # Envoi de l'email try : etat = UTILS_Envoi_email.Envoi_mail( adresseExpediteur=dictAdresse["adresse"], listeDestinataires=[self.dictDonnees["orange_adresse_destination_email"],], sujetMail=self.dictDonnees["objet"], texteMail=_(u"Envoi de SMS"), listeFichiersJoints=[cheminFichier,], serveur=dictAdresse["smtp"], port=dictAdresse["port"], avecAuthentification=dictAdresse["auth"], avecStartTLS=dictAdresse["startTLS"], motdepasse=dictAdresse["motdepasse"], utilisateur=dictAdresse["utilisateur"], ) except Exception, err: print (err,) err = str(err).decode("iso-8859-15") dlgErreur = wx.MessageDialog(None, _(u"Une erreur a été détectée dans l'envoi de l'Email !\n\nErreur : %s") % err, _(u"Erreur"), wx.OK | wx.ICON_ERROR) dlgErreur.ShowModal() dlgErreur.Destroy() 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() # Envoi de l'email try : etat = UTILS_Envoi_email.Envoi_mail( adresseExpediteur=dictAdresse["adresse"], listeDestinataires=[self.dictDonnees["cleversms_adresse_destination_email"],], sujetMail=self.dictDonnees["objet"], texteMail=_(u"Envoi de SMS"), listeFichiersJoints=[cheminFichier,], serveur=dictAdresse["smtp"], port=dictAdresse["port"], avecAuthentification=dictAdresse["auth"], avecStartTLS=dictAdresse["startTLS"], motdepasse=dictAdresse["motdepasse"], utilisateur=dictAdresse["utilisateur"], ) except Exception, err: print (err,) err = str(err).decode("iso-8859-15") dlgErreur = wx.MessageDialog(None, _(u"Une erreur a été détectée dans l'envoi de l'Email !\n\nErreur : %s") % err, _(u"Erreur"), wx.OK | wx.ICON_ERROR) dlgErreur.ShowModal() dlgErreur.Destroy() return False