[RESOLU] probleme php mailer

Eléphanteau du PHP | 19 Messages

04 juin 2011, 21:26

Bonjour a tous

En quelques mots voici mon problème

J'utilise php pour envoyé un mail dans un script mais je suis hébergé chez OVH et mon mail arrive aléatoirement 5 minutes a 3h00 après.

Pour être sur de recevoir mon mail dans les temps je souhaite utilisé la class php mailer que j'ai télécharger et mise sur mon serveur

Malheureusement je ne sais pas par ou commencer pour la transformation de mon script

Pouvez vous m'aider

j'ai l'erreur : Mailer Error: Language string failed to load: provide_address
<?php
require_once('phpmailer/class.phpmailer.php');

$mail = new PHPMailer();
 
$mail->IsSMTP(); // telling the class to use SMTP
$mail->Host          = ("smtp.xxx.fr");
$mail->SMTPAuth      = true;                  // enable SMTP authentication
$mail->SMTPKeepAlive = true;                  // SMTP connection will not close after each email sent
$mail->Host          = ("[email protected]"); // sets the SMTP server
$mail->Port          = 587;                    // set the SMTP port for the GMAIL server
$mail->Username      = ("[email protected]"); // SMTP account username
$mail->Password      = ("xxx");        // SMTP account password


$user = "xxx";
$password = "xxx";
$database = "xxx";
$host = "xxx";

$connect = mysql_connect($host, $user, $password) or die(mysql_error()); 
    mysql_select_db($database);
	
$forcli = $Cookcli;
$result = mysql_query ("select * from client where codecli = '$forcli'");
$row = mysql_fetch_object($result);

echo "<FONT SIZE=+3>";
echo "<DIV ALIGN=center><FONT COLOR=\"#0000CC\"><B>$forcli           $row->nom</B></FONT></DIV>";
echo "</FONT>";
echo "<HR SIZE=3 NOSHADE>";

$forcli = $Cookcli;
$fornom = $Cooknom;
if ($forcli < 1) 
   {echo "<B><FONT SIZE=+1>Votre session est terminée, vous devez vous identifier à nouveau...</FONT></B>";}

$fordate = gmdate("Y-m-d");
$nb = 1;
if ($forcli < 1) {$nb = 0;}

 $result = mysql_query("select * from bordereau left join dossier on dossier.numdos = bordereau.numdos where  bordereau.numbor = '$numbor' and bordereau.etat = 1 
	order by bordereau.numbor, bordereau.numdos ");

$nb2 = 0;
if ($result) {$nb2 = mysql_num_rows($result);}
if ($nb2 == 0) {$nb = 0;}
if ($nb > 0)
   {while ($row = mysql_fetch_object($result))
	  {
	  $si = " numbor = $row->numbor and numdos = $row->numdos ";
	  $majbor = mysql_query
	  		  ("update bordereau set etat = 2 where ".$si);
	  $mesbor .= "$forcli $row->typetrans $fornom;$row->numdos;";	  
	  $mesbor .= "$row->reference;$row->nom;$row->adresse1;$row->adresse2;";
	  $mesbor .= "$row->codepostal;$row->ville;$row->codepays;";
	  $mesbor .= "$row->nbcolis;$row->poids;$row->volume;$row->metreplancher;";
	  $mesbor .= "$row->portdu;$row->cr;$row->crdevise;";
	  $mesbor .= "$row->cr2;$row->crdev2;";
	  $mesbor .= "$row->vd;$row->vddevise;$row->commentaire;";
	  $mesbor .= "$row->express;$row->hayon;$row->teldesti;";
	  $mesbor .= "$row->nbpalettes;$row->obspalette;\n";
	  }
	;}
$mesbor = strtoupper($mesbor);
$ligne1 = "<br>";
$ligne2 = "<br>le bordereau numéro <B>$numbor</B> est transmis";
if ($nb > 0) {echo "$ligne1 $ligne2";
 $mail->  $recip = ("[email protected]");
 $mail->  $reply = ("[email protected]");
 $mail->  $objet = ("Bordereau de chargement N $numbor");
 $mail->  $message = ("$mesbor");
 $mail->  $headers .= ("From: $fornom $forcli <[email protected]>\n");
 $mail->  $headers .= ("X-priority: 1\n");
 $mail->  $headers .= ("Content-type: text/plain; charset=iso-8859-1\n");
 $mail->  $headers .= ("Content-Transfert-Encoding: 7bit\n");
 $mail->  $nomfich = ("BO$numbor.txt");
 $mail->  $headers .= ("Content-Disposition: attachment; filename=$nomfich\n");
  
   }

if(!$mail->Send($recip, $objet, $message, $headers)) {
echo "Mailer Error: " . $mail->ErrorInfo;
}else {
echo "Message sent!";
}

if ($nb >0) 
   {echo "<BR><BR><DIV ALIGN=\"center\">
   		 <A HREF=\"borimp.php? numbor=$numbor\" TARGET=_blank>Imprimer le bordereau</A>
   		 &nbsp;&nbsp;&nbsp;
		 <A HREF=\"bordefinitif.php\" TARGET=_self>Retour</A>
   </DIV>" ;}   
?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 juin 2011, 11:49

Je ne connais pas php mailer, mais je suppose qu'ils ont une doc ou un forum pour ce genre de problème... cependant, je ne pense pas que la façon dont ton mail est envoyé (que ce soit pas ton script qui va faire appel à la fonction mail d'ovh, ou par php mailer qui fera de même) influe sur le temps d'expédition et de relais des mails.... :-k
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

05 juin 2011, 12:14

salut,


je ne connais pas particulièrement cette classe mais en regardant les exemples de leurs tuto je vois qu'il manque l'adresse mail du destinataire (placé avec $mail->AddAddress( '[email protected]'); )

qu'est ce que ce bout de code est sencé faire ?
<?php
$mail->  $recip = ("[email protected]");
 $mail->  $reply = ("[email protected]");
 $mail->  $objet = ("Bordereau de chargement N $numbor");
 $mail->  $message = ("$mesbor");
 $mail->  $headers .= ("From: $fornom $forcli <[email protected]>\n");
 $mail->  $headers .= ("X-priority: 1\n");
 $mail->  $headers .= ("Content-type: text/plain; charset=iso-8859-1\n");
 $mail->  $headers .= ("Content-Transfert-Encoding: 7bit\n");
 $mail->  $nomfich = ("BO$numbor.txt");
 $mail->  $headers .= ("Content-Disposition: attachment; filename=$nomfich\n");
?>
connais tu la notion de variable dynamique ? parce que la c'est ce que tu fait et ça doit pas être terrible :/

tu n'a pas besoin d’utilisé de () autour d'une chaine de caractère ;)

Des exemples => http://phpmailer.worxware.com/index.php?pg=tutorial

je pense que si tu vire les $ ça ira mieux

la classe gère elle même l’entête, donc pas besoin de headers.

la méthode Send ne prend pas de pramètre.

A tu lu de la doc ?

ton code devrais ressembler a ceci
<?php
require_once('phpmailer/class.phpmailer.php');

$mail = new PHPMailer();
 
$mail->IsSMTP(); // telling the class to use SMTP
try {
	$mail->Host          = ("smtp.xxx.fr");
	$mail->SMTPAuth      = true;                  // enable SMTP authentication
	$mail->SMTPKeepAlive = true;                  // SMTP connection will not close after each email sent
	$mail->Host          = ("[email protected]"); // sets the SMTP server
	$mail->Port          = 587;                    // set the SMTP port for the GMAIL server
	$mail->Username      = ("[email protected]"); // SMTP account username
$mail->Password      = ("xxx");        // SMTP account password
} catch (phpmailerException $e) {
	echo $e->errorMessage(); //Pretty error messages from PHPMailer
} catch (Exception $e) {
	echo $e->getMessage(); //Boring error messages from anything else!
}
$user = "xxx";
$password = "xxx";
$database = "xxx";
$host = "xxx";

$connect = mysql_connect($host, $user, $password) or die(mysql_error());
    mysql_select_db($database);
       
$forcli = $Cookcli;
$result = mysql_query ("select * from client where codecli = '$forcli'");
$row = mysql_fetch_object($result);

echo "<FONT SIZE=+3>";
echo "<DIV ALIGN=center><FONT COLOR=\"#0000CC\"><B>$forcli           $row->nom</B></FONT></DIV>";
echo "</FONT>";
echo "<HR SIZE=3 NOSHADE>";

$forcli = $Cookcli;
$fornom = $Cooknom;
if ($forcli < 1)
   {echo "<B><FONT SIZE=+1>Votre session est terminée, vous devez vous identifier à nouveau...</FONT></B>";}

$fordate = gmdate("Y-m-d");
$nb = 1;
if ($forcli < 1) {$nb = 0;}

 $result = mysql_query("select * from bordereau left join dossier on dossier.numdos = bordereau.numdos where  bordereau.numbor = '$numbor' and bordereau.etat = 1
        order by bordereau.numbor, bordereau.numdos ");

$nb2 = 0;
if ($result) {$nb2 = mysql_num_rows($result);}
if ($nb2 == 0) {$nb = 0;}
if ($nb > 0)
   {while ($row = mysql_fetch_object($result))
          {
          $si = " numbor = $row->numbor and numdos = $row->numdos ";
          $majbor = mysql_query
                          ("update bordereau set etat = 2 where ".$si);
          $mesbor .= "$forcli $row->typetrans $fornom;$row->numdos;";    
          $mesbor .= "$row->reference;$row->nom;$row->adresse1;$row->adresse2;";
          $mesbor .= "$row->codepostal;$row->ville;$row->codepays;";
          $mesbor .= "$row->nbcolis;$row->poids;$row->volume;$row->metreplancher;";
          $mesbor .= "$row->portdu;$row->cr;$row->crdevise;";
          $mesbor .= "$row->cr2;$row->crdev2;";
          $mesbor .= "$row->vd;$row->vddevise;$row->commentaire;";
          $mesbor .= "$row->express;$row->hayon;$row->teldesti;";
          $mesbor .= "$row->nbpalettes;$row->obspalette;\n";
          }
        ;}
$mesbor = strtoupper($mesbor);
$ligne1 = "<br>";
$ligne2 = "<br>le bordereau numéro <B>$numbor</B> est transmis";
if ($nb > 0) {
	echo "$ligne1 $ligne2";
	try {
		$mail->  SetFrom ("[email protected]");
		$mail->  AddReplyTo ("[email protected]");
		$mail->  Subject ="Bordereau de chargement N $numbor");
		$mail->  message = ("$mesbor");
		$mail->  AddAdress('[email protected]');
		$mail->  AltBody = $mesbor;
		$mail->AddAttachment("BO$numbor.txt"); 
		$mail->Send();
	} catch (phpmailerException $e) {
		echo $e->errorMessage(); //Pretty error messages from PHPMailer
	} catch (Exception $e) {
		echo $e->getMessage(); //Boring error messages from anything else!
}
}

if ($nb >0)
   {echo "<BR><BR><DIV ALIGN=\"center\">
                 <A HREF=\"borimp.php? numbor=$numbor\" TARGET=_blank>Imprimer le bordereau</A>
                 &nbsp;&nbsp;&nbsp;
                 <A HREF=\"bordefinitif.php\" TARGET=_self>Retour</A>
   </DIV>" ;}  
?>
@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 19 Messages

08 juin 2011, 23:07

Bonjour a tous


j'ai l'erreur Call to undefined method PHPMailer::SetFrom() in /homez.xxx/xxx/www/borvalidbd.php on line 87

avec ce code
$mail-> SetFrom ("[email protected]");

plus d'erreur avec ce code

$mail-> SetFrom = ("[email protected]");

Mais je ne reçoit pas de mail

Eléphant du PHP | 80 Messages

09 juin 2011, 09:17

Et pourquoi tu n'utilises pas la fonction Mail ?
En informatique, lorsqu'il y a un bug, le souci est toujours entre la chaise et le clavier.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

09 juin 2011, 11:10

@Ez3kiel : plus simple, pas besoin de gérer l'entete ou quoi que se soit la classe le fait pour toi :)
D'ailleurs la fonction mail de php ne permet pas d'utiliser serveur smtp quelconque. Il y a une seule conf dans le php.ini et c'est pareil pour 51200000 site héberger sur le serveur ;)
Ca permet aussi de lever les restrictions indiqué dans le. Premier message

Pour le setFrom c'est possible je nome souvient plus si c'est une methode ou une priorité de la classe ;)

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 80 Messages

09 juin 2011, 11:25

[HS]D'accord, je connaissais pas PHP Mailer, merci.[/HS] :)
En informatique, lorsqu'il y a un bug, le souci est toujours entre la chaise et le clavier.