IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Envoi d'un e-mail avec autorisation !


Sujet :

Langage PHP

  1. #1
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 425
    Points : 19 246
    Points
    19 246
    Par défaut Envoi d'un e-mail avec autorisation !
    Bonjour à tous.

    Je cherche à envoyer un e-mail vers un serveur SMTP avec autorisation.
    Voici mon script PHP :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    <!doctype html>
    <html lang="fr">
    <head>
    <meta charset="ISO-8859-1" />
    <title>Envoie d'un e-mail par socket !</title>
     
    <link rel="stylesheet" type="text/css" href="Styles.css" />
    </head>
     
    <body>
    <?php
    $serveur  = "???";
    $nom1     = "???";
    $email1   = "???";
    $password = "???";
     
    $client   = gethostname();
    $port     = 587;
     
    $nom2     = "???";
    $email2   = "???";
     
    $sujet    = "Test 1 !";
    $message  = "Test de l'envoi d'un message simple !";
    ?>
     
    <table>
    	<tr><td>Client       </td><td><?php echo ': '.$client;                ?></td></tr>
    	<tr><td>Serveur      </td><td><?php echo ': '.$serveur;               ?></td></tr>
    	<tr><td>Port         </td><td><?php echo ': '.$port;                  ?></td></tr>
    	<tr><td>Expéditeur   </td><td><?php echo ': '.$nom1.' ('.$email1.')'; ?></td></tr>
    	<tr><td>Destinataire </td><td><?php echo ': '.$nom2.' ('.$email2.')'; ?></td></tr>
    	<tr><td>Sujet        </td><td><?php echo ': '.$sujet;                 ?></td></tr>
    	<tr><td>Message      </td><td><?php echo ': '.$message;               ?></td></tr>
    </table>
     
    <?php
    $errno   = "";
    $errmsg  = "";
    $timeout = 20;
    $socket  = fsockopen($serveur, $port, $errno, $errmsg, $timeout);
     
    if ($errno != 0)
    {
    ?>
     
    	<br />
    	<table>
    		<tr><td>Connexion impossible</td><td><?php echo ': '.$serveur.' !';         ?></td></tr>
    		<tr><td>numero d'erreur     </td><td><?php echo ': '.$errno;                ?></td></tr>
    		<tr><td>Message d'erreur    </td><td><?php echo ': '.htmlentities($errmsg); ?></td></tr>
    	</table>
     
    <?php
    }
    else
    {
    	fputs($socket, "EHLO $client\n");
    	fputs($socket, "AUTH LOGIN\n");
    	fputs($socket, base64_encode($email1)."\n");
    	fputs($socket, base64_encode($password)."\n");
    	fputs($socket, "MAIL FROM:<$email1>\n");
    	fputs($socket, "RCPT TO:<$email2>\n");
    	fputs($socket, "DATA\n");
    	fputs($socket, "FROM:$nom1 <$email1>\n");
    	fputs($socket, "TO:$nom2 <$email2>\n");
    	fputs($socket, "SUBJECT:$sujet\n");
    	fputs($socket, "MIME-VERSION: 1.0\n");
    	fputs($socket, "CONTENT-TYPE:TEXT/PLAIN;CHARSET=ISO-8859-1\n");
    	fputs($socket, "$message\n");
    	fputs($socket, "\n.\n");
    	fputs($socket, "QUIT\n");
    	stream_set_blocking($socket, true);
     
    	$info   = stream_get_meta_data($socket);
    	$result = "";
     
    	while ((!feof($socket)) && (!$info['timed_out']))
    	{
    		$new     = fgets($socket, 4096);
    		$result .= str_replace(Chr(10), "<br />", $new);
    		$info    = stream_get_meta_data($socket);
    	}
     
    	fclose($socket);
    ?>
     
    	<br />
    	<div id="bloc">  <?php echo $result; ?></div>
     
    <?php
    	if ($info['timed_out'])
    	{
    ?>
    		<br />
    		<div id="alerte">Connection Timed Out!</div>
     
    <?php
    	}
    }
    ?>
    </body>
    </html>
    Je n'ai pas mis en clair mes adresses e-mail.

    C'est un script php de test pour voir comment fonctionne l'envoie d'e-mail.
    Le problème que je rencontre est l'envoi d'e-mail avec autorisation.

    Vers un serveur SMTP de chez SFR, l'envoie fonctionne.

    Par contre, cela ne fonctionne pas vers un serveur SMTP de chez Alwaysdata.
    Cela provoque une erreur : "554 SMTP synchronization error".
    Comment modifier le script php pour ne plus avoir cette erreur ?

    Merci.
    Cordialement.
    Artemus24.
    @+

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 201
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 201
    Points : 8 426
    Points
    8 426
    Billets dans le blog
    17
    Par défaut
    Je ne connais pas le protocol SMTP.

    Je remarque que dans un premier temps tu envoies les commandes et que dans un second temps tu récupères les réponses du serveur.

    Vu le message d'erreur, peut-être que le serveur AlwaysData préférerait que tu lises ses réponses au fur et à mesure. Je testerais avec un Telnet avant de toucher au script PHP.

  3. #3
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 425
    Points : 19 246
    Points
    19 246
    Par défaut
    Salut Seb.

    Merci pour ta participation.

    Citation Envoyé par Seb.
    Je remarque que dans un premier temps tu envoies les commandes et que dans un second temps tu récupères les réponses du serveur.
    Tous les exemples que j'ai vus sont construits de cette façon.

    Citation Envoyé par Seb.
    Vu le message d'erreur, peut-être que le serveur AlwaysData préférerait que tu lises ses réponses au fur et à mesure.
    Et je procède comment ? Car j'ignore le nombre des réponses que je peux avoir.

    Citation Envoyé par Seb.
    Je testerais avec un Telnet avant de toucher au script PHP.
    Par Telnet ou par un socket, le fonctionnement est le même.

    Cordialement.
    Artemus24.
    @+

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 201
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 201
    Points : 8 426
    Points
    8 426
    Billets dans le blog
    17
    Par défaut
    Et je procède comment ? Car j'ignore le nombre des réponses que je peux avoir.
    Il faut lire sur ta socket, selon le protocole.

    Par Telnet ou par un socket, le fonctionnement est le même.
    La différence est que c'est interactif. Exécute les commandes SMTP via Telnet, ainsi tu verras en live précisément à quel niveau ça bloque.

  5. #5
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 425
    Points : 19 246
    Points
    19 246
    Par défaut
    Salut Seb.

    J'ai suivi ton conseil et j'ai installé TELNET.
    J'ai fait le test manuellement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    28
    29
    30
    31
    32
    33
    34
    35
    C:\> telnet smtp-xxxxxxxx.alwaysdata.net 587
    connexion à smtp-xxxxxxxx.alwaysdata.net ...
    220 smtpout1.paris1.alwaysdata.com ESMTP Exim 4.92 Sat, 19 Feb 2022 16:47:09 +0100
    EHLO xxxxxxxx
    250-smtpout1.paris1.alwaysdata.com Hello xxx.xxx.xxx.xxx.rev.sfr.net [xxx.xxx.xxx.xxx]
    250-SIZE 52428800
    250-8BITMIME
    250-PIPELINING
    250-AUTH PLAIN LOGIN
    250-STARTTLS
    250 HELP
    AUTH LOGIN
    334 VXNlcm5hbWU6
    xxxxxxx
    334 UGFzc3dvcmQ6
    xxxxxxx
    235 Authentication succeeded
    mail from:<xxxxxxxx@xxxxxxxx.fr>
    250 OK
    rcpt to:<xxxxxxxx@xxxxxxxx.fr>
    250 Accepted
    data
    354 Enter message, ending with "." on a line by itself
    subject: Hello !
    
    Test Envoi Message.
    .
    250 OK id=1nLS7U-0004Su-Ep
    quit
    221 smtpout1.paris1.alwaysdata.com closing connection
    
    
    Perte de la connexion à l’hôte.
    
    C:\>
    L'e-mail a bien été transféré dans ma boîte aux lettres.

    Je ne comprends pas la cause de cette erreur 554.

    Cordialement.
    Artemus24.
    @+

  6. #6
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 201
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 201
    Points : 8 426
    Points
    8 426
    Billets dans le blog
    17
    Par défaut
    Tu ne reproduis pas exactement le mail envoyé par PHP
    Tu peux aussi tester un copier/coller dans ton Telnet pour tout envoyer d'un coup sans lecture, comme le fait le script

  7. #7
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 425
    Points : 19 246
    Points
    19 246
    Par défaut
    Salut Seb.

    Oui car je ne sais pas pourquoi mais les deux lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MIME-VERSION: 1.0
    CONTENT-TYPE:TEXT/PLAIN;CHARSET=ISO-8859-1
    ne passe pas. Je les ai mis en commentaire dans mon script php.

    J'ai aussi supprimé les deux lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FROM: XXXXXXXX <XXXXXXXX@XXXXXXXX.fr>
    TO: XXXXXXXX <XXXXXXXX@XXXXXXXX.fr>
    J'ai toujours l'erreur 554.

    Bizarre car si je fais le test avec le serveur SMTP de chez SFR, je n'ai pas d'erreur.

    Je viens de faire le copier/coller dans Telnet et en effet, j'ai bien l'erreur 554 qui apparait.
    Comment résoudre cela ?

    Cordialement.
    Artemus24.
    @+

  8. #8
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 201
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 201
    Points : 8 426
    Points
    8 426
    Billets dans le blog
    17
    Par défaut
    Hum, dans quel cas ça passe sur Telnet et dans quel cas ça ne passe pas ? Il faut trouver la différence

    Aussi, dans le script PHP, remplace tes \n par des \r\n (la RFC utilise CRLF)

    Au pire tu créées un compte mail test et tu m'envoies les IDs par MP pour que je teste de mon côté

  9. #9
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 425
    Points : 19 246
    Points
    19 246
    Par défaut
    Salut Seb.

    Dans mon script, il y avait des petites erreurs qui provoquaient une augmentation du Spam Score.
    Je devais mettre un espace juste après les ":". Maintenant, le Spam Score est négatif.

    Citation Envoyé par Seb.
    Hum, dans quel cas ça passe sur Telnet et dans quel cas ça ne passe pas ? Il faut trouver la différence
    Quand je tape les commandes, les unes après les autres, il y a un temps d'attente après le dernier message reçu.
    Je ne vois que ça comme différence.

    J'ai mis un "usleep(500000)" (0.5 secondes) entre chaque envoie.
    Une fois ça fonctionne et la fois d'après, j'ai des erreurs car j'ai perdu la connexion.
    Ce n'est pas la solution.
    Sinon, le message envoyé est bien arrivé dans ma boîte aux lettres.

    Citation Envoyé par Seb.
    Aussi, dans le script PHP, remplace tes \n par des \r\n (la RFC utilise CRLF)
    J'ai remplacé partout, le "/n" par la variable $lfcr contenant la chaîne "\r\n".

    Citation Envoyé par Seb.
    Au pire tu créées un compte mail test et tu m'envoies les IDs par MP pour que je teste de mon côté
    Tu peux le faire avec ta messagerie. Tu es chez qui ?

    Toutes mes adresses e-mails passent par le même serveur SMTP de chez Alwaysdata.
    Et dans le nom du serveur SMTP, il y a mon identifiant. Je ne préfère pas le divulguer.

    Cordialement.
    Artemus24.
    @+

  10. #10
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 425
    Points : 19 246
    Points
    19 246
    Par défaut
    Salut à tous.

    Je suis arrivé à faire fonctionner mon script Php. Voici le script php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    <!doctype html>
    <html lang="fr">
    <head>
    <meta charset="ISO-8859-1" />
    <title>Envoie d'un e-mail avec socket !</title>
     
    <link rel="stylesheet" type="text/css" href="Styles.css" />
    </head>
     
    <body>
    <?php
    /* ======================= */
    /* Paramétrage des e-mails */
    /* ======================= */
     
    $serveur  = "???";
    $nom1     = "???";
    $email1   = "???";
    $password = "???";
    $nb       = 7;
     
    $client   = gethostname();
    $port     = 587;
     
    $nom2     = "???";
    $email2   = "???";
     
    $sujet    = "Test 1 !";
    $message  = "Test de l'envoi d'un message simple !\n\nCordialement.\nArtemus24\n@+";
    ?>
     
    <table>
    	<tr><td>Client       </td><td><?php echo ': '.$client;                ?></td></tr>
    	<tr><td>Serveur      </td><td><?php echo ': '.$serveur;               ?></td></tr>
    	<tr><td>Port         </td><td><?php echo ': '.$port;                  ?></td></tr>
    	<tr><td>Expéditeur   </td><td><?php echo ': '.$nom1.' ('.$email1.')'; ?></td></tr>
    	<tr><td>Destinataire </td><td><?php echo ': '.$nom2.' ('.$email2.')'; ?></td></tr>
    	<tr><td>Sujet        </td><td><?php echo ': '.$sujet;                 ?></td></tr>
    </table>
     
    <?php
    /* ----------------------------- */
    /* Liste des commandes à envoyer */
    /* ----------------------------- */
     
    $list = array(
    		array($nb, "EHLO $client"),
    		array(1,   "AUTH LOGIN"),
    		array(1,   base64_encode($email1)),
    		array(1,   base64_encode($password)),
    		array(1,   "MAIL FROM: <$email1>"),
    		array(1,   "RCPT TO: <$email2>"),
    		array(1,   "DATA"),
    		array(0,   "Mime-Version: 1.0"),
    		array(0,   "Content-Type: Text/Plain; Charset=ISO-8859-1"),
    		array(0,   "Content-Transfer-Encoding: 8bit"),
    		array(0,   "X-Mailer: Php ".phpversion()),
    		array(0,   "Content-Language: fr"),
    		array(0,   "Message-Id: <".sha1(''.(idate('U')-1000000000))."@xxxxxxxx.fr>"),
    		array(0,   "FROM: $nom1 <$email1>"),
    		array(0,   "TO: $nom2 <$email2>"),
    		array(0,   "SUBJECT: $sujet"),
    		array(0,   ""),
    		array(0,   "$message"),
    		array(1,   "."),
    		array(1,   "QUIT")
    			);
     
    /* --------------- */
    /* Fonction Lecure */
    /* --------------- */
     
    function lect($socket)
    {
    	$result = fgets($socket,128);
    	echo $result;
    	return substr($result,0,3);
    }
     
    /* -------------- */
    /* Test du socket */
    /* -------------- */
     
    $errno   = "";
    $errmsg  = "";
    $socket  = fsockopen($serveur, $port, $errno, $errmsg, 1);
     
    if (!$socket)
    {
    ?>
     
    	<br />
    	<table>
    		<tr><td>Connexion impossible</td><td><?php echo ': '.$serveur.' !';         ?></td></tr>
    		<tr><td>numero d'erreur     </td><td><?php echo ': '.$errno;                ?></td></tr>
    		<tr><td>Message d'erreur    </td><td><?php echo ': '.htmlentities($errmsg); ?></td></tr>
    	</table>
     
    <?php
    }
    else
    {
    ?>
     
    	<br />
    	<pre>
     
    <?php
    	stream_set_blocking($socket, true);
    	stream_set_timeout($socket, 1);
     
    	echo "Connecting To ".$serveur."\n";
     
    	if (lect($socket) == "220");
    	{
    		foreach ($list as $cmd)
    		{
    			fputs($socket,$cmd[1]."\r\n");
    			echo "<spam>".htmlentities($cmd[1])."</spam>\n";
     
    			for ($i=0; $i<$cmd[0]; $i++)
    				lect($socket);
    		}
    	}
     
    	fclose($socket);
    }
    ?>
     
    	</pre>
    </body>
    </html>
    Quel est le problème que j'ai rencontré, précédemment ?
    L'erreur 554 est due au fait que dans le socket, il y a des lignes non lues.

    Comment ai-je résolu ce problème ?
    Après l'envoi d'une commande dans le socket, je dois lire un nombre défini de lignes.
    C'est pourquoi dans le tableau "$list", la première colonne désigne ce nombre de lignes à lire.

    Pourquoi cette solution ne me plait pas ?
    L'inconvénient de cette solution est de fixer un nombre fixe de lignes à lire.
    Dans mon exemple, j'utilise la variable "$nb" pour définir un nombre variable de lignes à lire, qui dépend du serveur SMTP utilisé.
    Pour Alwaysdata, ce nombre "$nb" est de 7, et pour SFR, 9.

    Comment puis-je lire les lignes envoyées par le serveur SMTP ?
    Si quelqu'un maitrisant les socket, ainsi que le protocole SMTP, je suis preneur.

    Cordialement.
    Artemus24.
    @+

  11. #11
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 333
    Points : 15 677
    Points
    15 677
    Par défaut
    pour la lecture, vous ne pouvez pas utiliser une boucle "while ((!feof($socket) ..." pour lire toutes les lignes sans définir le nombre de lignes ?
    entre Alwaysdata et SFR, quelles sont les différences entre les lignes que vous lisez après le EHLO ?

  12. #12
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 425
    Points : 19 246
    Points
    19 246
    Par défaut
    Salut mathieu.

    Citation Envoyé par mathieu
    pour la lecture, vous ne pouvez pas utiliser une boucle "while ((!feof($socket) ..." pour lire toutes les lignes sans définir le nombre de lignes ?
    C'est la première idée qui m'est venu à l'esprit dans ma fonction "lect()" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function lect($socket)
    {
    	while (!feof($socket))
    	{
    		$result = fgets($socket,128);
    		echo $result;
    	}
     
    	return substr($result,0,3);
    }
    Au premier appel de cette fonction, en effet, je lis bien toutes les lignes reçues.
    Mais au deuxième appel, il ne lit rien car la fonction "feof()" est positionnée à finde fichier.
    J'ai cherché une fonction du genre reouverture du socket, ou repositionner le flag "feof()", mais je n'ai rien trouvé.

    La solution, qui n'est pas très belle, consiste à lire un nombre de lignes fixe après chaque envoie.

    Si vous avez une idée comment repositionner ce flag de fin de fichier, je suis preneur.

    Citation Envoyé par mathieu
    entre Alwaysdata et SFR, quelles sont les différences entre les lignes que vous lisez après le EHLO ?
    Le mieux est de vous donner ces lignes. Voici ce que j'obtiens pour Alwaysdata :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    EHLO xxxx
    250-xxxxxxxx.paris1.alwaysdata.com Hello xxx.xxx.xxx.xxx.rev.sfr.net [xxx.xxx.xxx.xxx]
    250-SIZE 52428800
    250-8BITMIME
    250-PIPELINING
    250-AUTH PLAIN LOGIN
    250-STARTTLS
    250 HELP
    Et voici ce que j'obtiens pour SFR :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    EHLO Orion
    250-xxxxxxxx.sfr.fr
    250-PIPELINING
    250-SIZE 20971520
    250-ETRN
    250-STARTTLS
    250-AUTH LOGIN PLAIN
    250-AUTH=LOGIN PLAIN
    250-ENHANCEDSTATUSCODES
    250 8BITMIME
    Désolé, mais j'ai masqué par des "x" ce qui est confidentiel.

    Cordialement.
    Artemus24.
    @+

  13. #13
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 333
    Points : 15 677
    Points
    15 677
    Par défaut
    dans les réponses, vous voyez que les 1res lignes commencent par "250-" mais la dernière ligne commence par "250 ". c'est comme ça qu'est définie une réponse sur plusieurs lignes dans smtp :
    https://www.rfc-editor.org/rfc/rfc5321#page-50

    vous pouvez éventuellement utiliser cette information dans la fonction "lecture" puisqu'en théorie, n'importe quelle réponse smtp peut être sur plusieurs lignes.

  14. #14
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 425
    Points : 19 246
    Points
    19 246
    Par défaut
    Salut mathieu.

    La lecture de la documentation, surtout le RFC me prend la tête car je ne sais jamais où chercher ma réponse.
    J'ai regardé les exemples donnés sur le net, et je n'ai rien vu concernant la lecture après l'envoi d'une commande.

    Citation Envoyé par mathieu
    dans les réponses, vous voyez que les 1res lignes commencent par "250-" mais la dernière ligne commence par "250 ".
    Merci pour votre réponse car je n'avais pas vu ce détail, entre autre le tiret pour indiquer qu'il y a une suite et l'absence de ce tiret pour marquer la fin des lectures.
    Sauf que, tout ce qui se trouve après un "Data" non compris et avant un "." non compris aussi, je n'ai rien à lire en retour.

    Je vais quand même laisser ma première colonne dans mon tableau à deux dimension.
    Je vais mettre un "0" pour dire qu'il n'y a rien à lire, et un "1" dans le cas contraire.
    Et je vais modifier ma fonction "Lect()" pour introduire ce nouveau test.

    Je viens de faire les modification et le test a fonctionné.

    Mathieu !

    Cordialement.
    Artemus24.
    @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Envoi de mail avec authentification
    Par troumar dans le forum Réseau
    Réponses: 1
    Dernier message: 05/02/2014, 12h55
  2. Envoi simple de mail avec authentification
    Par fear-69 dans le forum Java ME
    Réponses: 1
    Dernier message: 02/02/2010, 15h14
  3. [javaMail] envoi mail avec authentification
    Par totofe dans le forum API standards et tierces
    Réponses: 12
    Dernier message: 30/09/2009, 14h24
  4. envoi de mail avec authentification
    Par jfb53 dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/08/2006, 12h23
  5. [TIdSMTP] Envoi d'un mail avec authentification ?
    Par BACUS dans le forum C++Builder
    Réponses: 4
    Dernier message: 16/06/2004, 16h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo