Je suis tout nouveau ici, et tout nouveau dans le PHP aussi. Je m'y plonge par nécessité : pour mettre en place une newsletter.
J'ai découvert le script Mynewsletter 1.0a que j'ai trouvé très sympa : simple d'emploi et d'installation et sans base de donnée.
Quelques soucis cependant.
Le premier était que l'adresse d'expéditeur dans les emails envoyés était celle du serveur mail ; pas la mienne.
J'ai tout de même pu trouver comment corriger celà.
Il suffisait d'indiquer "3" entetemails :
Code : Tout sélectionner
$entetemail = 'From: "nom" <[email protected]>'."\n";
$entetemail .='Content-Type: text/html; charset="iso-8859-1"'."\n";
$entetemail .='Content-Transfer-Encoding: 8bit';
Certains utilisateurs ont rapporté des problèmes de limite d'adresses. Je n'ai pas rencontré ce souci
chez moi (OVH PLAN90) : j'ai pu inscrire plus de 200 adresses sans qu'aucune ne saute.
Par contre, l'upload de fichiers txt, html ou htm ne marche pas du tout pour moi. Ce script de newsletter permet en effet deux méthodes d'envoi de newsletters :
- soit envoyer une newsletter au format htm, html ou txt déjà présente sur le serveur dans un dossier donné,
- soit uploader une newsletter depuis son ordi.
La première méthode marche mais pas la seconde.
J'obtiens dans le navigateur le message suivant :
Warning: fopen(monfichierauploader.txt) [function.fopen]: failed to open stream: No such file or directory in /mnt/157/sdb/e/f/mondomaine/temp/admin/admin.php on line 128
Warning: feof(): supplied argument is not a valid stream resource in /mnt/157/sdb/e/f/mondomaine/temp/admin/admin.php on line 129
Firefox plante même en beauté.
J'ai pensé que ça pouvait provenir d'une interdiction d'écriture dans le dossier où doit être copié le
fichier uploadé (le dossier admin je présume). Avec Filezilla, j'ai donc fait un clic-droit sur le dossier
en question, ouvert le panneau de modification d'attributs du fichier, et coché la case Ecrire des
permissions publiques (code 705). Mais avec ce code, le fichier admin.php refuse de s'exécuter.
Quelqu'un aurait-il une idée ?
Pour info, je copie ci-dessous la portion du fichier admin.php qui permet l'envoi des emails et qui
correspond au message d'erreur donné par Firefox.
Code : Tout sélectionner
//Interface ajout lettre à partir du serveur
if($menu == "Envoyer une lettre(serveur)")
{
echo("<div align='center'><p><font color='#AE0000'><font size='4'>ENVOYER UNE LETTRE</font>
</font></p><form method='post' action='admin.php'><p>Sujet : <br><input type='text'
name='sujet'><br>");
echo("<br>Fichier : <br><input type='file' name='file' enctype='multipart/form-data'><br><br>
<input type='submit' name='submit' value='Aperçu'></p><p> </p></form>
<p> </p></div>");
}
//Interface ajout lettre distant
if($menu == "Envoyer une lettre(ordinateur)")
{
$cpt3 = 0;
$handle=opendir("./newsletter");
while ($file2 = readdir($handle)){if (ereg(".html$",$file2)or ereg(".htm$",$file2) or
ereg(".txt$",$file2)){$filelist[$cpt3]=$file2;$cpt3++;}}
echo("<div align='center'><p><font color='#AE0000'><font size='4'>ENVOYER UNE LETTRE</font>
</font></p><form method='post' action='admin.php'><p>Sujet : <br><input type='text'
name='sujet'></p><p>Fichier : <br>(html, htm, txt)<br>le fichier doit se trouver dans le dossier
admin/newsletter<br><select name='file'>");
for($x=0;$x < sizeof($filelist);$x++){echo("<option>newsletter/$filelist[$x]</option>");}
echo("</select><br><br><input type='submit' name='submit' value='Apercu'></p></form>
<p> </p></div>");
}
//Interface Apercu avant envoi(resultat de la requete ajout lettre)
if(strlen($file)>=1 && strlen($sujet)>=1 && $pass2!=1)
{
$file = str_replace("\\","/",$file);
$file = str_replace("//","/",$file);
$fp = fopen("$file","r");
while (!feof($fp)){$page .= fgets($fp,4096);}
fclose($fp);
if(ereg(".txt$",$file)){$page = str_replace("\n","<br>",$page);}
echo("<div align='center'><font color='#AE0000'>APERCU AVANT ENVOI<br><br><b> SUJET :
$sujet<br></b></font><table width='75%' border='1'><tr><td>$page</td></tr></table>");
echo("<form method='post' action='admin.php?file=$file&&sujet=$sujet&&pass2=1'><p>Mot de
passe : <br><input type='password' name='passsend'></p><p><input type='submit'
name='submit' value='Envoyer'></p></form><p> </p></div>");
}
//resultat de la requête apercu avant envoi
if($passsend)
{
if ($passsend != $variable[0]){echo("<div align='center'><p><font size='5' color='#FF0000'>Mot
de passe incorrect</font></p></div>");$pass2=0;}
if ($passsend == $variable[0])
{
$fp = fopen("../result.lst","r");
while (!feof($fp)){$ligne = fgets($fp,4096);$email = explode("|",$ligne);}
fclose($fp);
$fp = fopen("$file","r");
while (!feof($fp)){$page .= fgets($fp,4096);}
fclose($fp);
if(ereg(".txt$",$file)){$page = str_replace("\n","<br>",$page);}
$cptmail = 0;
$entetemail = 'From: "nom" <[email protected]>'."\n";
$entetemail .='Content-Type: text/html; charset="iso-8859-1"'."\n";
$entetemail .='Content-Transfer-Encoding: 8bit';
for($x=0;$x <= sizeof($email)-2;$x++){$adressed = "<a href='$variable[1]?id=$email[$x]'>$variable[1]?id=$email[$x]</a>";$code = "<hr><p><font
size='2' face='Verdana, Arial, Helvetica, sans-serif'>Pour se désabonner à notre
newsletter, cliquez sur le lien ci dessous :</font><br>";$courrier =
$email[$x];mail("$courrier","$sujet","$page$code$adressed",$entetemail);$cptmail++;}
}
}
//resultat de la requete envoyer la lettre
if($pass2==1)
{
echo("<div align='center'><p><font size='4' color='#FF0000'>Opération résussie.
Votre lettre a été envoyé à $cptmail destinataires </font>
</p></div>");
$pass2=0;
}