Emvoi de mails - Python
Caddy
-
kilian Messages postés 8675 Date d'inscription Statut Modérateur Dernière intervention -
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.
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
-
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...
-
Exchange ne possède pas des interfaces COM ?
Sinon tu pourrais très bien le piloter en appellant du COM avec Python.-
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")
-
-
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. -
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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. -
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') -
socket.error(10054,'Connection reset by peer')
Simple: le serveur en face t'a jeté. -
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? -
-
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. -
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. -
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) -
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? -
Comment je fais pour savoir quel port est reellement utilise?
ben il faut demander à la personne qui administre le serveur de mail. -
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.