intégration enregistrement mail dans mailing list OVH

Started by bazo, March 27, 2010, 06:26:53 AM

Previous topic - Next topic

bazo

Bonjour, j'ai actuellement un petit forum d'environ 7000 membres et j'aimerais commencer à faire des newsletters. En ayant testé auparavant le système interne de SMF le système plante car trop de mails je pense mais de toute façon ce n'est pas pratique.

Je me suis tourné vers le système de mailing list d'OVH, le problème est que je dois intégrer manuellement les mails dans la mailing list donc pas pratique du tout.

J'ai trouvé un script qui est décrit ici : http://forums.ovh.net/showpost.php?p=97125&postcount=22 , j'ai réussi à l'adapter et à le faire fonctionner. J'ai tenté d'intégrer dans le fichier register.template.php le bout de code

<form action="newsletter.php" method="post">
<input type="text" name="destination" size="30" id="lettreinfo" value="adresse e-mail"><br />
<input type="radio" name="action" value="inscription" checked="checked" />Sabonner<br />
<input type="radio" name="action" value="desinscription" />Se désabonner<br />
<input type="submit" value="Envoyer" />
</form> 


il s'affiche au bon endroit mais par contre ce n'est pas fonctionne et ça bloque même l'inscription au forum.

La meilleure méthode qui soit serait d'intégrer ce bout de code dans l'inscription et de valider en même temps l'inscription au forum et l'intégration à la base de données de la mailing list en cliquant sur le bouton final.

Si vous avez des pistes merci d'avance.

P.S : Pièce jointe le fichier register.template.php modifié à partir de la ligne 130.


bazo

Bon en fouillant un peu beaucoup j'ai trouvé le bout de code qui permet l'envoi du formulaire :


<form action="', $scripturl, '?action=register2" method="post" accept-charset="', $context['character_set'], '" name="creator" id="creator" onsubmit="return verifyAgree();">


du coup j'ai rajouté l'action d'envoyer à la newsletter mais biensur ça plante , voici le code modifié :
<form action="./newsletter.php" action="', $scripturl, '?action=register2" method="post" accept-charset="', $context['character_set'], '" name="creator" id="creator" onsubmit="return verifyAgree();">


La première action fonctionne bien mais du coup la 2ème n'est pas effectuée et c'est un peu la plus importante.  :)

Encore une fois si vous avez des pistes....

Robin-d

Ce que tu fais et carrément impossible  :o

Tu as deux solutions :
-Tu fais une exportation en csv tout les mois et tu dois surement avoir une fonction pour uploader un fichier dans ton truc OVH.
-Tu colles ici le code de ton newsletter.php, on l'adapte et on te dit ou le mettre ;)

bazo

Bonjour pour la première solution que tu parles c'est ce que je faisais avant et franchement c'est galère au bout d'un moment. Pour la 2ème solution j'ai donné le lien vers le script dans le premier post : http://forums.ovh.net/showpost.php?p=97125&postcount=22

Robin-d

// Identifiants: NIC-HANDLE et mot de passe OVH
$nic = "XXXXX-ovh" ;
$pass = "motdepasse" ;
// Le nom de domaine et le nom de la mailing list
$domain = "domaine.tld" ;
$ml = "nom-de-la-mailinglist" ;
// -------------------- Fin des parametres.

$mail = $context['member_id'];
$ssid = ovh ( "Login" , array ( "nic" => $nic , "password" => $pass ) ) or die ( $ovh_status ) ;
    $ssid = $ssid["value"] ;
    $result = ovh ( "MailingListSub" , $ssid , array ( "domain" => $domain , "ml" => $ml , "email" => $mail) ) or die ( $ovh_status ) ;
    // Envoi par mail et affichage d'un message de confirmation
    $headers = "Reply-To: $mlunsub\n";
    mail($mail, "[$ml] Inscription", "Merci de vous etre inscrit a la lettre d'information $ml.\n S'il s'agit d'une erreur, envoyez une simple reponse a ce message a l'adresse \n$mlunsub\n Inutile de recopier l'adresse, cliquer sur le bouton Repondre de votre logiciel de messagerie devrait suffir. Vous recevrez un message de confirmation.\n Pour obtenir de l'aide, ecrivez a: $mlhelp\n Pour lire la FAQ, ecrivez a: $mlfaq\n Merci.", $headers); ?>


Tout est ci-dessus, tu dois ajouter ce code dans le fichier qui traite l'inscription (sources/register.php)

DeathSign

Quote from: Robin-d on March 28, 2010, 08:36:27 AM
Tout est ci-dessus, tu dois ajouter ce code dans le fichier qui traite l'inscription (sources/register.php)
Oui si on suit le code qui a été donné sauf qu'envoyer un mail après l'ajout n'est sûrement pas nécessaire (donc supprimer les deux dernières lignes). Attention si vous souhaitez conserver ces lignes de renseigner $mlunsub, $mlhelp, et $mlfaq (cf. script original).

Au niveau code HTML du formulaire que tu as tenté de modifier, tu ne peux mettre qu'un attribut "action". Si tu veux faire deux actions tu peux utiliser du Javascript (plutôt Ajax) en modifiant l'événement "onsubmit" ou alors (la solution préconisée ici que je conseillerais) de l'intégrer dans la page appelée par action qui est ici Register.php

Dans tous les cas, ajouter l'adresse email à ta mailing list dès l'inscription peut-être bien mais il faut prévoir le cas où cette adresse est changée (volonté du membre d'en utiliser une autre, correction d'adresse invalide).

Amicalement,
DeathSign

bazo

Bon je vais essayer de mettre le code dans le register mais il fait appelle de base à lib.php normalement.

bazo

ppppffff plus ça va plus je me dis que je suis vraiment une brique en PHP, bon j'ai mis en pièce jointe les fichiers register et register.template. Car j'ai ajouté presque tout le code de la page newsletter à la fin du fichier register et bingo une erreur

: Undefined index: destination
Fichier: /homez.116/consommaq/www/testforum/Sources/Register.php
Ligne: 600



du coup dans le fichier register j'ai rajouté du code à la ligne 273 mais toujours l'erreur, pourtant l'input qui appelle le mail de la personne est bien dans le fichier register.template.

bazo

J'ai réussi ça supprimer les erreurs mais toujours aucune inscription possible, si j'enlève tous les codes rajoutés l'inscription fonctionne, c'est quand même bizarre que de rajouter du code ça fasse tout planter.

Je remets en PJ les fichiers encore modifiés

Robin-d

Il faut que tu les installes à un endroit précis ! Pas au début ou à la fin du fichier mais près de la requête mysql qui enregistre les membres (vers les lignes 400 je crois).

bazo

J'ai baladé le script suivant include ( "./lib.php" ) ;
$nic = "x" ;
$pass = "x" ;
$domain = "x" ;
$ml = "x" ;


// Vous devez personnaliser les adresses subcribe, unsubscribe, help et faq.
    $mlsub = "$ml-subscribe@$domain";
    $mlunsub = "$ml-unsubscribe@$domain";
    $mlhelp = "$ml-help@$domain";
    $mlfaq = "$ml-faq@$domain";

if(isset($_POST['emailbis']))$mail=$_POST['emailbis'];


// -------------------- Inscription
else {
    if(isset($_POST['action']) == "inscription") {
    // Ouverture de la session, recuperation de l'ID et inscription a la mailing list
    $ssid = ovh ( "Login" , array ( "nic" => $nic , "password" => $pass ) ) or die ( $ovh_status ) ;
    $ssid = $ssid["value"] ;
    $result = ovh ( "MailingListSub" , $ssid , array ( "domain" => $domain , "ml" => $ml , "email" => $mail) ) or die ( $ovh_status ) ;


// fermeture de la session
    ovh ( "Logout" , $ssid ) or die ;
    }

}

un peu partout dans le fichier register.php mais aucun succès, je l'ai même enlevé du script et toujours le même résultat, le problème ne viendrait pas de register.template.php ?

DeathSign

#12
Tu dois l'insérer après l'enregistrement effectif c'est-à-dire après la ligne :
$memberID = registerMember($regOptions);

(La variable utilisée est au mauvais endroit, je conseillerai l'utilisation de $regOptions['email']

La vérification de la conformité du mail ayant été faite par SMF, tu peux donc enlever la condition (en plus elle ne faisait rien dans le code que tu me montres). La vérification de l'action est aussi inutile car tu sais qu'ici il fait l'inscription.)

En bref, d'après les éléments que je dispose et sans changer fondamentalement le code, j'écrirais  :
include("./lib.php");

$nic = "x";
$pass = "x";
$domain = "consommateur-gagnant.fr";
$ml = "x";

// Vous devez personnaliser les adresses subcribe, unsubscribe, help et faq.
$mlsub = "$ml-subscribe@$domain";
$mlunsub = "$ml-unsubscribe@$domain";
$mlhelp = "$ml-help@$domain";
$mlfaq = "$ml-faq@$domain";

$mail = $regOptions['email'];

// Ouverture de la session, recuperation de l'ID et inscription a la mailing list
$ssid = ovh("Login", array ("nic" => $nic, "password" => $pass)) or fatal_error('Erreur ouverture session OVH : ' . $ovh_status, true);
$ssid = $ssid["value"];
$result = ovh("MailingListSub", $ssid, array("domain" => $domain, "ml" => $ml, "email" => $mail)) or fatal_error('Erreur ajout mail : ' . $ovh_status, true);

// fermeture de la session
ovh("Logout" , $ssid) or fatal_error('Erreur fermeture session OVH', true);


Dis moi si quelque chose ne va pas, je n'ai pas testé.

Amicalement,
DeathSign

EDIT: J'utilise fatal_error() à la place des die() pour pouvoir enregistrer l'erreur dans le journal d'erreur et afficher l'erreur avec le thème. Elle a les mêmes fonctions. Mais... En y réfléchissant, j'aurais bien mis des log_error() et dans ce cas il faut modifier le code pour ne pas continuer s'il y a une erreur. L'inscription à la mailing list ne doit pas gêner l'inscription avec SMF.

bazo

Merci pour l'aide, je viens d'intégrer le code que tu as modifié en dessous de ligne dite mais toujours rien, pas d'erreur mais pas d'inscription ni d'intégration à la mailing list. Une fois les informations tapée et envoyées il revient à l'accueil.

Robin-d

Tu as du "bousillé" ton fichier register.php ou même register.template, essaye d'en remettre un "neuf" et de retenter la manoeuvre ;)

bazo

je teste le script sur un forum de test tout neuf.

bazo

Bon j'ai laissé tomber l'intégration dans le fichier register.php, d'après des gars sur le support anglais c'est trop complexe à réaliser.

Je suis tombé sur un MOD qui permet de rediriger après l'inscription d'un membre, j'ai donc créé une action newsletter  qui affichera le script précédemment  cité. Ca fait plusieurs heure que je suis dessus et j'ai pas l'impression d'avancer. En fait il n'envoie pas les données et il revient à l'index sans erreur c'est déjà ça.

JE vous mets en pièce jointe tous les fichiers que j'ai du modifier.

DeathSign

Quote from: bazo on March 30, 2010, 08:22:19 PM
Bon j'ai laissé tomber l'intégration dans le fichier register.php, d'après des gars sur le support anglais c'est trop complexe à réaliser.
Franchement si ton bout de code qui utilise l'API d'OVH marche je ne vois pas en quoi c'est compliqué.
Est-ce que tu as déjà réussi à l'utiliser en dehors de SMF ?

bazo

oui ça fonctionne j'ai testé, c'est ça qui m'embête, c'est la structure de SMF que je dois intégrer avec bout de code.

DeathSign

Et donc, avec ce bout de code dans un fichier à part (reconfiguré) qui ne devrait rien te dire mais tout faire en silence :

include("./lib.php");

$nic = "x";
$pass = "x";
$domain = "consommateur-gagnant.fr";
$ml = "x";

// Vous devez personnaliser les adresses subcribe, unsubscribe, help et faq.
$mlsub = "$ml-subscribe@$domain";
$mlunsub = "$ml-unsubscribe@$domain";
$mlhelp = "$ml-help@$domain";
$mlfaq = "$ml-faq@$domain";

$mail = '[email protected]';

// Ouverture de la session, recuperation de l'ID et inscription a la mailing list
$ssid = ovh("Login", array ("nic" => $nic, "password" => $pass)) or die('Erreur ouverture session OVH : ' . $ovh_status);
$ssid = $ssid["value"];
$result = ovh("MailingListSub", $ssid, array("domain" => $domain, "ml" => $ml, "email" => $mail)) or die('Erreur ajout mail : ' . $ovh_status);

// fermeture de la session
ovh("Logout" , $ssid) or die('Erreur fermeture session OVH');

Advertisement: