#1 Le 19/06/2025, à 15:17
- Arbiel
[Résolu] Modifier le comportement ssl lors de l'envoi courriel
Bonjour à tous
J'envoie des courriels par un script écrit en Python avec les instructions ci-dessous, dans lesquelles expéditeur est une balise html qui contient les arguments serveur_sortant, port_sortant, lathraios et mdp :
with smtplib.SMTP_SSL(expéditeur['serveur_sortant'], expéditeur['port_sortant']) as mailServer :
if expéditeur.has_attr('lathraios') :
lat=expéditeur['lathraios']
if lat[0] == '[' :
lat=lat[1:].replace(']','')
else :
import base64
lat=base64.b64encode(bytes(expéditeur['lathraios'],encoding='utf-8')).decode(encoding='utf-8')
else :
lat=expéditeur['mdp']
s = mailServer.login(expéditeur['courriel'], lat)
mailServer.send_message(msg)
mailServer.close()
L'exécution du script me donne le résultat suivant :
arbiel@arbiel-NJ5x-NJ7xLU:~$ python '/home/arbiel/Bureau/gestion des quittances/loyer V2.py'
Traceback (most recent call last):
File "/home/arbiel/Bureau/gestion des quittances/loyer V2.py", line 337, in execut
envoi_quittance (gbl.expéditeur, gbl.locataire, ἁυτόν, '/tmp/'+ἁυτόν.nom_fichier)
File "/home/arbiel/Bureau/gestion des quittances/loyer V2.py", line 418, in envoi_quittance
with smtplib.SMTP_SSL(expéditeur['serveur_sortant'], expéditeur['port_sortant']) as mailServer :
File "/usr/lib/python3.10/smtplib.py", line 1050, in __init__
SMTP.__init__(self, host, port, local_hostname, timeout,
File "/usr/lib/python3.10/smtplib.py", line 255, in __init__
(code, msg) = self.connect(host, port)
File "/usr/lib/python3.10/smtplib.py", line 341, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/usr/lib/python3.10/smtplib.py", line 1057, in _get_socket
new_socket = self.context.wrap_socket(new_socket,
File "/usr/lib/python3.10/ssl.py", line 513, in wrap_socket
return self.sslsocket_class._create(
File "/usr/lib/python3.10/ssl.py", line 1100, in _create
self.do_handshake()
File "/usr/lib/python3.10/ssl.py", line 1371, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1007)
La consultation du site me laisse supposer que je peux modifier le comportement de ssl, mais j'ai trop de lacunes pour y parvenir seul.
Merci d'avance à quiconque pourra me comment je peux faire.
Dernière modification par Arbiel (Le 21/06/2025, à 14:37)
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#2 Le 19/06/2025, à 15:32
- iznobe
Re : [Résolu] Modifier le comportement ssl lors de l'envoi courriel
Bonjour , sans voir le fichier : /home/arbiel/Bureau/gestion des quittances/loyer V2.py"
je ne vois pas comment quelqu ' un pourrait trouver une piste / solution .
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#3 Le 20/06/2025, à 10:59
- Arbiel
Re : [Résolu] Modifier le comportement ssl lors de l'envoi courriel
Bonjour iznobe
Je te remercie de l'intérêt que tu portes à ma demande d'aide.
À partir de mon script, j'ai composé le petit programme ci-dessous qui reprend les instructions relatives à l'envoi de message.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# Test problème SSL
import sys
from bs4 import BeautifulSoup as btfs
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
class globl():
def __init__(ἁυτόν):
annexes='/home/arbiel/Bureau/Comportement SSL/annexes'
html_correspondants='/'.join((annexes, "exp.xml"))
with open(html_correspondants, 'r') as f :
correspondants = btfs(f.read(), 'html.parser')
ἁυτόν.expéditeur = correspondants.find('section', class_='expéditeur').p
ἁυτόν.destinataire = correspondants.find('section', class_='destinataire').p
ἁυτόν.destinateur='/'.join((annexes,sys.path[2]))
ἁυτόν.pj='/'.join((annexes,'pièce_jointe.pdf'))
return None
def envoi (expéditeur, destinataire, sujet, texte_message, pj):
# 1. Préparer le contenu du message
msg = MIMEMultipart()
# 2. Compléter l'entête
msg['Subject'] = sujet
msg['Keywords'] = "test"
msg['From'] = expéditeur['courriel']
msg['To'] = destinataire['courriel']
if expéditeur.has_attr('réponse') :
msg['Reply-To'] = expéditeur['réponse']
if expéditeur.has_attr('copie') :
en_copie=', '.join(expéditeur['copie'].replace(',',' ').strip().split())
msg['Bcc']=en_copie
msg.attach(MIMEText(texte_message, 'plain'))
# Insertion de la pièce joints
part = MIMEBase('application', 'pdf')
with open(pj, "rb") as f:
part.set_payload(f.read())
encoders.encode_base64(part)
part.add_header(
'Content-Disposition',
f'attachment; filename={pj.split("/")[-1]}',
)
msg.attach(part)
with smtplib.SMTP_SSL(expéditeur['serveur_sortant'], expéditeur['port_sortant']) as mailServer :
if expéditeur.has_attr('lathraios') :
lat=expéditeur['lathraios']
if lat[0] == '[' :
lat=lat[1:].replace(']','')
else :
import base64
lat=base64.b64encode(bytes(expéditeur['lathraios'],encoding='utf-8')).decode(encoding='utf-8')
else :
lat=expéditeur['mdp']
s = mailServer.login(expéditeur['courriel'], lat)
mailServer.send_message(msg)
mailServer.close()
t = str(datetime.now().strftime("%Y-%m-%d %H:%M"))
message= t + " envoi à " + destinataire['courriel']
msg = QMessageBox(1, "gestion des quittances", message, QMessageBox.Ok)
msg.setStyleSheet("QLabel {color:blue;}")
msg.exec()
return
def main(args):
gbl=globl()
texte_message="""Bonjour Monsieur
Je vous prie de trouver ci-joint le document que vous m'avez demandé.
Salutations
Arbiel Perlacremaz"""
sujet = "En réponse à votre demande"
envoi(gbl.expéditeur, gbl.destinataire,sujet,texte_message,gbl.pj)
return 0
if __name__ == '__main__':
import sys
sys.exit(main(sys.argv))
Le retour en est le suivant :
arbiel@arbiel-NJ5x-NJ7xLU:~$ python '/home/arbiel/Bureau/Comportement SSL/pb_ssl.py'
Traceback (most recent call last):
File "/home/arbiel/Bureau/Comportement SSL/pb_ssl.py", line 91, in <module>
sys.exit(main(sys.argv))
File "/home/arbiel/Bureau/Comportement SSL/pb_ssl.py", line 86, in main
envoi(gbl.expéditeur, gbl.destinataire,sujet,texte_message,gbl.pj)
File "/home/arbiel/Bureau/Comportement SSL/pb_ssl.py", line 56, in envoi
with smtplib.SMTP_SSL(expéditeur['serveur_sortant'], expéditeur['port_sortant']) as mailServer :
File "/usr/lib/python3.10/smtplib.py", line 1050, in __init__
SMTP.__init__(self, host, port, local_hostname, timeout,
File "/usr/lib/python3.10/smtplib.py", line 255, in __init__
(code, msg) = self.connect(host, port)
File "/usr/lib/python3.10/smtplib.py", line 341, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/usr/lib/python3.10/smtplib.py", line 1057, in _get_socket
new_socket = self.context.wrap_socket(new_socket,
File "/usr/lib/python3.10/ssl.py", line 513, in wrap_socket
return self.sslsocket_class._create(
File "/usr/lib/python3.10/ssl.py", line 1100, in _create
self.do_handshake()
File "/usr/lib/python3.10/ssl.py", line 1371, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1007)
arbiel@arbiel-NJ5x-NJ7xLU:~$
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#4 Le 20/06/2025, à 13:36
- soshy
Re : [Résolu] Modifier le comportement ssl lors de l'envoi courriel
Salut,
il est possible que ce soit juste une erreur de port. En général SSL c'est le port 465.
On peut savoir ce que ça vaut expéditeur['serveur_sortant'] et expéditeur['port_sortant'] ?
Hors ligne
#5 Le 20/06/2025, à 14:18
- steph810
Re : [Résolu] Modifier le comportement ssl lors de l'envoi courriel
Bonjour,
je rejoind @soshy
suppression de Ligne 56 a 66 et insert de test de port. Il reste inchanger par la suite
A tester.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# Test problème SSL
import sys
from datetime import datetime
from bs4 import BeautifulSoup as btfs
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
from PyQt5.QtWidgets import QMessageBox
class globl():
def __init__(ἁυτόν):
annexes='/home/arbiel/Bureau/Comportement SSL/annexes'
html_correspondants='/'.join((annexes, "exp.xml"))
with open(html_correspondants, 'r') as f :
correspondants = btfs(f.read(), 'html.parser')
ἁυτόν.expéditeur = correspondants.find('section', class_='expéditeur').p
ἁυτόν.destinataire = correspondants.find('section', class_='destinataire').p
ἁυτόν.destinateur='/'.join((annexes,sys.path[2]))
ἁυτόν.pj='/'.join((annexes,'pièce_jointe.pdf'))
return None
def envoi (expéditeur, destinataire, sujet, texte_message, pj):
# 1. Préparer le contenu du message
msg = MIMEMultipart()
# 2. Compléter l'entête
msg['Subject'] = sujet
msg['Keywords'] = "test"
msg['From'] = expéditeur['courriel']
msg['To'] = destinataire['courriel']
if expéditeur.has_attr('réponse') :
msg['Reply-To'] = expéditeur['réponse']
if expéditeur.has_attr('copie') :
en_copie=', '.join(expéditeur['copie'].replace(',',' ').strip().split())
msg['Bcc']=en_copie
msg.attach(MIMEText(texte_message, 'plain'))
# Insertion de la pièce joints
part = MIMEBase('application', 'pdf')
with open(pj, "rb") as f:
part.set_payload(f.read())
encoders.encode_base64(part)
part.add_header(
'Content-Disposition',
f'attachment; filename={pj.split("/")[-1]}',
)
msg.attach(part)
# Check port 465
port = int(expéditeur['port_sortant'])
if expéditeur.has_attr('lathraios') :
lat=expéditeur['lathraios']
if lat[0] == '[' :
lat=lat[1:].replace(']','')
else :
import base64
lat=base64.b64encode(bytes(expéditeur['lathraios'],encoding='utf-8')).decode(encoding='utf-8')
else :
lat=expéditeur['mdp']
if port == 465:
# Port 465 = SSL direct
with smtplib.SMTP_SSL(expéditeur['serveur_sortant'], port) as mailServer :
s = mailServer.login(expéditeur['courriel'], lat)
mailServer.send_message(msg)
mailServer.close()
else:
# Autres ports = STARTTLS
with smtplib.SMTP(expéditeur['serveur_sortant'], port) as mailServer :
mailServer.starttls()
s = mailServer.login(expéditeur['courriel'], lat)
mailServer.send_message(msg)
mailServer.close()
t = str(datetime.now().strftime("%Y-%m-%d %H:%M"))
message= t + " envoi à " + destinataire['courriel']
msg = QMessageBox(1, "gestion des quittances", message, QMessageBox.Ok)
msg.setStyleSheet("QLabel {color:blue;}")
msg.exec()
return
def main(args):
gbl=globl()
texte_message="""Bonjour Monsieur
Je vous prie de trouver ci-joint le document que vous m'avez demandé.
Salutations
Arbiel Perlacremaz"""
sujet = "En réponse à votre demande"
envoi(gbl.expéditeur, gbl.destinataire,sujet,texte_message,gbl.pj)
return 0
if __name__ == '__main__':
import sys
sys.exit(main(sys.argv))
Dernière modification par steph810 (Le 20/06/2025, à 14:19)
Hors ligne
#6 Le 20/06/2025, à 14:57
- Arbiel
Re : [Résolu] Modifier le comportement ssl lors de l'envoi courriel
Bonjour
<p expéditeur='quelqu'un'
courriel='cmjmb@pm.me'
serveur_sortant=127.0.0.1
port_sortant=1025
mdp=
La messagerie Protonmail chiffre les courriels de bout en bout, c'est-à-dire dès la sortie de mon ordinateur jusqu'à l'entrée dans le terminal du destinataire si celui-ci est également abonné à cette messagerie, ou jusqu'à la sortie du domaine dans le cas contraire.
À priori, les courriels sont traités, en sortie comme en entrée, par la page internet. Pour permettre aux utilisateurs de communiquer par d'autres moyens, comme, par exemple, Thunderbird, Proton propose un outil, le "Bridge", alors accessible par l'adresse 127.0.0.1 et avec le port 1025.
Le problème ne provient pas du port, mais d'une incompatibilité dans la négociation des paramètres de sécurité entre l'émetteur et le récepteur. J'avais déjà réussi à envoyer un courriel vers le destinateur d'un autre domaine. Je vais essayer de le retrouver pour refaire un test.
Arbiel
Dernière modification par Arbiel (Le 20/06/2025, à 16:59)
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#7 Le 20/06/2025, à 15:07
- steph810
Re : [Résolu] Modifier le comportement ssl lors de l'envoi courriel
re,
meme chose juste ajouter la condition, ca reste du copier coller enfin tester:
Ligne 58,71
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# Test problème SSL
import sys
from datetime import datetime
from bs4 import BeautifulSoup as btfs
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
from PyQt5.QtWidgets import QMessageBox
class globl():
def __init__(ἁυτόν):
annexes='/home/arbiel/Bureau/Comportement SSL/annexes'
html_correspondants='/'.join((annexes, "exp.xml"))
with open(html_correspondants, 'r') as f :
correspondants = btfs(f.read(), 'html.parser')
ἁυτόν.expéditeur = correspondants.find('section', class_='expéditeur').p
ἁυτόν.destinataire = correspondants.find('section', class_='destinataire').p
ἁυτόν.destinateur='/'.join((annexes,sys.path[2]))
ἁυτόν.pj='/'.join((annexes,'pièce_jointe.pdf'))
return None
def envoi (expéditeur, destinataire, sujet, texte_message, pj):
# 1. Préparer le contenu du message
msg = MIMEMultipart()
# 2. Compléter l'entête
msg['Subject'] = sujet
msg['Keywords'] = "test"
msg['From'] = expéditeur['courriel']
msg['To'] = destinataire['courriel']
if expéditeur.has_attr('réponse') :
msg['Reply-To'] = expéditeur['réponse']
if expéditeur.has_attr('copie') :
en_copie=', '.join(expéditeur['copie'].replace(',',' ').strip().split())
msg['Bcc']=en_copie
msg.attach(MIMEText(texte_message, 'plain'))
# Insertion de la pièce joints
part = MIMEBase('application', 'pdf')
with open(pj, "rb") as f:
part.set_payload(f.read())
encoders.encode_base64(part)
part.add_header(
'Content-Disposition',
f'attachment; filename={pj.split("/")[-1]}',
)
msg.attach(part)
# *** MODIFICATION *** - Check port 465
port = int(expéditeur['port_sortant'])
if expéditeur.has_attr('lathraios') :
lat=expéditeur['lathraios']
if lat[0] == '[' :
lat=lat[1:].replace(']','')
else :
import base64
lat=base64.b64encode(bytes(expéditeur['lathraios'],encoding='utf-8')).decode(encoding='utf-8')
else :
lat=expéditeur['mdp']
# *** MODIFICATION *** - Gestion spécifique Proton Bridge et ports
if expéditeur['serveur_sortant'] == '127.0.0.1':
# Proton Bridge - pas de SSL/TLS
with smtplib.SMTP(expéditeur['serveur_sortant'], port) as mailServer :
s = mailServer.login(expéditeur['courriel'], lat)
mailServer.send_message(msg)
mailServer.close()
elif port == 465:
# Port 465 = SSL direct
with smtplib.SMTP_SSL(expéditeur['serveur_sortant'], port) as mailServer :
s = mailServer.login(expéditeur['courriel'], lat)
mailServer.send_message(msg)
mailServer.close()
else:
# Autres ports = STARTTLS
with smtplib.SMTP(expéditeur['serveur_sortant'], port) as mailServer :
mailServer.starttls()
s = mailServer.login(expéditeur['courriel'], lat)
mailServer.send_message(msg)
mailServer.close()
t = str(datetime.now().strftime("%Y-%m-%d %H:%M"))
message= t + " envoi à " + destinataire['courriel']
msg = QMessageBox(1, "gestion des quittances", message, QMessageBox.Ok)
msg.setStyleSheet("QLabel {color:blue;}")
msg.exec()
return
def main(args):
gbl=globl()
texte_message="""Bonjour Monsieur
Je vous prie de trouver ci-joint le document que vous m'avez demandé.
Salutations
Arbiel Perlacremaz"""
sujet = "En réponse à votre demande"
envoi(gbl.expéditeur, gbl.destinataire,sujet,texte_message,gbl.pj)
return 0
if __name__ == '__main__':
import sys
sys.exit(main(sys.argv))
Hors ligne
#8 Le 20/06/2025, à 15:43
- soshy
Re : [Résolu] Modifier le comportement ssl lors de l'envoi courriel
@steph810: la doc de config thunderbird en utilisant proton bridge spécifie d'utiliser starttls (https://proton.me/support/protonmail-br … underbird/)
Dernière modification par soshy (Le 20/06/2025, à 15:51)
Hors ligne
#9 Le 20/06/2025, à 17:15
- Arbiel
Re : [Résolu] Modifier le comportement ssl lors de l'envoi courriel
@soshy
Effectivement, il faut utiliser starttls avec le bridge de protonmail. Il n'est d'ailleurs pas possible de modifier ce choix dans l'écran de configuration du bridge.
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#10 Le 20/06/2025, à 18:57
- soshy
Re : [Résolu] Modifier le comportement ssl lors de l'envoi courriel
J'ai fait la remarque pour que tu corriges ton script
# *** MODIFICATION *** - Gestion spécifique Proton Bridge et ports
if expéditeur['serveur_sortant'] == '127.0.0.1':
# Proton Bridge - pas de SSL/TLS
...
La proposition initiale étant probablement suffisante.
Dernière modification par soshy (Le 20/06/2025, à 18:59)
Hors ligne
#11 Le 20/06/2025, à 19:39
- steph810
Re : [Résolu] Modifier le comportement ssl lors de l'envoi courriel
Voilà,
il faudra me dire, ajout commentaire et simplement l'appel mailserver.starttls() ligne 75
il lui faut testes.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# Test problème SSL
import sys
from datetime import datetime
from bs4 import BeautifulSoup as btfs
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
from PyQt5.QtWidgets import QMessageBox
class globl():
def __init__(ἁυτόν):
annexes='/home/arbiel/Bureau/Comportement SSL/annexes'
html_correspondants='/'.join((annexes, "exp.xml"))
with open(html_correspondants, 'r') as f :
correspondants = btfs(f.read(), 'html.parser')
ἁυτόν.expéditeur = correspondants.find('section', class_='expéditeur').p
ἁυτόν.destinataire = correspondants.find('section', class_='destinataire').p
ἁυτόν.destinateur='/'.join((annexes,sys.path[2]))
ἁυτόν.pj='/'.join((annexes,'pièce_jointe.pdf'))
return None
def envoi (expéditeur, destinataire, sujet, texte_message, pj):
# 1. Préparer le contenu du message
msg = MIMEMultipart()
# 2. Compléter l'entête
msg['Subject'] = sujet
msg['Keywords'] = "test"
msg['From'] = expéditeur['courriel']
msg['To'] = destinataire['courriel']
if expéditeur.has_attr('réponse') :
msg['Reply-To'] = expéditeur['réponse']
if expéditeur.has_attr('copie') :
en_copie=', '.join(expéditeur['copie'].replace(',',' ').strip().split())
msg['Bcc']=en_copie
msg.attach(MIMEText(texte_message, 'plain'))
# Insertion de la pièce joints
part = MIMEBase('application', 'pdf')
with open(pj, "rb") as f:
part.set_payload(f.read())
encoders.encode_base64(part)
part.add_header(
'Content-Disposition',
f'attachment; filename={pj.split("/")[-1]}',
)
msg.attach(part)
# *** MODIFICATION *** - Check port 465
port = int(expéditeur['port_sortant'])
if expéditeur.has_attr('lathraios') :
lat=expéditeur['lathraios']
if lat[0] == '[' :
lat=lat[1:].replace(']','')
else :
import base64
lat=base64.b64encode(bytes(expéditeur['lathraios'],encoding='utf-8')).decode(encoding='utf-8')
else :
lat=expéditeur['mdp']
# *** MODIFICATION *** - Gestion spécifique Proton Bridge et ports
if expéditeur['serveur_sortant'] == '127.0.0.1':
# Proton Bridge - utilise STARTTLS par défaut (port 1025)
with smtplib.SMTP(expéditeur['serveur_sortant'], port) as mailServer :
mailServer.starttls()
s = mailServer.login(expéditeur['courriel'], lat)
mailServer.send_message(msg)
mailServer.close()
elif port == 465:
# Port 465 = SSL direct
with smtplib.SMTP_SSL(expéditeur['serveur_sortant'], port) as mailServer :
s = mailServer.login(expéditeur['courriel'], lat)
mailServer.send_message(msg)
mailServer.close()
else:
# Autres ports = STARTTLS
with smtplib.SMTP(expéditeur['serveur_sortant'], port) as mailServer :
mailServer.starttls()
s = mailServer.login(expéditeur['courriel'], lat)
mailServer.send_message(msg)
mailServer.close()
t = str(datetime.now().strftime("%Y-%m-%d %H:%M"))
message= t + " envoi à " + destinataire['courriel']
msg = QMessageBox(1, "gestion des quittances", message, QMessageBox.Ok)
msg.setStyleSheet("QLabel {color:blue;}")
msg.exec()
return
def main(args):
gbl=globl()
texte_message="""Bonjour Monsieur
Je vous prie de trouver ci-joint le document que vous m'avez demandé.
Salutations
Arbiel Perlacremaz"""
sujet = "En réponse à votre demande"
envoi(gbl.expéditeur, gbl.destinataire,sujet,texte_message,gbl.pj)
return 0
if __name__ == '__main__':
import sys
sys.exit(main(sys.argv))
Dernière modification par steph810 (Le 20/06/2025, à 19:40)
Hors ligne
#12 Le 20/06/2025, à 19:50
- steph810
Re : [Résolu] Modifier le comportement ssl lors de l'envoi courriel
re,
ont sais jamais mais vous pouvez rajouter ceci sous la lign 59 pour ajuster le port.
je pense ont est pas mal.
# *** MODIFICATION *** - Ajustement automatique du port pour Proton Bridge
if expéditeur['serveur_sortant'] == '127.0.0.1' and port != 1025:
print(f"Attention: Port {port} pour Proton Bridge, port recommandé: 1025")
# Optionnel: forcer le port 1025 pour Proton Bridge
# port = 1025
Hors ligne
#13 Le 21/06/2025, à 12:02
- Arbiel
Re : [Résolu] Modifier le comportement ssl lors de l'envoi courriel
Bonjour
J'ai modifié le script à plusieurs reprises. Je le présente de nouveau
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# Test problème SSL
import sys
from bs4 import BeautifulSoup as btfs
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
class globl():
def __init__(ἁυτόν):
annexes='/home/arbiel/Bureau/Comportement SSL/annexes'
html_correspondants='/'.join((annexes, "exp.xml"))
with open(html_correspondants, 'r') as f :
correspondants = btfs(f.read(), 'html.parser')
ἁυτόν.expéditeur = correspondants.find('section', class_='expéditeur').p
print('expéditeur', ἁυτόν.expéditeur['courriel'])
ἁυτόν.destinataire = correspondants.find('section', class_='destinataire').p
print('destinataire', ἁυτόν.destinataire['courriel'])
# ἁυτόν.destinateur='/'.join((annexes,sys.path[2]))
ἁυτόν.pj='/'.join((annexes,'pièce_jointe.pdf'))
return None
def envoi (expéditeur, destinataire, sujet, texte_message, pj):
# 1. Préparer le contenu du message
msg = MIMEMultipart()
# 2. Compléter l'entête
msg['Subject'] = sujet
msg['Keywords'] = "test"
msg['From'] = expéditeur['courriel']
msg['To'] = destinataire['courriel']
print(destinataire)
# if expéditeur.has_attr('réponse') :
# msg['Reply-To'] = expéditeur['réponse']
# if expéditeur.has_attr('copie') :
# en_copie=', '.join(expéditeur['copie'].replace(',',' ').strip().split())
# msg['Bcc']=en_copie
msg.attach(MIMEText(texte_message, 'plain'))
# Insertion de la pièce joints
part = MIMEBase('application', 'pdf')
with open(pj, 'rb') as f:
part.set_payload(f.read())
encoders.encode_base64(part)
part.add_header(
'Content-Disposition',
f'attachment; filename={pj.split("/")[-1]}',
)
msg.attach(part)
# *** MODIFICATION *** - Check port 465
port = int(expéditeur['port_sortant'])
if expéditeur.has_attr('lathraios') :
lat=expéditeur['lathraios']
if lat[0] == '[' :
lat=lat[1:].replace(']','')
else :
import base64
lat=base64.b64encode(bytes(expéditeur['lathraios'],encoding='utf-8')).decode(encoding='utf-8')
else :
lat=expéditeur['mdp']
# *** MODIFICATION *** - Gestion spécifique Proton Bridge et ports
print(expéditeur['serveur_sortant'])
print(msg)
if expéditeur['serveur_sortant'] == '127.0.0.1':
# Proton Bridge - pas de SSL/TLS
with smtplib.SMTP(expéditeur['serveur_sortant'], port) as mailServer :
mailServer.starttls()
s = mailServer.login(expéditeur['courriel'], lat)
mailServer.send_message(msg)
mailServer.close()
elif port == 465:
# Port 465 = SSL direct
with smtplib.SMTP_SSL(expéditeur['serveur_sortant'], port) as mailServer :
s = mailServer.login(expéditeur['courriel'], lat)
mailServer.send_message(msg)
mailServer.close()
else:
# Autres ports = STARTTLS
with smtplib.SMTP(expéditeur['serveur_sortant'], port) as mailServer :
mailServer.starttls()
s = mailServer.login(expéditeur['courriel'], lat)
mailServer.send_message(msg)
mailServer.close()
if False :
with smtplib.SMTP_SSL(expéditeur['serveur_sortant'], expéditeur['port_sortant']) as mailServer :
if expéditeur.has_attr('lathraios') :
lat=expéditeur['lathraios']
if lat[0] == '[' :
lat=lat[1:].replace(']','')
else :
import base64
lat=base64.b64encode(bytes(expéditeur['lathraios'],encoding='utf-8')).decode(encoding='utf-8')
else :
lat=expéditeur['mdp']
s = mailServer.login(expéditeur['courriel'], lat)
mailServer.send_message(msg)
mailServer.close()
t = str(datetime.now().strftime("%Y-%m-%d %H:%M"))
message= t + " envoi à " + destinataire['courriel']
msg = QMessageBox(1, "gestion des quittances", message, QMessageBox.Ok)
msg.setStyleSheet("QLabel {color:blue;}")
msg.exec()
return
def main(args):
gbl=globl()
texte_message="""Bonjour Monsieur
Je vous prie de trouver ci-joint le document que vous m'avez demandé.
Salutations
Arbiel Perlacremaz"""
sujet = "En réponse à votre demande"
envoi(gbl.expéditeur, gbl.destinataire,sujet,texte_message,gbl.pj)
return 0
if __name__ == '__main__':
import sys
sys.exit(main(sys.argv))
Il n'y a plus d'erreur sur la négociation de la sécurité, mais il y en a une sur l'ajout de la pièce jointe :
(je n'ai conservé que la première et la dernière ligne en base64 du texte de la pièce jointe)
arbiel@arbiel-NJ5x-NJ7xLU:~$ python '/home/arbiel/Bureau/Comportement SSL/pb_ssl.py'
expéditeur remi.mathieu@protonmail.com
destinataire arbiel.perlacremaz@protonmail.com
<p courriel="arbiel.perlacremaz@protonmail.com" destinataire="M. Arbiel Perlacremaz"></p>
127.0.0.1
Content-Type: multipart/mixed; boundary="===============3027943286068992382=="
MIME-Version: 1.0
Subject: =?utf-8?q?En_r=C3=A9ponse_=C3=A0_votre_demande?=
Keywords: test
From: remi.mathieu@protonmail.com
To: arbiel.perlacremaz@protonmail.com--===============3027943286068992382==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64Qm9uam91ciBNb25zaWV1cgoJSmUgdm91cyBwcmllIGRlIHRyb3V2ZXIgY2ktam9pbnQgbGUgZG9j
dW1lbnQgcXVlIHZvdXMgbSdhdmV6IGRlbWFuZMOpLgoKCVNhbHV0YXRpb25zCgoJQXJiaWVsIFBl
cmxhY3JlbWF6--===============3027943286068992382==
Content-Type: application/pdf
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: =?utf-8?q?attachment=3B_filename=3Dpi=C3=A8ce=5Fjointe=2Epdf?=JVBERi0xLjUKJeLjz9MKMiAwIG9iago8PC9MZW5ndGggMzczMj4+c3RyZWFtCgogMC41MCB3Cltd
mGGDFQ47L27cYt5/O6gJCAplbmRzdHJlYW0KZW5kb2JqCnN0YXJ0eHJlZgoxMDg1OAolJUVPRgo=--===============3027943286068992382==--
Traceback (most recent call last):
File "/home/arbiel/Bureau/Comportement SSL/pb_ssl.py", line 131, in <module>
sys.exit(main(sys.argv))
File "/home/arbiel/Bureau/Comportement SSL/pb_ssl.py", line 126, in main
envoi(gbl.expéditeur, gbl.destinataire,sujet,texte_message,gbl.pj)
File "/home/arbiel/Bureau/Comportement SSL/pb_ssl.py", line 80, in envoi
mailServer.send_message(msg)
File "/usr/lib/python3.10/smtplib.py", line 986, in send_message
return self.sendmail(from_addr, to_addrs, flatmsg, mail_options,
File "/usr/lib/python3.10/smtplib.py", line 908, in sendmail
raise SMTPDataError(code, resp)
smtplib.SMTPDataError: (554, b'5.0.0 Error: failed to parse message: failed to collect attachments: mime: invalid media parameter')
arbiel@arbiel-NJ5x-NJ7xLU:~$
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#14 Le 21/06/2025, à 12:49
- steph810
Re : [Résolu] Modifier le comportement ssl lors de l'envoi courriel
Bonjour,
Fair un essaie remplace L.55 maque guillemet.
f'attachment; filename="{pj.split("/")[-1]}"', # Correction : filename entre guillemets doubles
Tu peut rajouter ceci aussi.
from datetime import datetime # Si tu veut la date et heures
from PyQt5.QtWidgets import QMessageBox # pour QMessageBox
Dernière modification par steph810 (Le 21/06/2025, à 12:50)
Hors ligne
#15 Le 21/06/2025, à 14:28
- Arbiel
Re : [Résolu] Modifier le comportement ssl lors de l'envoi courriel
@steph810
Bien vu. Je vais modifier mon script en conséquence.
Merci à toi steph810, et à vous, iznobe et soshy. Votre aide qui m'a été très précieuse.
La mer est à 10 km, et je vais pouvoir aller me baigner.
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne