Emvoi de mails - Python

Caddy -  
kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
Quelqu'un a-t-il deja envoye des mails en programmant en Python? Il voudrait bien partager son code?

Merci d'avance.
Configuration: Windows XP
Firefox 3.0.1

15 réponses

  1. teebo Messages postés 33585 Date d'inscription   Statut Contributeur Dernière intervention   1 797
     
    Salut,
    Comment veux tu l'envoyer? J'ai un truc qui le fait en passant par outlook mais ça ne marche que si tu utilises outlook (pro) sans doute...
    0
    1. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
       
      Il y a plus....portable :-)
      http://www.python.org/doc/lib/SMTP-example.html
      0
    2. teebo Messages postés 33585 Date d'inscription   Statut Contributeur Dernière intervention   1 797 > kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Ca dépend, je suis pas aidé si j'utilise pas SMTP (ce qui est le cas :-P)
      0
    3. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526 > teebo Messages postés 33585 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Oulah, double négation, lapin compris :-s
      0
    4. teebo Messages postés 33585 Date d'inscription   Statut Contributeur Dernière intervention   1 797 > kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention  
       
      J'ai pas de SMTP pour envoyer des mails, mais un serveur exchange...
      0
    5. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526 > teebo Messages postés 33585 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Je savais pas qu'Exchange n'utilisait pas smtp :-O

      C'est pire que ce que je pensais....
      0
  2. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
     
    Exchange ne possède pas des interfaces COM ?
    Sinon tu pourrais très bien le piloter en appellant du COM avec Python.
    0
    1. teebo Messages postés 33585 Date d'inscription   Statut Contributeur Dernière intervention   1 797
       
      C'est pas moi qui ai posé la question, bon je donne mon script au cas où...


      # coding=iso-8859-1
      import sys
      import win32com.client
      import datetime
      
      PERSONAL_ADRESS = "adresse@mail.com"
      CATEGORY = "Home"
      TITLE = "TODO List on : " + str(datetime.date.today())
      
      ##def send():
      ##	olMailItem = 0x0
      ##	obj = win32com.client.Dispatch("Outlook.Application")
      ##	newMail = obj.CreateItem(olMailItem)
      ##	newMail.Subject = 'A subject line'
      ##	newMail.Body = 'Body, wonderful body'
      ##	newMail.To = 'somebody at example.com'
      ##	newMail.Display()
      
      def sendMail(text):
      	oOutlook = win32com.client.gencache.EnsureDispatch("Outlook.Application")
      	Msg = oOutlook.CreateItem(0)
      	Msg.To = PERSONAL_ADRESS
      	Msg.Subject = TITLE
      	Msg.Body = text
      	#Msg.Display()
      	Msg.Send()
      
      def getTasks():
      	oOutlook = win32com.client.gencache.EnsureDispatch("Outlook.Application")
      	onMAPI = oOutlook.GetNamespace("MAPI")
      	ofTasks = onMAPI.GetDefaultFolder(13) # 13=outlook tasks folder
      	redemption = oOutlook.CreateObject('Redemption.SafeTaskItem')
      	result = ''
      	for i in range(len(ofTasks.Items)):
      		redemption.Item = ofTasks.Items.Item(i+1)
      		if CATEGORY.lower() in redemption.Item.Categories.lower():
      			result = result  + '\t- ' + redemption.Item.Subject + '(' + redemption.Item.Categories +'(\n\n'
      	return result
      
      try:
      	sendMail(getTasks())
      except:
      	r= raw_input("Sorry, an error occured")
      0
  3. Caddy
     
    Merci a tous d'avoir repondu a mon post.

    Il s'agit d'un envoi texte de mail, tout ce qu'il y a de plus simple. Le serveur est distant. J'aimerais avoir un code independant du client de messagerie, une correction au code suivant:

    import smtplib
    from email.mime.text import MIMEText
    def sendTextMail(mfrom,mto,text,sujet):
    mail = MIMEText(text)
    mail['From'] = mfrom
    mail['Subject'] = sujet
    mail['To'] = mto

    smtp = smtplib.SMTP('smtp.powweb.com', '25', 'localhost')
    smtp.connect()
    smtp.login('test@trucmuche.com', 'motdepasse')
    smtp.sendmail(mfrom, mto, mail.as_string())
    smtp.close()

    if __name__ == "__main__" :
    sendTextMail('test@trucmuche.com','test@machine.fr', 'test', 'test')

    Le code source de python.org recommande par killian ne me permet pas de comprendre.

    Merci.
    0
    1. teebo Messages postés 33585 Date d'inscription   Statut Contributeur Dernière intervention   1 797
       
      Re,

      Tu peux utiliser la balise "code" s'il te plait (les <> bleus au dessus de la fenêtre de message) pour que l'on voit comment c'est organisé...
      Merci
      0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. Caddy
     
    Comme je l'ai dit plus haut
    Il s'agit d'un envoi de mail texte, tout ce qu'il y a de plus simple. Le serveur est distant. J'aimerais avoir un code independant du client de messagerie, une correction au code suivant:

    import smtplib
    from email.mime.text import MIMEText
    def sendTextMail(mfrom,mto,text,sujet):
    mail = MIMEText(text)
    mail['From'] = mfrom
    mail['Subject'] = sujet
    mail['To'] = mto
    
    smtp = smtplib.SMTP('smtp.powweb.com', '25', 'localhost')
    smtp.connect()
    smtp.login('test@trucmuche.com', 'motdepasse')
    smtp.sendmail(mfrom, mto, mail.as_string())
    smtp.close()
    
    if __name__ == "__main__" :
    sendTextMail('test@trucmuche.com','test@machine.fr', 'test', 'test')


    Le code source de python.org recommande par killian ne me permet pas de comprendre.

    Merci d'avance.
    0
    1. teebo Messages postés 33585 Date d'inscription   Statut Contributeur Dernière intervention   1 797
       
      Heu, le but de la balise code est de laisser l'identation, si ton programme est identé comme ca, ce n'est pas surprenant qu'il ne marche pas...

      Il se passe quoi? Rien ou as tu des messages d'erreurs?
      0
  6. Caddy
     
    Heu...non je pense que j'ai juste fait une mauvaise copie. Je recommence:

    import smtplib
    
    from email.mime.text import MIMEText
    
    def sendTextMail(mfrom,mto,text,sujet):
        
        mail = MIMEText(text)
        mail['From'] = mfrom
        mail['Subject'] = sujet
        mail['To'] = mto
    
        smtp = smtplib.SMTP('smtp.trucmuche.com', '645', 'localhost')
        smtp.connect()
        smtp.login('test@trucmuche.com', 'motdepasse')
        smtp.sendmail(mfrom, mto, mail.as_string())
        smtp.close()
    
    if __name__ == "__main__" :
        sendTextMail('test@trucmuche.com','test@machine.fr', 'test', 'test')


    J'ai le message d'erreur suivant:

    Traceback (most recent call last):
    File "sendTextMail.py", line 19, in (module)
    sendTextMail('test@.trucmuche.com','retest@machine.fr', 'test', 'test')
    File "sendTextMail.py", line 12, in (module)
    smtp = smtplib.SMTP('smtp.trucmuche.com', '465', 'localhost')
    File "C:\Python25\lib\smtplib.py", line 244, in __init__
    (code,msg) = self.connect(host, port)
    File "C:\Python25\lib\smtplib.py", line 311, in connect
    (code,msg) = self.getreply()
    File "C:\Python25\lib\smtplib.py", line 352, in getreply
    line = self.file.readline()
    File "C:\Python25\lib\smtplib.py", line 346, in readline
    data = self._sock.recv(self.rbufsize)
    socket.error(10054,'Connection reset by peer')
    0
  7. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
     
    socket.error(10054,'Connection reset by peer')

    Simple: le serveur en face t'a jeté.
    0
  8. Caddy
     
    Merci.
    Mais est-ce que c'est tout? Y a aussi le

    Traceback (most recent call last):
    File "sendTextMail.py", line 19, in (module)
    sendTextMail('test@.trucmuche.com','retest@machine.fr', 'test', 'test')
    File "sendTextMail.py", line 12, in (module)


    ca signifie quoi?

    Et quelles sont les raisons pour lesquelles j'ai ete jetee?
    0
    1. teebo Messages postés 33585 Date d'inscription   Statut Contributeur Dernière intervention   1 797
       
      Ca t'explique à quel endroit de ton code tu as un problème, mais sebsauvage a raison, le problème de départ c'est que tu t'es fait jeter.
      Le reste c'est juste pour te dire où tu demandes au serveur de t'accepter en quelque sorte (quel fonctions, quel lignes)

      0
  9. Caddy
     
    Comment devrais-je passer le serveur en parametre?
    0
  10. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
     
    Le traceback t'indique où ça a planté.

    Dans ton source sendTextMail.py, c'est à la ligne 12:

    File "sendTextMail.py", line 12, in (module)
    smtp = smtplib.SMTP('smtp.trucmuche.com', '465', 'localhost') 


    Donc à la connexion.
    Donc soit le serveur n'existe pas, soit le chemin réseau est bloqué (firewall ?), soit le serveur te refuse la connexion.
    0
    1. teebo Messages postés 33585 Date d'inscription   Statut Contributeur Dernière intervention   1 797
       
      Mauvais port?
      0
      1. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684 > teebo Messages postés 33585 Date d'inscription   Statut Contributeur Dernière intervention  
         
        soit mauvais port, oui.
        0
  11. Caddy
     
    oui. merci.
    mais ma derniere question concerne plus les reseaux. comment je passe un serveur en parametre?
    smtp.serveur.com par exemple? ou l'@ ip? pour l'argument 'host'.

    P.s.:je ne suis pas tres "reseaux", pardon pour la betise.
    0
  12. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
     
    Avant de te connecter sur le serveur, tu t'es assuré qu'il existe ?
    Tu arrive à le pinguer ?

    Tu es certain qu'il y a un serveur SMTP en écoute sur ce port ?
    (465 c'est assez curieux pour du SMTP ; habituellement c'est port 25)
    0
  13. Caddy
     
    oui, j'ai fait un ping sur le serveur. Il existe.

    J'ai d'abord essaye avec le port 25; y a eu le meme bug, puis, j'ai change de port (en me disant que peut etre que c'est pas le port par defaut 25 qui a ete utilise)

    Comment je fais pour savoir quel port est reellement utilise?
    0
  14. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
     
    Comment je fais pour savoir quel port est reellement utilise?

    ben il faut demander à la personne qui administre le serveur de mail.
    0
  15. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    Il existe en tant que nom de domaine, après est ce qu'il existe physiquement c'est autre chose...
    C:\>ping smtp.powweb.com
    
    Envoi d'une requête 'ping' sur smtp.powweb.com [65.254.250.100] avec 32 octets d
    e données :
    
    Délai d'attente de la demande dépassé.
    Délai d'attente de la demande dépassé.
    Délai d'attente de la demande dépassé.
    Délai d'attente de la demande dépassé.
    
    Statistiques Ping pour 65.254.250.100:
        Paquets : envoyés = 4, reçus = 0, perdus = 4 (perte 100%),


    Et un ping n'est pas forcément fiable pour en témoigner.
    0