Skip to content

Commit cff39d8

Browse files
unknownunknown
unknown
authored and
unknown
committed
'encodage-issue-tofix'
1 parent 41f4560 commit cff39d8

File tree

3 files changed

+101
-64
lines changed

3 files changed

+101
-64
lines changed

emails.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
[
2+
{
3+
"nom_prenom": "Jean Dupont",
4+
"entreprise": "Entreprise A",
5+
"poste": "Manager",
6+
"adresse_mail": "[email protected]"
7+
},
8+
{
9+
"nom_prenom": "Marie Curie",
10+
"entreprise": "Entreprise B",
11+
"poste": "Directrice",
12+
"adresse_mail": "[email protected]"
13+
}
14+
]

script.py

Lines changed: 0 additions & 31 deletions
This file was deleted.

send_candid.py

Lines changed: 87 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,39 @@
1+
12
#Python prend déjà en charge tous les modules présents ici dans sa bibliothèque -- pas besoin de les installer via le cmd.exe ;)
23

34
import smtplib
4-
import os
5+
import sys
56
from email.message import EmailMessage
67
import ssl
78

8-
#Import des modules pour les délais d'envoie
9+
#Import des modules pour personnaliser les délais d'envoie
910
import time
1011
import random
1112

12-
#Configuration de la console pour utiliser UTF-8
13-
import sys
13+
#Import des modules pour créer une pièce jointe MIME
14+
from email.mime.base import MIMEBase
15+
from email.mime.application import MIMEApplication
16+
from email.mime.text import MIMEText #inclure du contenu HTML dans le corps de l'email.
17+
from email.mime.multipart import MIMEMultipart
18+
from email import encoders
19+
20+
#Configuration de la console pour utiliser UTF-8 # -*- coding: utf-8 -*-
21+
import os
1422
if os.name == 'nt':
1523
os.system('chcp 65001')
1624

25+
'''
26+
#Gestion robuste de l'encodage UTF-8 avec le cmd et PowerShell
27+
if platform.system() == 'Windows':
28+
import subprocess
29+
subprocess.call(['powershell', '-Command', '$OutputEncoding = [Console]::OutputEncoding = [Console]::InputEncoding = New-Object System.Text.UTF8Encoding'])
30+
'''
31+
1732
from dotenv import load_dotenv, dotenv_values #import des paires clé-valeur pour charger les variables d'environnement depuis le fichier .env
1833

34+
#Import du module json
35+
import json
36+
1937
# Charger les variables d'environnement depuis un fichier .env
2038
load_dotenv()
2139

@@ -28,38 +46,74 @@
2846
if app_password is None:
2947
raise ValueError(f"La variable d'environnement {app_password} n'est pas definie.")
3048
else :
31-
print(f"Le mot de passe de l'application est : {app_password}")
49+
app_password_verified = print((f"Le mot de passe de l'application est : {app_password}").encode(encoding='utf-8',errors='ignore'))
3250

33-
#Corps de l'email (em.as_string())
34-
subject = "Demande de stage en IA"
51+
# Charger les adresses email et informations depuis le fichier emails.json
52+
with open('emails.json', 'r', encoding='utf-8') as file:
53+
email_data = json.load(file)
3554

36-
pdf_file_path = r"C:\\Users\\Jeff31\\Downloads\\CV - RAVAUX Maxime.pdf" #chemin d'accès vers le cv (en format pdf)
37-
fullname_sender = "Maxime RAVAUX"
38-
phone_sender = "+33 601686536"
55+
#Sécurité lors de l'envoie de l'email
56+
context = ssl.create_default_context()
3957

40-
message = f"Bonjour, \n\n Je suis {fullname_sender}, étudiant en Bachelor B1 d'IA à CESI. \n\n Je vous envoie ma candidature avec mon CV ci-joint : {pdf_file_path} \n\n Contactez-moi au {phone_sender} !"
58+
#Envoie de l'email à chaque adresse email dans le fichier emails.sjon
59+
for data in email_data:
60+
fullname_receiver = data['nom_prenom']
61+
company_receiver = data['entreprise']
62+
position_receiver = data['poste']
63+
email_receiver = data['adresse_mail']
4164

42-
em = EmailMessage()
43-
em["From"] = email_sender
44-
em["To"] = email_receiver
45-
em["Subject"] = subject
46-
em.set_content(message)
65+
#Corps de l'email (em.as_string())
66+
subject = "Candidature stage [R&D IA]"
67+
fullname_sender = "Maxime RAVAUX"
68+
phone_sender = "+33 601686536"
69+
message = f"""
70+
<html>
71+
<meta charset="UTF-8">
72+
<body>
73+
<p>Bonjour {fullname_receiver},</p>
74+
<p>Je suis étudiant en Bachelor B1 d'IA à CESI. Je recherche un stage [Avril-Août 2025] en R&D pôle IA dans une entreprise innovante comme la vôtre.</p>
75+
<p>Je vous envoie ma candidature avec mon CV ci-joint pour un stage en IA.</p>
76+
<p>N'hésitez pas à me contacter au {phone_sender} ! </p>
77+
<p>Vous pouvez également visiter mon <a href="https://www.linkedin.com/in/maxime-ravaux">profil LinkedIn</a>.</p>
78+
<p>Cordialement,<br><br>
79+
{fullname_sender}</p>
80+
</body>
81+
</html>
82+
"""
4783

48-
#Sécurité lors de l'envoie de l'email
49-
context = ssl.create_default_context()
84+
# Création de l'email
85+
em = MIMEMultipart()
86+
em["From"] = email_sender
87+
em["To"] = email_receiver
88+
em["Subject"] = subject
89+
em.attach(MIMEText(message,"html"))
90+
91+
#Ajout du fichier PDF en pièce jointe
92+
pdf_file_path = r"C:\\Users\\Jeff31\\Desktop\\CV - RAVAUX Maxime.pdf" #chemin d'accès vers le fichier PDF
93+
94+
with open(pdf_file_path, "rb") as pdf_file:
95+
attach = MIMEApplication(pdf_file.read(), _subtype="pdf")
96+
attach.add_header("Content-Disposition", "attachment", filename=os.path.basename(pdf_file_path))
97+
em.attach(attach)
98+
99+
#Personnalisation de l'envoie
100+
emails_per_batch = 70 #nombre d'emails à envoyer par lot
101+
batch_delay_min = 181 #délais max entre les lots (en s)
102+
batch_delay_max = 230 #délais max entre les lots (en s)
103+
104+
# Délai aléatoire entre les emails pour éviter d'être marqué comme spam
105+
email_delay_min = 3 #délais min entre les emails (en s)
106+
email_delay_max = 5 #délais max entre les emails (en s)
107+
108+
time.sleep(random.uniform(email_delay_min, email_delay_max))
109+
110+
#Envoie de l'email
111+
with smtplib.SMTP_SSL('smtp.gmail.com', 465, context = context) as server :#self, host, port, local_hostname, timeout, source_adress
112+
#server.starttls()
113+
#server.ehlo()
114+
server.login(email_sender, app_password) #adresse d'envoie
115+
server.sendmail (email_sender, email_receiver, em.as_string()) #envoie de l'email : email_sender -> email_receiver
116+
117+
print((f"Votre email a bien été envoyé à {email_receiver}").encode(encoding='utf-8',errors='ignore'))
50118

51-
#Envoie de l'email
52-
server = smtplib.SMTP_SSL('smtp.gmail.com', 465, context = context) #self, host, port, local_hostname, timeout, source_adress
53-
#server.starttls()
54-
server.ehlo()
55-
server.login(email_sender, app_password) #adresse d'envoie
56-
server.sendmail (email_sender, email_receiver, em.as_string()) #envoie de l'email : email_sender -> email_receiver
57-
58-
print(f"Votre email a bien été envoyé à {email_receiver}")
59-
60-
#Personnalisation de l'envoie
61-
emails_per_batch = 70 #nombre d'emails à envoyer par lot
62-
batch_delay_min = 181 #délais max entre les lots (en s)
63-
batch_delay_max = 230 #délais max entre les lots (en s)
64-
email_delay_min = 3 #délais min entre les emails indiv (en s)
65-
email_delay_max = 5 #délais max entre les emails indiv (en s)
119+
print(("Tous les emails ont été envoyés avec succès !").encode(encoding='utf-8',errors='ignore'))

0 commit comments

Comments
 (0)