Bonjours,

J'ai un petit problème au niveau de la compréhension de l'héritage en python. je souhaite hériter d'une classe pour modifier une méthode à l'intérieur, et ajouter un paramètre à passer à cette classe.

Je veux modifier la classe smtplib pour permettre un bind sur une adresse spécifique l'or d'un envoie d'email.

Voici un exemple en quelque lignes:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import smtplib
import socket
import re
import email.utils
import base64
import hmac
from email.base64mime import encode as encode_base64
from sys import stderr
 
 
class SMTP2(smtplib.SMTP):
 
    def __init__(self, host='', port=0, local_hostname=None,timeout=socket._GLOBAL_DEFAULT_TIMEOUT, bind_ip=None):
 
        def _get_socket(self, port, host, timeout, bind_ip=None):
            # This makes it simpler for SMTP_SSL to use the SMTP connect code
            # and just alter the socket connection bit.
            if self.debuglevel > 0: print>>stderr, 'connect:', (host, port)
            return socket.create_connection((port, host), timeout, (bind_ip, ''))
 
 
 
s = SMTP2('smtp.google.com', bind_ip='192.168.0.2')
s.sendmail('test@test.com', 'test@test.com', 'Ceci est un test')
Au moment de tester mon code j'obtiens cette erreur:

root@squeeze:~# python test.py
Traceback (most recent call last):
File "test.py", line 24, in <module>
s.sendmail('test@test.com', 'test@test.com', 'This is a test')
File "/usr/lib/python2.6/smtplib.py", line 685, in sendmail
self.ehlo_or_helo_if_needed()
File "/usr/lib/python2.6/smtplib.py", line 509, in ehlo_or_helo_if_needed
if not (200 <= self.ehlo()[0] <= 299):
File "/usr/lib/python2.6/smtplib.py", line 382, in ehlo
self.putcmd(self.ehlo_msg, name or self.local_hostname)
AttributeError: SMTP2 instance has no attribute 'local_hostname'
Je pense que c'est un soucis au niveau de l'héritage de la classe SMTP / ou du constructeur.

Merci de votre aide,