Envoyer un mail en Perl

a marqué ce sujet comme résolu.

Bonsoir,

Je cherche à envoyer un mail avec un script perl mais je n'y arrive pas. Je ne sais plus comment j'ai fait, à un moment j'ai réussi avec ceci

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!usr/bin/perl -w

use strict;
use Net::SMTP;

#Étape 1
my $smtp = Net::SMTP->new('mail.host.com') or die 'Impossible de se connecter au serveur : ' . $!;

#Étape 2
$smtp->mail('une_adresse) or die 'Un problème est survenu avec la méthode mail() !';

#Étape 3
$smtp->to('une_adresse') or die 'Un problème est survenu avec la méthode to() !';

#$smtp->cc('*****@hotmail.fr') or die 'Un problème est survenu avec la méthode cc() !';
#$smtp->bcc('*****@hotmail.fr') or die 'Un problème est survenu avec la méthode bcc() !';

#Étape 4
$smtp->data() or die 'Un problème est survenu avec la méthode data() !';
$smtp->datasend('J\'apprends à envoyer des mails en Perl ! La tu me dire que je me la pete :D Ccile') or die 'Un problème est survenu avec la méthode datasend() !';
$smtp->dataend() or die 'Un problème est survenu avec la méthode dataend() !';

#Étape 5
$smtp->quit() or die 'Un problème est survenu avec la méthode quit() !';

(oui il y a mon mail, pas grave…) Mais je n'avais pas mis le même serveur (ligne 7) et j'arrivais à m'envoyer un mail mais pas à d'autre, problème de spam apparemment… Je cherche donc quel serveur mettre… Merci d'avance Bonne soirée

PS Je suis sous Windows 7 et la première ligne est juste due à un copier/coller de codes internet… J'ai comme erreur soit des invalid argument soit permission denied :/ help me please

EDIT : réussi il fallait juste que je trouve le serveur de l'université… Par contre j'envoie à des gmail sans résultat :'(

+0 -0

J'ai comme erreur soit des invalid argument soit permission denied :/ help me please
[…]
EDIT : réussi il fallait juste que je trouve le serveur de l'université… Par contre j'envoie à des gmail sans résultat :'(

Ccile

Tu essaies visiblement d’envoyer un courriel « à l’ancienne » en tapant directement dans le port 25 du serveur SMTP. Alors outre le fait que les fournisseurs d’accès bloquent généralement le port 25 sortant (officiellement pour limiter le spam), je suis quasiment certains que les serveurs gmail demandent à l’utilisateur de s’authentifier pour pouvoir soumettre un courriel. Ton université ne doit pas avoir de telle restriction (en tout cas pour son réseau interne).

Donc, authentifie toi auprès du serveur.

ceci pourrait t’aider

+0 -0

Bonjour,

Je m'identifie avec mes identifiants de l'université et ça ne va toujours pas avec gmail (je veux envoyer à des adresses gmail pas avec une adresse gmail). Je reçois bien quand je me mets à la fois en expéditeur et destinataire mais en effet je reçois un mail pour dire que ça a été bloqué… Voici ce qu'affiche la console pour un mail vers mon adresse

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Net::SMTP>>> Net::SMTP(2.31)
Net::SMTP>>>   Net::Cmd(2.29)
Net::SMTP>>>     Exporter(5.70)
Net::SMTP>>>   IO::Socket::INET(1.33)
Net::SMTP>>>     IO::Socket(1.36)
Net::SMTP>>>       IO::Handle(1.34)
Net::SMTP=GLOB(0xfe26c0)<<< 220 *************
Net::SMTP=GLOB(0xfe26c0)>>> EHLO localhost.localdomain
Net::SMTP=GLOB(0xfe26c0)<<< 250-mx1.u-psud.fr
Net::SMTP=GLOB(0xfe26c0)<<< 250-PIPELINING
Net::SMTP=GLOB(0xfe26c0)<<< 250-SIZE 10485760
Net::SMTP=GLOB(0xfe26c0)<<< 250-ETRN
Net::SMTP=GLOB(0xfe26c0)<<< 250-XXXXXXXA
Net::SMTP=GLOB(0xfe26c0)<<< 250-ENHANCEDSTATUSCODES
Net::SMTP=GLOB(0xfe26c0)<<< 250-8BITMIME
Net::SMTP=GLOB(0xfe26c0)<<< 250 DSN
Net::SMTP=GLOB(0xfe26c0)>>> MAIL FROM:<cecile.moulin@u-psud.fr>
Net::SMTP=GLOB(0xfe26c0)<<< 250 2.1.0 Ok
Net::SMTP=GLOB(0xfe26c0)>>> RCPT TO:<cecile.moulin@u-psud.fr>
Net::SMTP=GLOB(0xfe26c0)<<< 250 2.1.5 Ok
Net::SMTP=GLOB(0xfe26c0)>>> DATA
Net::SMTP=GLOB(0xfe26c0)<<< 354 End data with <CR><LF>.<CR><LF>
Net::SMTP=GLOB(0xfe26c0)>>> J'apprends à envoyer des mails en Perl ! La tu me dire que je me la pete :D Ccile
Net::SMTP=GLOB(0xfe26c0)>>> .
Net::SMTP=GLOB(0xfe26c0)<<< 250 2.0.0 Ok: queued as E807C302DD2                                                                                                                                                     
Net::SMTP=GLOB(0xfe26c0)>>> QUIT                                                                                                                                                                                    
Net::SMTP=GLOB(0xfe26c0)<<< 221 2.0.0 Bye            

Et pour un gmail

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Net::SMTP>>> Net::SMTP(2.31)
Net::SMTP>>>   Net::Cmd(2.29)
Net::SMTP>>>     Exporter(5.70)
Net::SMTP>>>   IO::Socket::INET(1.33)
Net::SMTP>>>     IO::Socket(1.36)
Net::SMTP>>>       IO::Handle(1.34)
Net::SMTP=GLOB(0xfe26c0)<<< 220 *************
Net::SMTP=GLOB(0xfe26c0)>>> EHLO localhost.localdomain
Net::SMTP=GLOB(0xfe26c0)<<< 250-mx1.u-psud.fr
Net::SMTP=GLOB(0xfe26c0)<<< 250-PIPELINING
Net::SMTP=GLOB(0xfe26c0)<<< 250-SIZE 10485760
Net::SMTP=GLOB(0xfe26c0)<<< 250-ETRN
Net::SMTP=GLOB(0xfe26c0)<<< 250-XXXXXXXA
Net::SMTP=GLOB(0xfe26c0)<<< 250-ENHANCEDSTATUSCODES
Net::SMTP=GLOB(0xfe26c0)<<< 250-8BITMIME
Net::SMTP=GLOB(0xfe26c0)<<< 250 DSN
Net::SMTP=GLOB(0xfe26c0)>>> MAIL FROM:<cecile.moulin@u-psud.fr>
Net::SMTP=GLOB(0xfe26c0)<<< 250 2.1.0 Ok
Net::SMTP=GLOB(0xfe26c0)>>> RCPT TO:<cecile.moulin@u-psud.fr>
Net::SMTP=GLOB(0xfe26c0)<<< 250 2.1.5 Ok
Net::SMTP=GLOB(0xfe26c0)>>> DATA
Net::SMTP=GLOB(0xfe26c0)<<< 354 End data with <CR><LF>.<CR><LF>
Net::SMTP=GLOB(0xfe26c0)>>> J'apprends à envoyer des mails en Perl ! La tu me dire que je me la pete :D Ccile
Net::SMTP=GLOB(0xfe26c0)>>> .
Net::SMTP=GLOB(0xfe26c0)<<< 250 2.0.0 Ok: queued as E807C302DD2                                                                                                                                                     
Net::SMTP=GLOB(0xfe26c0)>>> QUIT                                                                                                                                                                                    
Net::SMTP=GLOB(0xfe26c0)<<< 221 2.0.0 Bye            

Si j'ai bien compris il faudrait que j'utilise un autre port c'est ça ? Mais lequel et comment savoir ? Quant au lien, si j'ai bien compris il faut avoir un logiciel qui envoie les mails pour utiliser Email::Sender non ?

Merci pour tout

Tu a mis deux fois le même transcript.

Si j'ai bien compris il faudrait que j'utilise un autre port c'est ça ? Mais lequel et comment savoir ?

Oui, mais tu n’a pas à t’occuper des détails, Net::SMTP s’en charge pour toi. Tu dois juste t’authentifier.

Quant au lien, si j'ai bien compris il faut avoir un logiciel qui envoie les mails pour utiliser Email::Sender non ?

Non.

+0 -0

Alors c'est que j'ai dû utiliser autre chose la première fois… ça me disait sendmail n'est pas reconnu…

Ccile

Tu peux demander à Email::Sender d’utiliser un autre transport en explicitant le serveur SMTP comme avec Net::SMTP en fait. Mais sinon je t’ai donné le lien pour que tu vois comment on fait pour s’authentifier, pas pour recopier sauvagement une des réponses à la question (qui n’est pas vraiment le même problème que toi).

EDIT: J’ai essayer d’envoyer un courriel via gmail et c’est effectivement un peu pénible. Il faut utiliser TLS et aussi autoriser la connexion à son compte par des applications « moins sécurisée ». Mais bon, ça se fait tout de même. Cela dit je l’ai fait en Python donc je ne pourrais pas t’aider sur du Perl.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#-*- coding:utf-8 -*-

import smtplib
from email.MIMEText import MIMEText

# création du courriel
mail = MIMEText("J'apprends à envoyer des mails en Python ! La tu peux me dire que je me la pete :D Simbilou")
mail['From'] = "" # ton adresse
mail['Subject'] = "script envoi courriel "
mail['To'] = "" # addresse destination

# ouverture de la session avec le serveur SMTP (avec authentification)
username = '' # login
password = '' # mot de passe
smtp = smtplib.SMTP('mail.mailoo.org:587')
smtp.set_debuglevel(True) # pour voir la conversation avec le serveur
smtp.starttls()
smtp.login(username,password)

# envoi du courriel
smtp.sendmail(mail['From'], [mail['To']], mail.as_string())

# fin de session 
smtp.quit()

+0 -0

Bonjour, Je ne pense pas avoir recopié "sauvagement" la réponse, j'ai utilisé quelque chose de semblable à Email::Sender (je ne sais plus quoi et impossible de retrouver, c'est ça d'effacer et réécrire au dessus) et il y avait le message sendmail n'est pas reconnu comme commande…

Je n'essaye pas non plus d'envoyer un mail via gmail mais à gmail via mon mail étudiant…

Merci ^^

En fait le programme sendmail est un MTA, ce qui permet effectivement en théorie d’envoyer un courriel. Mais il est de plus en plus difficile de s’en servir parce que outre le blocage quasi-systématique du port 25 par les fournisseurs d’accès, les MTA des « grands » (google, yahoo, hotmail, etc.) sont de plus en plus restrictifs sur les MTA avec qui ils acceptent de dialoguer1.

Donc de nos jours, on utilise un MUA (Thunderbird, Outlook, un webmail quelconque, etc.) qui communique avec un MSA sur le port 587 qui lui-même s’adresse a un MTA. Un serveur smtp comme celui de ton université est à la fois un MSA et un MTA. C’est à dire qu’il peut dialoguer avec un utilisateur (par le port 587) et d’autres MTA (par le port 25).

Ton script est de fait un MUA minimaliste, sans toute la partie interaction avec l’utilisateur pour la création du courriel, de la gestion des identités, du choix du destinataire, etc..

Alors pour ton cas, d’après le wiki de l’université, le serveur smtp de Paris-Sud n’est pas accessible depuis l’extérieur donc déjà ton script ne pourra marcher que de là-bas. Mais sinon, l’envoi de courriel sur gmail ou autre devrait fonctionner. Ma supposition est que un MTA sur le trajet a jeter ton courriel parce que son en-tête ne lui revenait pas (il est peut être tout simplement dans le dossier spam aussi). Essaye d’utiliser Email::MIME pour créer un courriel bien formé, cet exemple me semble pas trop mal.


  1. toujours officiellement pour endiguer le spam. 

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte