29/07/2024 - 21h

master
cherif 2024-07-29 21:04:27 +02:00
parent 8dfbd7e8a0
commit a5b48624ad
3 changed files with 1463 additions and 15 deletions

View File

@ -1,12 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="c6d0259a-16e1-410d-91a1-830590ee2a08" name="Changes" comment="26/07/2024 - 12h"> <list default="true" id="c6d0259a-16e1-410d-91a1-830590ee2a08" name="Changes" comment="29/07/2024 - 12h">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/GlobalVariable.py" beforeDir="false" afterPath="$PROJECT_DIR$/GlobalVariable.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Log/log_file.log" beforeDir="false" afterPath="$PROJECT_DIR$/Log/log_file.log" afterDir="false" /> <change beforePath="$PROJECT_DIR$/Log/log_file.log" beforeDir="false" afterPath="$PROJECT_DIR$/Log/log_file.log" afterDir="false" />
<change beforePath="$PROJECT_DIR$/email_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/email_mgt.py" afterDir="false" /> <change beforePath="$PROJECT_DIR$/email_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/email_mgt.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/main.py" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -76,13 +74,6 @@
<option name="presentableId" value="Default" /> <option name="presentableId" value="Default" />
<updated>1680804787304</updated> <updated>1680804787304</updated>
</task> </task>
<task id="LOCAL-00311" summary="sdsqq">
<created>1716483578232</created>
<option name="number" value="00311" />
<option name="presentableId" value="LOCAL-00311" />
<option name="project" value="LOCAL" />
<updated>1716483578233</updated>
</task>
<task id="LOCAL-00312" summary="ss"> <task id="LOCAL-00312" summary="ss">
<created>1716568731554</created> <created>1716568731554</created>
<option name="number" value="00312" /> <option name="number" value="00312" />
@ -419,7 +410,14 @@
<option name="project" value="LOCAL" /> <option name="project" value="LOCAL" />
<updated>1721997046282</updated> <updated>1721997046282</updated>
</task> </task>
<option name="localTasksCounter" value="360" /> <task id="LOCAL-00360" summary="29/07/2024 - 12h">
<created>1722251969652</created>
<option name="number" value="00360" />
<option name="presentableId" value="LOCAL-00360" />
<option name="project" value="LOCAL" />
<updated>1722251969653</updated>
</task>
<option name="localTasksCounter" value="361" />
<servers /> <servers />
</component> </component>
<component name="Vcs.Log.Tabs.Properties"> <component name="Vcs.Log.Tabs.Properties">
@ -461,7 +459,6 @@
</option> </option>
</component> </component>
<component name="VcsManagerConfiguration"> <component name="VcsManagerConfiguration">
<MESSAGE value="12/06/2024 - 21h30" />
<MESSAGE value="15/06/2024 - 21h30" /> <MESSAGE value="15/06/2024 - 21h30" />
<MESSAGE value="17/06/2024 - 21h30" /> <MESSAGE value="17/06/2024 - 21h30" />
<MESSAGE value="18/06/2024 - 21h30" /> <MESSAGE value="18/06/2024 - 21h30" />
@ -486,6 +483,7 @@
<MESSAGE value="21/07/2024 - 12h" /> <MESSAGE value="21/07/2024 - 12h" />
<MESSAGE value="23/07/2024 - 12h" /> <MESSAGE value="23/07/2024 - 12h" />
<MESSAGE value="26/07/2024 - 12h" /> <MESSAGE value="26/07/2024 - 12h" />
<option name="LAST_COMMIT_MESSAGE" value="26/07/2024 - 12h" /> <MESSAGE value="29/07/2024 - 12h" />
<option name="LAST_COMMIT_MESSAGE" value="29/07/2024 - 12h" />
</component> </component>
</project> </project>

File diff suppressed because it is too large Load Diff

View File

@ -3102,6 +3102,11 @@ def Prepare_and_Send_Email_From_Front(tab_files, Folder, diction):
str(inspect.stack()[0][3]) + " L'adresse email en CC '" + str(email_cc) + "' est invalide ") str(inspect.stack()[0][3]) + " L'adresse email en CC '" + str(email_cc) + "' est invalide ")
return False, "L'adresse email en CC '" + str(email_cc) + "' est invalide" return False, "L'adresse email en CC '" + str(email_cc) + "' est invalide"
if (len(tab_email_cc) > 10):
mycommon.myprint("Vous ne pouvez pas envoyer plus de 10 emails en copie.")
return False, "Vous ne pouvez pas envoyer plus de 10 emails en copie."
""" """
Verifier que le format list_email_bcc est valide Verifier que le format list_email_bcc est valide
""" """
@ -3120,6 +3125,9 @@ def Prepare_and_Send_Email_From_Front(tab_files, Folder, diction):
str(inspect.stack()[0][3]) + " L'adresse email en BCC '" + str(email_bcc) + "' est invalide ") str(inspect.stack()[0][3]) + " L'adresse email en BCC '" + str(email_bcc) + "' est invalide ")
return False, "L'adresse email en BCC '" + str(email_bcc) + "' est invalide" return False, "L'adresse email en BCC '" + str(email_bcc) + "' est invalide"
if (len(tab_email_bcc) > 10):
mycommon.myprint("Vous ne pouvez pas envoyer plus de 10 emails en copie-cachée.")
return False, "Vous ne pouvez pas envoyer plus de 10 emails en copie-cachée."
""" """
Verifier la validité des emails de destinataire Verifier la validité des emails de destinataire
@ -3149,8 +3157,8 @@ def Prepare_and_Send_Email_From_Front(tab_files, Folder, diction):
if( is_valide_email_in_related_collection < 1 ): if( is_valide_email_in_related_collection < 1 ):
mycommon.myprint( mycommon.myprint(
str(inspect.stack()[0][ str(inspect.stack()[0][
3]) + " L'adresse email '" + str(email_dest) + "' est invalide (2) ") 3]) + " L'adresse email '" + str(email_dest) + "' existe pas dans le système ")
return False, " L'adresse email '" + str(email_dest) + "' est invalide (2) " return False, " L'adresse email '" + str(email_dest) + "'existe pas dans le système "
is_valide_email_in_related_collection_data = MYSY_GV.dbname[str(related_collection)].find_one( is_valide_email_in_related_collection_data = MYSY_GV.dbname[str(related_collection)].find_one(
{"email": str(email_dest), {"email": str(email_dest),
@ -3163,7 +3171,17 @@ def Prepare_and_Send_Email_From_Front(tab_files, Folder, diction):
#print(" ### la liste _id des destinataire est ", str(tab_related_collection_id)) #print(" ### la liste _id des destinataire est ", str(tab_related_collection_id))
if(len(tab_related_collection_id) > 20 ):
mycommon.myprint("Vous ne pouvez pas envoyer plus de 20 emails à la fois.")
return False, "Vous ne pouvez pas envoyer plus de 20 emails à la fois."
# Sauvegarde des fichiers joints depuis le front # Sauvegarde des fichiers joints depuis le front
if (len(tab_files) > 5 ):
mycommon.myprint("Vous ne pouvez pas envoyer plus de 5 pièces jointes.")
return False, "Vous ne pouvez pas envoyer plus de 5 pièces jointes. "
tab_saved_file_full_path = [] tab_saved_file_full_path = []
for file in tab_files: for file in tab_files:
status, saved_file_full_path = mycommon.Upload_Save_PDF_IMG_File(file, Folder) status, saved_file_full_path = mycommon.Upload_Save_PDF_IMG_File(file, Folder)
@ -3173,6 +3191,22 @@ def Prepare_and_Send_Email_From_Front(tab_files, Folder, diction):
tab_saved_file_full_path.append(saved_file_full_path) tab_saved_file_full_path.append(saved_file_full_path)
# Traitement de l'eventuel fichier joint
tab_files_to_attache_to_mail = []
for saved_file in tab_saved_file_full_path:
file_to_attache_to_mail = MIMEBase('application', "octet-stream")
file_to_attache_to_mail.set_payload(open(saved_file, "rb").read())
encoders.encode_base64(file_to_attache_to_mail)
file_to_attache_to_mail.add_header('Content-Disposition',
'attachment; filename="{0}"'.format(os.path.basename(saved_file)))
new_node = {"attached_file": file_to_attache_to_mail}
tab_files_to_attache_to_mail.append(new_node)
# Recuperation des donnes SMTP # Recuperation des donnes SMTP
local_stpm_status, partner_SMTP_COUNT_smtpsrv, partner_own_smtp_value, partner_SMTP_COUNT_password, partner_SMTP_COUNT_user, partner_SMTP_COUNT_From_User, partner_SMTP_COUNT_port = mycommon.Get_Partner_SMTP_Param( local_stpm_status, partner_SMTP_COUNT_smtpsrv, partner_own_smtp_value, partner_SMTP_COUNT_password, partner_SMTP_COUNT_user, partner_SMTP_COUNT_From_User, partner_SMTP_COUNT_port = mycommon.Get_Partner_SMTP_Param(
my_partner['recid']) my_partner['recid'])
@ -3196,6 +3230,8 @@ def Prepare_and_Send_Email_From_Front(tab_files, Folder, diction):
Envoie proprement-dit des emails Envoie proprement-dit des emails
""" """
for user_id in tab_related_collection_id: for user_id in tab_related_collection_id:
user_related_collection_data = MYSY_GV.dbname[str(related_collection)].find_one( user_related_collection_data = MYSY_GV.dbname[str(related_collection)].find_one(
{"_id": ObjectId(str(user_id)), {"_id": ObjectId(str(user_id)),
'valide': '1', 'valide': '1',
@ -3230,6 +3266,36 @@ def Prepare_and_Send_Email_From_Front(tab_files, Folder, diction):
html_mime = MIMEText(sourceHtml, 'html') html_mime = MIMEText(sourceHtml, 'html')
tab_email_bcc.append(str(my_partner['email']))
local_diction = {}
local_diction['token'] = diction['token']
local_diction['partner_own_smtp_value'] = partner_own_smtp_value
local_diction['partner_SMTP_COUNT_smtpsrv'] = partner_SMTP_COUNT_smtpsrv
local_diction['partner_SMTP_COUNT_port'] = partner_SMTP_COUNT_port
local_diction['user_id'] = user_id
local_diction['related_collection'] = related_collection
local_diction['partner_SMTP_COUNT_From_User'] = partner_SMTP_COUNT_From_User
local_diction['tab_email_cc'] = tab_email_cc
local_diction['tab_email_bcc'] = tab_email_bcc
local_diction['tab_files_to_attache_to_mail'] = tab_files_to_attache_to_mail
local_diction['email_sujet'] = email_sujet
local_diction['html_mime'] = html_mime
local_diction['email'] = email
local_status, local_retval = send_invidual_email (local_diction)
if( local_status is False ):
return local_status, local_retval
cpt_email_envoye = cpt_email_envoye + 1
'''
if (str(partner_own_smtp_value) == "1"): if (str(partner_own_smtp_value) == "1"):
msg.attach(html_mime) msg.attach(html_mime)
msg['From'] = partner_SMTP_COUNT_From_User msg['From'] = partner_SMTP_COUNT_From_User
@ -3237,6 +3303,11 @@ def Prepare_and_Send_Email_From_Front(tab_files, Folder, diction):
msg['Bcc'] = ", ".join(tab_email_bcc) msg['Bcc'] = ", ".join(tab_email_bcc)
msg['Subject'] = email_sujet msg['Subject'] = email_sujet
msg['to'] = str(email) msg['to'] = str(email)
# Attacher l'eventuelle pièces jointes
for myfile in tab_files_to_attache_to_mail:
msg.attach(myfile['attached_file'])
val = smtpserver.send_message(msg) val = smtpserver.send_message(msg)
print(" Email a envoyé " + str(email)) print(" Email a envoyé " + str(email))
cpt_email_envoye = cpt_email_envoye + 1 cpt_email_envoye = cpt_email_envoye + 1
@ -3248,6 +3319,11 @@ def Prepare_and_Send_Email_From_Front(tab_files, Folder, diction):
msg['Bcc'] = ", ".join(tab_email_bcc) msg['Bcc'] = ", ".join(tab_email_bcc)
msg['Subject'] = email_sujet msg['Subject'] = email_sujet
msg['to'] = str(email) msg['to'] = str(email)
# Attacher l'eventuelle pièces jointes
for myfile in tab_files_to_attache_to_mail:
msg.attach(myfile['attached_file'])
val = smtpserver.send_message(msg) val = smtpserver.send_message(msg)
print(" Email a envoyé " + str(email)) print(" Email a envoyé " + str(email))
cpt_email_envoye = cpt_email_envoye + 1 cpt_email_envoye = cpt_email_envoye + 1
@ -3255,7 +3331,126 @@ def Prepare_and_Send_Email_From_Front(tab_files, Folder, diction):
smtpserver.close() smtpserver.close()
'''
print(" NB_email envoyé = ", cpt_email_envoye) print(" NB_email envoyé = ", cpt_email_envoye)
return True, " Les emails ont été correctement envoyés"
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
return False, " Impossible d'envoyer les emails "
"""
Envoi d'un email email individuel
"""
def send_invidual_email(diction):
try:
diction = mycommon.strip_dictionary(diction)
"""
field_list = ['token', 'list_email_dest', 'list_email_cc', 'list_email_bcc', 'email_corps', 'related_collection',
'email_sujet']
incom_keys = diction.keys()
for val in incom_keys:
if val not in field_list and val.startswith('my_') is False:
mycommon.myprint(str(inspect.stack()[0][
3]) + " - Le champ '" + val + "' n'est pas autorisé")
return False, "Impossible de créer le stagiaire. Toutes les informations fournies ne sont pas valables"
field_list_obligatoire = ['token', 'list_email_dest', 'related_collection',
'email_sujet', 'email_corps']
for val in field_list_obligatoire:
if val not in diction:
mycommon.myprint(
str(inspect.stack()[0][
3]) + " La valeur '" + val + "' n'est pas presente dans liste ")
return False, " La valeur '" + val + "' n'est pas presente dans liste"
"""
my_token = ""
if ("token" in diction.keys()):
if diction['token']:
my_token = diction['token']
local_status, my_partner = mycommon.Check_Connexion_And_Return_Partner_Data(diction)
if (local_status is not True):
return local_status, my_partner
smtpserver = None
partner_own_smtp_value = diction['partner_own_smtp_value']
partner_SMTP_COUNT_smtpsrv = diction['partner_SMTP_COUNT_smtpsrv']
partner_SMTP_COUNT_port = diction['partner_SMTP_COUNT_port']
user_id = diction['user_id']
related_collection = diction['related_collection']
partner_SMTP_COUNT_From_User = diction['partner_SMTP_COUNT_From_User']
tab_email_cc = diction['tab_email_cc']
tab_email_bcc = diction['tab_email_bcc']
tab_files_to_attache_to_mail = diction['tab_files_to_attache_to_mail']
email_sujet = diction['email_sujet']
html_mime = diction['html_mime']
email = diction['email']
if (str(partner_own_smtp_value) == "1"):
smtpserver = smtplib.SMTP(partner_SMTP_COUNT_smtpsrv, partner_SMTP_COUNT_port)
else:
smtpserver = smtplib.SMTP(MYSY_GV.O365_SMTP_COUNT_smtpsrv, MYSY_GV.O365_SMTP_COUNT_port)
smtpserver.ehlo()
smtpserver.starttls()
smtpserver.login(MYSY_GV.O365_SMTP_COUNT_user, MYSY_GV.O365_SMTP_COUNT_password)
cpt_email_envoye = 0
"""
Envoie proprement-dit des emails
"""
# Creation de l'email à enoyer
msg = MIMEMultipart("alternative")
tab_email_bcc.append(str(my_partner['email']))
if (str(partner_own_smtp_value) == "1"):
msg.attach(html_mime)
msg['From'] = partner_SMTP_COUNT_From_User
msg['Cc'] = ", ".join(tab_email_cc)
msg['Bcc'] = ", ".join(tab_email_bcc)
msg['Subject'] = email_sujet
msg['to'] = str(email)
# Attacher l'eventuelle pièces jointes
for myfile in tab_files_to_attache_to_mail:
msg.attach(myfile['attached_file'])
val = smtpserver.send_message(msg)
print(" Email a envoyé " + str(email))
cpt_email_envoye = cpt_email_envoye + 1
else:
msg.attach(html_mime)
msg['From'] = MYSY_GV.O365_SMTP_COUNT_From_User
msg['Cc'] = ", ".join(tab_email_cc)
msg['Bcc'] = ", ".join(tab_email_bcc)
msg['Subject'] = email_sujet
msg['to'] = str(email)
# Attacher l'eventuelle pièces jointes
for myfile in tab_files_to_attache_to_mail:
msg.attach(myfile['attached_file'])
val = smtpserver.send_message(msg)
print(" Email a envoyé " + str(email))
cpt_email_envoye = cpt_email_envoye + 1
smtpserver.close()
return True, " Les emails ont été correctement envoyés" return True, " Les emails ont été correctement envoyés"