Emvoi de mails - Python

Caddy -  
kilian Messages postés 8732 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.

15 réponses

teebo Messages postés 33491 Date d'inscription   Statut Modérateur Dernière intervention   1 793
 
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
kilian Messages postés 8732 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
teebo Messages postés 33491 Date d'inscription   Statut Modérateur Dernière intervention   1 793 > kilian Messages postés 8732 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
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526 > teebo Messages postés 33491 Date d'inscription   Statut Modérateur Dernière intervention  
 
Oulah, double négation, lapin compris :-s
0
teebo Messages postés 33491 Date d'inscription   Statut Modérateur Dernière intervention   1 793 > kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention  
 
J'ai pas de SMTP pour envoyer des mails, mais un serveur exchange...
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526 > teebo Messages postés 33491 Date d'inscription   Statut Modérateur Dernière intervention  
 
Je savais pas qu'Exchange n'utilisait pas smtp :-O

C'est pire que ce que je pensais....
0
sebsauvage Messages postés 32893 Date d'inscription   Statut Modérateur Dernière intervention   15 662
 
Exchange ne possède pas des interfaces COM ?
Sinon tu pourrais très bien le piloter en appellant du COM avec Python.
0
teebo Messages postés 33491 Date d'inscription   Statut Modérateur Dernière intervention   1 793
 
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
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
teebo Messages postés 33491 Date d'inscription   Statut Modérateur Dernière intervention   1 793
 
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
Caddy
 
OK. Desolee.
0

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

Posez votre question
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
teebo Messages postés 33491 Date d'inscription   Statut Modérateur Dernière intervention   1 793
 
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
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
sebsauvage Messages postés 32893 Date d'inscription   Statut Modérateur Dernière intervention   15 662
 
socket.error(10054,'Connection reset by peer')

Simple: le serveur en face t'a jeté.
0
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
teebo Messages postés 33491 Date d'inscription   Statut Modérateur Dernière intervention   1 793
 
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
Caddy
 
Comment devrais-je passer le serveur en parametre?
0
sebsauvage Messages postés 32893 Date d'inscription   Statut Modérateur Dernière intervention   15 662
 
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
teebo Messages postés 33491 Date d'inscription   Statut Modérateur Dernière intervention   1 793
 
Mauvais port?
0
sebsauvage Messages postés 32893 Date d'inscription   Statut Modérateur Dernière intervention   15 662 > teebo Messages postés 33491 Date d'inscription   Statut Modérateur Dernière intervention  
 
soit mauvais port, oui.
0
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
sebsauvage Messages postés 32893 Date d'inscription   Statut Modérateur Dernière intervention   15 662
 
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
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
sebsauvage Messages postés 32893 Date d'inscription   Statut Modérateur Dernière intervention   15 662
 
Comment je fais pour savoir quel port est reellement utilise?

ben il faut demander à la personne qui administre le serveur de mail.
0
kilian Messages postés 8732 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