Exemplo n.º 1
0
    def __init__(self,
                 destinataires=[],
                 sujet="",
                 texte_html="",
                 fichiers=[],
                 images=[],
                 champs={}):
        self.destinataires = destinataires
        self.sujet = sujet
        self.fichiers = fichiers
        self.images = images
        self.texte_html = texte_html
        self.champs = champs

        # Corrige le pb des images embarquées
        index = 0
        for img in images:
            img = img.replace(u"\\", u"/")
            img = img.replace(u":", u"%3a")
            self.texte_html = self.texte_html.replace(u"file:/%s" % img,
                                                      u"cid:image%d" % index)
            index += 1

        # Conversion du html en texte plain
        self.texte_plain = UTILS_Html2text.html2text(self.texte_html)
Exemplo n.º 2
0
    def __init__(self, destinataires=[], sujet="", texte_html="", fichiers=[], images=[], champs={}):
        self.destinataires = destinataires
        self.sujet = sujet
        self.fichiers = fichiers
        self.images = images
        self.texte_html = texte_html
        self.champs = champs

        # Corrige le pb des images embarquées
        index = 0
        for img in images:
            img = img.replace(u"\\", u"/")
            img = img.replace(u":", u"%3a")
            self.texte_html = self.texte_html.replace(u"file:/%s" % img, u"cid:image%d" % index)
            index += 1

        # Conversion du html en texte plain
        self.texte_plain = UTILS_Html2text.html2text(self.texte_html)
Exemplo n.º 3
0
def Envoi_mail(adresseExpediteur="",
               listeDestinataires=[],
               listeDestinatairesCCI=[],
               sujetMail="",
               texteMail="",
               listeFichiersJoints=[],
               serveur="localhost",
               port=None,
               avecAuthentification=False,
               avecStartTLS=False,
               listeImages=[],
               motdepasse=None,
               accuseReception=False,
               utilisateur=""):
    """ Envoi d'un mail avec pièce jointe """
    import smtplib
    import poplib
    from email.MIMEMultipart import MIMEMultipart
    from email.MIMEBase import MIMEBase
    from email.MIMEText import MIMEText
    from email.MIMEImage import MIMEImage
    from email.MIMEAudio import MIMEAudio
    from email.Utils import COMMASPACE, formatdate
    from email import Encoders
    from email.utils import make_msgid
    import mimetypes

    assert type(listeDestinataires) == list
    assert type(listeFichiersJoints) == list

    # Corrige le pb des images embarquées
    index = 0
    for img in listeImages:
        img = img.replace(u"\\", u"/")
        img = img.replace(u":", u"%3a")
        texteMail = texteMail.replace(
            _(u"file:/%s") % img, u"cid:image%d" % index)
        index += 1

    # Création du message
    msg = MIMEMultipart('alternative')
    msg['From'] = adresseExpediteur
    msg['To'] = ";".join(listeDestinataires)
    msg['Bcc'] = ";".join(listeDestinatairesCCI)
    msg['Date'] = formatdate(localtime=True)
    msg['Subject'] = sujetMail
    #msg['Message-ID'] = make_msgid()

    if accuseReception == True:
        msg['Disposition-Notification-To'] = adresseExpediteur

    # Conversion du HTML en plain text
    textePlain = UTILS_Html2text.html2text(texteMail)

    msg.attach(MIMEText(textePlain.encode('utf-8'), 'plain', 'utf-8'))
    msg.attach(MIMEText(texteMail.encode('utf-8'), 'html', 'utf-8'))

    # Attache des pièces jointes
    for fichier in listeFichiersJoints:
        """Guess the content type based on the file's extension. Encoding
        will be ignored, altough we should check for simple things like
        gzip'd or compressed files."""
        ctype, encoding = mimetypes.guess_type(fichier)
        if ctype is None or encoding is not None:
            # No guess could be made, or the file is encoded (compresses), so
            # use a generic bag-of-bits type.
            ctype = 'application/octet-stream'
        maintype, subtype = ctype.split('/', 1)
        if maintype == 'text':
            fp = open(fichier)
            # Note : we should handle calculating the charset
            part = MIMEText(fp.read(), _subtype=subtype)
            fp.close()
        elif maintype == 'image':
            fp = open(fichier, 'rb')
            part = MIMEImage(fp.read(), _subtype=subtype)
            fp.close()
        elif maintype == 'audio':
            fp = open(fichier, 'rb')
            part = MIMEAudio(fp.read(), _subtype=subtype)
            fp.close()
        else:
            fp = open(fichier, 'rb')
            part = MIMEBase(maintype, subtype)
            part.set_payload(fp.read())
            fp.close()
            # Encode the payload using Base64
            Encoders.encode_base64(part)
        # Set the filename parameter
        nomFichier = os.path.basename(fichier)
        if type(nomFichier) == unicode:
            nomFichier = FonctionsPerso.Supprime_accent(nomFichier)
        part.add_header('Content-Disposition',
                        'attachment',
                        filename=nomFichier)
        msg.attach(part)

    # Images incluses
    index = 0
    for img in listeImages:
        fp = open(img, 'rb')
        msgImage = MIMEImage(fp.read())
        fp.close()
        msgImage.add_header('Content-ID', '<image%d>' % index)
        msgImage.add_header('Content-Disposition', 'inline', filename=img)
        msg.attach(msgImage)
        index += 1

## Certains SMTP (exemple Orange Pro) demandent une authentifcation (en général user : boite mail et pwd : mot de passe associé au smtp sécurisé )
## mais ne supportent pas le mode starttls
## Ces identifiants sont généralement utilisés lors d'un envoi de mail abec un FAI différent du propriétaire du SMTP
## Par exemple pour envoyer un mail avec le smtp pro orange depuis un autre FAI (Free, SFR....)
##      serveur : smtp.premium.orange.fr - port 587
##      user : [email protected]
##      pwd : mon_pwd
##  On positionne dans ce cas le parametre avecAuthentification a True
##  et le parametre avecStartTLS est positionné selon l'état du support de la fonction startTLS par le SMTP

    if motdepasse == None:
        motdepasse = ""
    if utilisateur == None:
        utilisateur = ""

    if avecAuthentification in (0, False, None):
        # Envoi standard
        smtp = smtplib.SMTP(serveur, timeout=150)
    else:
        # Si identification SSL nécessaire :
        smtp = smtplib.SMTP(serveur, port, timeout=150)
        smtp.ehlo()
        if avecStartTLS == True:
            smtp.starttls()
            smtp.ehlo()
        smtp.login(utilisateur.encode('utf-8'), motdepasse.encode('utf-8'))

    smtp.sendmail(adresseExpediteur,
                  listeDestinataires + listeDestinatairesCCI, msg.as_string())
    smtp.close()

    return True