Sujet d'un mail Python

Résolu/Fermé
biche_35 Messages postés 34 Date d'inscription mercredi 4 décembre 2013 Statut Membre Dernière intervention 1 août 2017 - 13 mars 2014 à 18:42
biche_35 Messages postés 34 Date d'inscription mercredi 4 décembre 2013 Statut Membre Dernière intervention 1 août 2017 - 14 mars 2014 à 12:09
Bonjour,
Je viens vers vous pour une problème assez bête mais néanmoins gênant.

Je viens de développer un script Python permettant d'envoyer le contenu d'un fichier par mail.

Voici le code :
#!/usr/bin/python2.7

import smtplib


fromaddr = "mailexp@test.fr
toaddrs = "maildest@test.fr"


def sendmail(message):
server = smtplib.SMTP('localhost')
server.set_debuglevel(1)
server.sendmail(fromaddr, toaddrs, message)
server.quit()

####ENVOI CHECK CYES2###
fichier = open("/home/exploit/bin/check_cyes2.swp", "r")
result = fichier.read()
if "vs-" in result:
sendmail(result)


Jusque là, aucun problème, je reçois bien le contenu du fichier 'check_cyes2.swp' sur ma boite mail.
En revanche, le mail que je reçois ne possède pas de sujet et malgré avoir traîné sur beaucoup de sites, je ne trouve pas la réponse en fonction de mon script.

L'objectif serait de rajouter un argument 'sujet' à ma fonction 'sendmail' pour pouvoir inscrire un sujet en dur à chaque appel de ma fonction. Ce qui donnerai :
sendmail(result, 'Voici le sujet de mon mail')

Quelqu'un a t'il une idée ?

Merci d'avance de vos infos


A voir également:

5 réponses

ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
Modifié par gravgun le 13/03/2014 à 18:49
'lut, en SMTP ce genre d'infos circule dans les en-têtes du mail, qui sont juste devant le contenu du mail. Le nom de l'en-tête du sujet c'est "Subject"; voici comment faire:
def sendmail(message):
    server = smtplib.SMTP('localhost')
    server.set_debuglevel(1)
    message = 'Subject: Mon titre de mail\n\n' + message
    server.sendmail(fromaddr, toaddrs, message)
    server.quit()
Attention toutefois, j'ai mis deux retours à la ligne
\n
; si tu as d'autres en-têtes, il ne faut en mettre qu'un seul, car un double retour à la ligne détermine la fin du bloc des en-têtes.
from human import idiocy
del idiocy
0
biche_35 Messages postés 34 Date d'inscription mercredi 4 décembre 2013 Statut Membre Dernière intervention 1 août 2017
13 mars 2014 à 18:54
Salut, fiou rapide intervention ;)

En tout cas ça a l'air de fonctionner ;)

Du coup je réfléchis à passer ça en argument de ma fonction "sendmail" et là je me dit que c'est pas gagné...

Merci bien de ta réponse
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
Modifié par gravgun le 13/03/2014 à 19:24
Si tu as la librairie email.mime.text à ta disposition, il existe l'objet
MIMEText
qui peut prendre en charge les en-têtes à ta place, pour te simplifier le travail:
from email.mime.text import MIMEText as
...
def sendmail(message):
    server = smtplib.SMTP('localhost')
    server.set_debuglevel(1)
    m = MIMEText(message)
    m['Subject'] = "Mon titre de mail"
    m['From'] = fromaddr
    m['To'] = toaddrs
    server.sendmail(fromaddr, toaddrs, m.as_string())
    server.quit()
0
biche_35 Messages postés 34 Date d'inscription mercredi 4 décembre 2013 Statut Membre Dernière intervention 1 août 2017
13 mars 2014 à 19:03
Arf, c'est juste que je compte utiliser cette fonction pour d'autre situation. Du coup, le sujet de mon mail est susceptible d'être modifier en fonction du fichier qui est envoyé. C'est d'ailleurs pour cette raison que je n'ai pas utiliser cette libraire.

J'insiste bien sur le fait de pouvoir insérer le sujet en argument de ma fonction 'sendmail'
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
Modifié par gravgun le 13/03/2014 à 19:07
def sendmail(message, titre):
    ...
    m['Subject'] = titre
Pas si dur :) Si tu veux un truc plus modulable
def sendmail(message, entetes):
    ...
    for key, value in entetes.iteritems():
        m[key] = value

Puis
sendmail("abcMessage", {'Subject': "Mon sujet  de mail"})
0
biche_35 Messages postés 34 Date d'inscription mercredi 4 décembre 2013 Statut Membre Dernière intervention 1 août 2017
13 mars 2014 à 19:22
Désolé j'suis encore un peu noob sur le sujet...


Voici donc ma fonction après correction :

def sendmail(message, sujet):
    server = smtplib.SMTP('localhost')
    server.set_debuglevel(1)
    m = MIMEText(message)
    m['Subject'] = sujet
    m['From'] = fromaddr
    m['To'] = toaddrs
    server.sendmail(fromaddr, toaddrs, m.as_string())
    server.quit()


Puis mon appel de fonction :

sendmail(result, 'Voici mon sujet')


Mais j'obtiens l'erreur suivante :

NameError: global name 'MIMEText' is not defined

Pareil si j'appel ma fonction de cette manière :

sendmail(result, {'Subject': "Mon sujet de mail"})

Pour info, j'ai bien pensé à importer ma librairie de cette manière :

from email.mime.text import MIMEText as text


Là, tu as atteint mes limites de compréhension :D
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
13 mars 2014 à 19:24
Oups, le " as text" est en trop (j'ai copié la ligne depuis autre part, c'est pour ça). Enlèves le, ça devrait marcher
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
biche_35 Messages postés 34 Date d'inscription mercredi 4 décembre 2013 Statut Membre Dernière intervention 1 août 2017
14 mars 2014 à 12:09
Salut,
Désolé de ma réponse tardive...

En tout cas bien joué, mon script fonctionne parfaitement.

Merci à toi en tout cas de ta patience ;)
0