[Problème envoi d'email via PHP] Fonction mail();

Healiste Messages postés 11 Date d'inscription jeudi 31 mars 2011 Statut Membre Dernière intervention 9 mai 2013 - 14 juin 2012 à 11:18
Healiste Messages postés 11 Date d'inscription jeudi 31 mars 2011 Statut Membre Dernière intervention 9 mai 2013 - 14 juin 2012 à 15:21
Bonjour, voilà, j'ai un soucis. Je dois effectuer une newsletter pour les médiathèques de communes.

<!DOCTYPE HTML>
<html>
<head>
<title>Envoie d'une newsletter</title>
<meta http-equiv= "Content-Type" content="text/html;charset=iso-8859-1" />
</head>

<section>
<form method="post" id="form1" action="envoi.php" enctype="multipart/form-data">



 <label for="media1">livres/audios/DVD</label>
 <label for="ce1">conf/expo</label>



<textarea id="premierCorps" name="corps1" onfocus="if (value=='Corps du texte') {value=''}" onblur="if (value == '') {value = 'Corps du texte'}" rows="30" cols="120">Corps du texte</textarea>






<!-- Second bulletin si y en a -->



 <label for="null2">Aucun</label>
 <label for="media2">livres/audios/DVD</label>
 <label for="ce2">conf/expo</label>




<textarea id="deuxiemeCorps" name="corps2" onfocus="if (value=='Corps du texte') {value=''}" onblur="if (value == '') {value = 'Corps du texte'}" rows="30" cols="120">Corps du texte</textarea>





<!-- Troisième bulletin si y en a -->



 <label for="null3">Aucun</label>
 <label for="media3">livres/audios/DVD</label>
 <label for="ce3">conf/expo</label>




<textarea id="troisiemeCorps" name="corps3" onfocus="if (value=='Corps du texte') {value=''}" onblur="if (value == '') {value = 'Corps du texte'}" rows="30" cols="120">Corps du texte</textarea>










 previsualisation 



</form>
</section>

</html>


Et voici le code PHP:
<?php

/* Connexion à la base de donnée ! */
$cnx  = odbc_connect("basededonnee", "", "");

/* Test de la connexion 
if ($cnx)
echo 'Connexion valide !
'; */

/* Création de la requête pour avoir le jeu des mails */
$requete "SELECT mail FROM adherent WHERE newsletter true";
$jeu = odbc_exec($cnx,$requete);

/* Initialisation des variables */
$choix1 = $_POST["choix1"];
$choix2 = $_POST["choix2"];
$choix3 = $_POST["choix3"];

$sizeFirst = '2097152'; // Correspond à 2 Mo !
$sizeAnother = '900000'; // Correspond à 900Kb!

if ($_FILES['image1'] && $_FILES['image1']['size'] < $sizeFirst) {
$image1 = ''; // Chemin à changer !
$corps1 = $image1.$_POST['corps1'];
} else
$corps1 = $_POST["corps1"];

if ($_FILES['image2'] && $_FILES['image2']['size'] < $sizeAnother) {
$image2 = ''; // Chemin à changer !
$corps2 = $image2.$_POST['corps2'];
} else
$corps2 = $_POST["corps2"];

if ($_FILES['image3'] && $_FILES['image3']['size'] < $sizeAnother) {
$image3 = ''; // Chemin à changer !
$corps3 = $image3.$_POST['corps3'];
} else
$corps1 = $_POST["corps1"];

$boundary = "-----=".md5(rand());
$compteur = '0';


/* Prends l'email dans la table */
while (odbc_fetch_into($jeu,$champ)) {
$email = $champ[0];


/* Filtrage au niveau des adresses mail */
if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $email))
$passage_ligne = "\r\n";
else
$passage_ligne = "\n";


/* Contenu du mail */
if ($choix1 == "media"){
/* Bannière à faire */
$banniere = '

'; // Nom à revoir !
} else {
$banniere = '

'; // Nom à revoir !
}


/* Entête du mail */
$titre = '[Lettre d\'information] Réseau Médiathèques Pays de La Gacilly';

/* Police du message */
$contenu = '<!DOCTYPE html>
<head><meta /></head>';


/* Message d'entrée */
$bonjour = 'Réseau des Médiathèques du Pays de La Gacilly

';


/* Formule de politesse à améliorer */
$form_polit = '

Pour ce désinscrire, [deleteregister.php?mail='.$email.' cliquez ici]
Au revoir

';


/* On fait passer notre texte à la moulinette des Regex */
$corps1 = preg_replace('#\[b\](.+)\/b\#isU', ' $1 ', $corps1);
$corps1  = preg_replace('#\[i\](.+)\/i\#isU', '$1', $corps1);
$corps1 =  preg_replace('#\[color=(red|green|blue|yellow|purple|olive|aqua|maroon)\](.+)\/color\#isU', '$2', $corps1);
$corps1 = preg_replace('#http://[a-z0-9._/-]+#i', '[$0 $0]', $corps1);


$contenu .= $bonjour;
$contenu .= $banniere;
$contenu .= '
'.$corps1.'
';


/* S'il y a un second texte */
if($corps2 != '' || $corps2 != 'Corps du texte') {
$contenu .= '

';


if ($choix2 == "media") {
/* Bannière à faire */
$banniere = '

';
} elseif ($choix2 == "confexpo") {
$banniere = '

';
} else {
$banniere = '';
}


if ($banniere != '')
$contenu.=$banniere;

/* On fait passer notre second texte à la moulinette des Regex */
$corps2 = preg_replace('#\[b\](.+)\/b\#isU', ' $1 ', $corps2);
$corps2  = preg_replace('#\[i\](.+)\/i\#isU', '$1', $corps2);
$corps2 =  preg_replace('#\[color=(red|green|blue|yellow|purple|olive|aqua|maroon)\](.+)\/color\#isU', '$2', $corps2);
$corps2 = preg_replace('#http://[a-z0-9._/-]+#i', '[$0 $0]', $corps2);

if ($corps2 != 'Corps du texte')
$contenu .= '
'.$corps2.'
';

if ($corps3 != '' || $corps3 != 'Corps du texte') {
$contenu .= '

';

if ($choix3 == "media") {
$banniere = '

';
} elseif($choix3 == "confexpo") {
$banniere = '

';
} else {
$banniere = '';
}


if ($banniere != '')
$contenu .= $banniere;

/* On fait passer le troisième et dernier texte au Regex */
$corps3 = preg_replace('#\[b\](.+)\/b\#isU', ' $1 ', $corps3);
$corps3  = preg_replace('#\[i\](.+)\/i\#isU', '$1', $corps3);
$corps3 = preg_replace('#\[color=(red|green|blue|yellow|purple|olive|aqua|maroon)\](.+)\/color\#isU', '$2', $corps3);
$corps3 = preg_replace('#http://[a-z0-9._/-]+#i', '[$0 $0]', $corps3);


if ($corps3 != 'Corps du texte')
$contenu .= '
'.$corps3.'
';
}
}

$contenu .= $form_polit;
$contenu .= '</html>';

$TOUT = $titre.'
'.$contenu.'
';
/* Envoie du mail */
if(mail($email,$titre,$contenu)) {
echo 'Message envoyé !
';
$compteur++;
}

}

echo 'Nombre de mail envoyé: '.$compteur.'
';
echo $TOUT;

odbc_close($cnx);
?>


Lorsque j'exécute le formulaire, il me mette un message d'erreur:

Warning: mail() [function.mail]: SMTP server response: 530 5.7.0 Must issue a STARTTLS command first. ez4sm17585059wid.3 in C:\wamp\www\Mediatheques\envoi.php on line 151


J'aimerais savoir si quelqu'un peut m'aider. Dois-je configurer quelque chose ?

P.S. Mon fichier PHP.ini est configuré comme tel:

[mail function]
; For Win32 only.
SMTP = smtp.gmail.com
smtp_port = 25

; For Win32 only.
sendmail_from = monadressemail@gmail.com

8 réponses

cs_L0ci Messages postés 224 Date d'inscription vendredi 26 novembre 2010 Statut Membre Dernière intervention 11 juin 2013 7
14 juin 2012 à 12:05
Bonjour,

il semble que pour le smtp de gmail il faut utiliser les ports 465 ou 587 (support google ici)
0
Healiste Messages postés 11 Date d'inscription jeudi 31 mars 2011 Statut Membre Dernière intervention 9 mai 2013
14 juin 2012 à 14:38
Bonjour L0ci,

Je te remercie pour ce lien, c'est vrai que sans, je ne serais sûrement pas aller plus loin. Malheureusement, même après avoir effectuer le changement de port, je me retrouve toujours dans la même impasse, le même message d'erreur.

J'aimerais en même temps en profiter pour préciser que je n'ai rien fait de plus. Je suis un peu perdu par rapport à cette fonction qu'est la fonction "mail()" de PHP.

Par exemple, je me pose la question: Comment ne pas faire croire qu'on est un autre compte, étant donné qu'à aucun moment, je n'ai entré le mot de passe de mon adresse de messagerie où que ce soit sur la page PHP.

J'ai vraiment besoin d'aide, j'espère avoir des réponses ! Sur ce, je remercie ce qui m'aideront en avance !

Sur ce, bonne journée à tous (Vive la pluie -_-)
0
cs_L0ci Messages postés 224 Date d'inscription vendredi 26 novembre 2010 Statut Membre Dernière intervention 11 juin 2013 7
14 juin 2012 à 14:44
Bonjour,

alors le probleme vient surement de la . essaye en rajoutant ceci dans ton code php avant la fonction mail
ini_set("smtp_user", 'adresse gmail');
ini_set("smtp_pass", 'mot de passe');

ou dans ton fichier php.ini:
smtp_user = adresse gmail
smtp_pass = mot de passe
0
Lyle56 Messages postés 240 Date d'inscription jeudi 1 mai 2008 Statut Membre Dernière intervention 19 juillet 2012 2
14 juin 2012 à 14:52
Bonjour,

Comme le dit L0ci, il faut utiliser un port spécifique.
Mais aussi démarré une transaction sécurisé (TLS). D’ailleurs c'est exactement ce que tu dit l'erreur.

Utilise plutôt phpMailer et une initialisation qui ressemble à celle ci

$mail->SMTPSecure = "ssl";  
$mail->Host='smtp.gmail.com';  
$mail->Port='465';   
$mail->Username   = 'you@gmail.com' // SMTP account username  
$mail->Password   = 'your gmail password';  
$mail->SMTPKeepAlive = true;  
$mail->Mailer = "smtp"; 
$mail->IsSMTP(); // telling the class to use SMTP  
$mail->SMTPAuth   = true;                  // enable SMTP authentication  
$mail->CharSet = 'utf-8';  
$mail->SMTPDebug  = 0; 



Sans maitrise, la puissance n'est rien
Il ne faut pas vendre la peau de l'ours, non il ne faut pas.
0

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

Posez votre question
Healiste Messages postés 11 Date d'inscription jeudi 31 mars 2011 Statut Membre Dernière intervention 9 mai 2013
14 juin 2012 à 15:06
J'ai fait les changements que tu m'as dis ! Y a une bonne (bonne ?) et mauvaise nouvelle !

La bonne, c'est que j'ai plus le message d'erreur !

La mauvaise, c'est que ça charge depuis 10 minutes dans le vide je crois :/
0
Lyle56 Messages postés 240 Date d'inscription jeudi 1 mai 2008 Statut Membre Dernière intervention 19 juillet 2012 2
14 juin 2012 à 15:11
Re-Bonjour,

Alors, soit tu as une boucle qui merde quelque part, soit tu as beaucoup de mail à envoyé et évidement cela prend un peut de temps...

Tu est parti pour tester ça sur ta base finale ou tu as créer une base de test avec 2/3 mails ??

Sans maitrise, la puissance n'est rien
Il ne faut pas vendre la peau de l'ours, non il ne faut pas.
0
cs_L0ci Messages postés 224 Date d'inscription vendredi 26 novembre 2010 Statut Membre Dernière intervention 11 juin 2013 7
14 juin 2012 à 15:14
Re,

je conseillerai d'essayer d'envoyer un seul mail très simple pour commencer, histoire de voir si la configuration est bonne.
0
Healiste Messages postés 11 Date d'inscription jeudi 31 mars 2011 Statut Membre Dernière intervention 9 mai 2013
14 juin 2012 à 15:21
Lyle56,

Je vais suivre ce que tu m'as dit mais je vois pas trop les manip à effectuer, si tu pouvais m'en dire plus sur ça s'il te plait ? :S

L0ci,

Disons que j'essaye avec une seule adresse, la mienne (M'envoyer un mail à moi-même).
0
Rejoignez-nous