Forum d'entraide PHPFrance

Venez poser vos questions PHP, MySQL, HTML, CSS, Javascript, Gestion de serveurs à la communauté PHPfrance

Vers le contenu

» Masquer les résultats de la recherche

Recherche dynamique PHPfrance

  1. Effectuez une recherche, les résultats s'afficheront dynamiquement ici.

Comment modifier ce script pour utiliser SMTP à la place de

Pour ceux qui débutent en PHP.

Comment modifier ce script pour utiliser SMTP à la place de

Messagepar new2php 16 Juin 2011, 13:53

Bonjour La France :D
J'ai un annuaire de sites web dont le fichier mailer.php est ci-dessous. Vu que ça ne me permet pas d'envoyer les e-mails ou la newsletter sous mon hébergeur, je voudrais le modifier pour utiliser "SMTP= localhost". Je précise bien que mes connaissances sont très réduites en PHP, alors s'il vous plait aidez_moi. Merci d'avance
version de PHP: 5.2.6
version de MySQL: 5.0.44
version de Template Lite: 2.10

<?php

class Mailer extends Model
{
    private static $instance = null;
    private $adminEmail;
    private $inboxDebug = false;
    private $sendRealEmail = true;
    private $charset = "UTF-8";

    /**
     * @return Mailer
     */

    public static function getInstance()
    {
        if (self::$instance === null) {
            self::$instance = new self();
        }

        return self::$instance;
    }

    function __construct()
    {
        parent::__construct();

        $c = new Criteria();
        $c->add("role", "administrator");
        $c->setLimit(1);
        $admin = $this->user->find($c, "email");
        $this->adminEmail = $admin->email;
    }

    function getAdminEmail()
    {
        return $this->adminEmail;
    }

    function sendAdminNotification($site)
    {
        $message = $this->customMessage->findByPk("submitSite");
        $this->sendEmailToAdmin($message->title, $this->replaceTags($message->description, $site));
    }

    function sendEmailToAdmin($subject, $message, $fromEmail = "")
    {
        return $this->sendEmail($this->adminEmail, $subject, $message, $fromEmail);
    }

    function replaceTags($message, $site = null)
    {
        $replacements = array("[name of directory]"     => Config::get("siteTitle"),
                              "[url of your directory]" => Config::get("siteRootUrl"));
                             
        if ($site) {
                             
            $this->site->attachParents($site);
            $detailsUrl = AppRouter::getObjectUrl($site, "siteDetails", true);

            $category = $this->category->findByPk($site->categoryId, "name");
            $siteDescription = (utf8_strlen($site->description) > 100) ? utf8_substr($site->description, 0, 100) : $site->description;

            $replacements += array(
                "[site name]"               => $site->siteTitle,
                "[name of the category]"    => $category->name,
                "[url site details]"        => $detailsUrl,
                "[url site]"                => $site->url,
                "[description of the site]" => $siteDescription,
                "[site type]"               => ($site->siteType == "basic") ? _t("Free") : _t("Privilege"));
        }

        $message = strtr($message, $replacements);

        return $message;
    }

    function sendSiteStateUpdate($webmasterEmail, $site, $subject = false, $description = false)
    {
        switch ($site['status']) {
            case "validated":
                $messageId = "validateSite";
                break;

            case "refused":
                $messageId = "refuseSite";
                break;

            case "banned":
                $messageId = "banSite";
                break;
        }

        static $cachedMessages = array();

        if (!isset($cachedMessages[$messageId])) {
            $cachedMessages[$messageId] = $this->customMessage->findByPk($messageId);
        }

        $message = $cachedMessages[$messageId];

        if (!$description) {
            $description = $message->description;
        }

        $description = $this->replaceTags($description, $site);

        if (!$subject) {
            $subject = $message->title;
        }

        $this->sendEmail($webmasterEmail, $subject, $description);

    }

    function sendNewsletterTaskFinished()
    {
        $this->sendEmailToAdmin(_t('Sending the newsletter is finished successfully.'), _t('Sending the newsletter is finished successfully.') . _t('You can go in your administration for further informations.'));
    }

    function sendSiteBacklinkTaskFinished()
    {
        $this->sendEmailToAdmin(_t('The search for backlinks is finished successfully.'), _t('The search for backlinks is finished successfully.') . _t('You can go in your administration for further informations.'));
    }

    function sendDuplicateContentTaskFinished()
    {
        $this->sendEmailToAdmin(_t('The search for duplicate content is finished successfully.'), _t('The search for duplicate content is finished successfully.') . _t('You can go in your administration for further informations.'));
    }

    function sendSiteThumbTaskFinished()
    {
        $this->sendEmailToAdmin(_t('The updating of thumbs is finished successfully.'), _t('The updating of thumbs is finished successfully.') . _t('You can go in your administration for further informations.'));
    }

    function sendWebmasterNotification($site, $webmasterEmail)
    {
        $message = $this->customMessage->findByPk("webmasterSubmitSite");
        $this->sendEmail($webmasterEmail, $message->title, $this->replaceTags($message->description, $site));
    }

    function sendEmailConfirmation($messageId, $email, $confirmLink)
    {
        $message = $this->customMessage->findByPk($messageId);
        $message->description = str_replace("[confirm link]", $confirmLink, $message->description);
        $this->sendEmail($email, $message->title, $this->replaceTags($message->description));
    }

    function sendLostPassword($userEmail, $newPassword)
    {
        $this->sendEmail($userEmail, _t('Annuaire - new webmaster password'), _t('Your new password is') . ' ' . $newPassword);
    }

    function sendContactEmailToUser($email, $title, $text, $fromEmail)
    {
        $message = $this->customMessage->findByPk("webmasterContact");

        $text = str_replace(array("[message]", "[sender email]"),
                            array($text, $fromEmail),
                            $message->description);

        $this->sendEmail($email, $title, $text);
    }

    function sendNewCommentNotificationToAdmin($site)
    {
        $message = $this->customMessage->findByPk("newComment");
        $this->sendEmailToAdmin($message->title, $this->replaceTags($message->description, $site));
    }

    function sendNewSiteProblemNotificationToAdmin($site)
    {
        $message = $this->customMessage->findByPk("newSiteProblem");
        $this->sendEmailToAdmin($message->title, $this->replaceTags($message->description, $site));
    }

    function createMailHeaders($from)
    {
        $mailheaders = "From: $from\n";
        $mailheaders .= "Reply-To: $from\n";
        $mailheaders .= "MIME-version: 1.0\n";
        $mailheaders .= "Content-type: text/html; charset=" . $this->charset . "\n";

        return $mailheaders;
    }

    function sendEmail($email, $subject, $text, $fromEmail = "")
    {
        if ($fromEmail == "") {
            $fromEmail = $this->adminEmail;
        }
        $headers = $this->createMailHeaders($fromEmail);

        $specialChars = array('Ŕ','Á','Â','Ă','Ä','Ĺ','Ć','ŕ','a','á','â','ă','ä','ĺ','ć','Č','É','Ę','Ë','č','e','é','ę','ë','e','Ě','Í','Î','Ď','ě','í','î','ď','Ň','Ó','Ô','Ő','Ö','Ř','ň','ó','ô','ő','ö','ř','Ů','Ú','Ű','Ü','ů','ú','ű','ü','ß','Ç','ç','Đ','đ','Ń','ń','Ţ','ţ','Ý' );
        $normalChars  = array('A','A','A','A','A','A','A','a','a','a','a','a','a','a','a','E','E','E','E','e','e','e','e','e','e','I','I','I','I','i','i','i','i','O','O','O','O','O','O','o','o','o','o','o','o','U','U','U','U','u','u','u','u','B','C','c','D','d','N','n','P','p','Y' );
        $subject = str_replace($specialChars, $normalChars, $subject);

        if ($this->inboxDebug) {
            $str = "<hr>";
            $str .= "<b>Time</b> " . date("Y-m-d G.i:s") . "<br>";
            $str .= "<b>Email:</b> $email<br>";
            $str .= "<b>Topic:</b> $subject<br>";
            $str .= "<b>Text:</b> $text<br>";
            $str .= "<b>Headers:</b> $headers<br>";

            $fp = fopen(CODE_ROOT_DIR . "inbox.html", "a");
            fwrite($fp, $str);
            fclose($fp);
        }

        if ($this->sendRealEmail) {
            @mail($email, $subject, $text, $headers);
        }

        return true;
    }
}
new2php
 

Re: Comment modifier ce script pour utiliser SMTP à la place de

Messagepar taratata 16 Juin 2011, 13:58

:oops: , Désolé d'avoir envoyé le message ci-dessus avant de m'être connecté, pourtant je venais de m'inscrire au forum; alors mon pseudo est taratata et la question est de modifier le script pour utiliser SMTP à la place de la fonction php mail()
taratata
Embryon
 
Messages: 5
Inscription: 16 Juin 2011, 13:38

Re: Comment modifier ce script pour utiliser SMTP à la place de

Messagepar moogli 16 Juin 2011, 14:11

salut,

a tu essayé des classes d'envoi de mail, tel phpmailer ou autre ?
il y a aussi la classe pear mail http://pear.php.net/package/Mail



@+
Il en faut peu pour être heureux ......
moogli
Modérateur PHPfrance
Modérateur PHPfrance
 
Messages: 7458
Inscription: 06 Juil 2006, 17:23
Localisation: gwened bzh

Re: Comment modifier ce script pour utiliser SMTP à la place de

Messagepar taratata 16 Juin 2011, 18:13

Bonsoir Moogli :)
Je viens juste de mettre un dossier "phpmailer" dans le répertoire de l'annuaire. Il contient les fichiers class.phpmailer + class.smtp + phpmailer.lang-fr.
J'ai mis au début de mon script :
require("phpMailer/class.phpmailer.php");
$mail = new PHPMailer();
$mail->IsSMTP();                                 
$mail->Host = "localhost";               
$mail->Port  =  "25";

et je n'ai rien reçu dans ma boite pourtant le panneau admin indique qu'un message a bien été envoyé.
Pourtant phpmailer fonctionne bien avec un formulaire en php que j'ai mis en ligne dans le même répertoire.
taratata
Embryon
 
Messages: 5
Inscription: 16 Juin 2011, 13:38

Re: Comment modifier ce script pour utiliser SMTP à la place de

Messagepar moogli 16 Juin 2011, 19:12

a tu vu http://phpmailer.worxware.com/index.php?pg=exampleasmtp ?

surtout l'exemple a la fin pour la récupération des erreurs ?

est tu sur que le serveur local possède un serveur smtp ? (si c'était le cas il serait configuré sur php et donc tu fait la même chose ?)

sinon montre nous le complet (si tu clique sur le bouton php juste au dessus de la zone de texte tu aura la balise bbcode directement et ça permettera de mettre en couleur ton code et on y verra mieux ;)


@+
Il en faut peu pour être heureux ......
moogli
Modérateur PHPfrance
Modérateur PHPfrance
 
Messages: 7458
Inscription: 06 Juil 2006, 17:23
Localisation: gwened bzh

Re: Comment modifier ce script pour utiliser SMTP à la place de

Messagepar taratata 16 Juin 2011, 21:54

Bonsoir :D
J'ai déjà contacté mon hébergeur et il m'a expliqué que je peux utiliser "SMTP= localhost" sans avoir besoin d'autres paramètres et que j'avais aussi le choix d'utiliser la fonction suivante pour les formulaires et je te dis qu'un formulaire php que j'ai mis en ligne fonctionne très bien avec phpmailer, alors que l'envoi automatique des mails à la soumission d'un site web et de la newsletter ne marchent pas; et ce qui est étrange c'est que je n'ai eu aucun message d'erreur, mais plutôt une réponse que le message a été envoyé avec succès.
Syntaxe: [ Télécharger ] [ Masquer ]
Code php
<?php
        $to      = "@mail"; //Destinataire du message
        $from    = "@mail"; // Emetteur du message
        $subject = "Testing Subject ";
        $message = "Testing Message ";
        $headers = "From: " . $from . "\r\n" .
        "Reply-To: " . $from . "\r\n" .
        "X-Mailer: PHP/" . phpversion();
        $additionalparam = "-r " . $from;
        if(mail($to, $subject, $message, $headers, $additionalparam))
{
        echo 'Le message a été envoyé';
 }
        else
 {
  echo 'Le message n\'a pu être envoyé';
}
?>
 


Je te renvoi le contenu du fichier mailer.php et il est complet

Syntaxe: [ Télécharger ] [ Masquer ]
Code php
<?php

class Mailer extends Model
{
    private static $instance = null;
    private $adminEmail;
    private $inboxDebug = false;
    private $sendRealEmail = true;
    private $charset = "UTF-8";

    /**
     * @return Mailer
     */


    public static function getInstance()
    {
        if (self::$instance === null) {
            self::$instance = new self();
        }

        return self::$instance;
    }

    function __construct()
    {
        parent::__construct();

        $c = new Criteria();
        $c->add("role", "administrator");
        $c->setLimit(1);
        $admin = $this->user->find($c, "email");
        $this->adminEmail = $admin->email;
    }

    function getAdminEmail()
    {
        return $this->adminEmail;
    }

    function sendAdminNotification($site)
    {
        $message = $this->customMessage->findByPk("submitSite");
        $this->sendEmailToAdmin($message->title, $this->replaceTags($message->description, $site));
    }

    function sendEmailToAdmin($subject, $message, $fromEmail = "")
    {
        return $this->sendEmail($this->adminEmail, $subject, $message, $fromEmail);
    }

    function replaceTags($message, $site = null)
    {
        $replacements = array("[name of directory]"     => Config::get("siteTitle"),
                              "[url of your directory]" => Config::get("siteRootUrl"));
                             
        if ($site) {
                             
            $this->site->attachParents($site);
            $detailsUrl = AppRouter::getObjectUrl($site, "siteDetails", true);

            $category = $this->category->findByPk($site->categoryId, "name");
            $siteDescription = (utf8_strlen($site->description) > 100) ? utf8_substr($site->description, 0, 100) : $site->description;

            $replacements += array(
                "[site name]"               => $site->siteTitle,
                "[name of the category]"    => $category->name,
                "[url site details]"        => $detailsUrl,
                "[url site]"                => $site->url,
                "[description of the site]" => $siteDescription,
                "[site type]"               => ($site->siteType == "basic") ? _t("Free") : _t("Privilege"));
        }

        $message = strtr($message, $replacements);

        return $message;
    }

    function sendSiteStateUpdate($webmasterEmail, $site, $subject = false, $description = false)
    {
        switch ($site['status']) {
            case "validated":
                $messageId = "validateSite";
                break;

            case "refused":
                $messageId = "refuseSite";
                break;

            case "banned":
                $messageId = "banSite";
                break;
        }

        static $cachedMessages = array();

        if (!isset($cachedMessages[$messageId])) {
            $cachedMessages[$messageId] = $this->customMessage->findByPk($messageId);
        }

        $message = $cachedMessages[$messageId];

        if (!$description) {
            $description = $message->description;
        }

        $description = $this->replaceTags($description, $site);

        if (!$subject) {
            $subject = $message->title;
        }

        $this->sendEmail($webmasterEmail, $subject, $description);

    }

    function sendNewsletterTaskFinished()
    {
        $this->sendEmailToAdmin(_t('Sending the newsletter is finished successfully.'), _t('Sending the newsletter is finished successfully.') . _t('You can go in your administration for further informations.'));
    }

    function sendSiteBacklinkTaskFinished()
    {
        $this->sendEmailToAdmin(_t('The search for backlinks is finished successfully.'), _t('The search for backlinks is finished successfully.') . _t('You can go in your administration for further informations.'));
    }

    function sendDuplicateContentTaskFinished()
    {
        $this->sendEmailToAdmin(_t('The search for duplicate content is finished successfully.'), _t('The search for duplicate content is finished successfully.') . _t('You can go in your administration for further informations.'));
    }

    function sendSiteThumbTaskFinished()
    {
        $this->sendEmailToAdmin(_t('The updating of thumbs is finished successfully.'), _t('The updating of thumbs is finished successfully.') . _t('You can go in your administration for further informations.'));
    }

    function sendWebmasterNotification($site, $webmasterEmail)
    {
        $message = $this->customMessage->findByPk("webmasterSubmitSite");
        $this->sendEmail($webmasterEmail, $message->title, $this->replaceTags($message->description, $site));
    }

    function sendEmailConfirmation($messageId, $email, $confirmLink)
    {
        $message = $this->customMessage->findByPk($messageId);
        $message->description = str_replace("[confirm link]", $confirmLink, $message->description);
        $this->sendEmail($email, $message->title, $this->replaceTags($message->description));
    }

    function sendLostPassword($userEmail, $newPassword)
    {
        $this->sendEmail($userEmail, _t('Annuaire - new webmaster password'), _t('Your new password is') . ' ' . $newPassword);
    }

    function sendContactEmailToUser($email, $title, $text, $fromEmail)
    {
        $message = $this->customMessage->findByPk("webmasterContact");

        $text = str_replace(array("[message]", "[sender email]"),
                            array($text, $fromEmail),
                            $message->description);

        $this->sendEmail($email, $title, $text);
    }

    function sendNewCommentNotificationToAdmin($site)
    {
        $message = $this->customMessage->findByPk("newComment");
        $this->sendEmailToAdmin($message->title, $this->replaceTags($message->description, $site));
    }

    function sendNewSiteProblemNotificationToAdmin($site)
    {
        $message = $this->customMessage->findByPk("newSiteProblem");
        $this->sendEmailToAdmin($message->title, $this->replaceTags($message->description, $site));
    }

    function createMailHeaders($from)
    {
        $mailheaders = "From: $from\n";
        $mailheaders .= "Reply-To: $from\n";
        $mailheaders .= "MIME-version: 1.0\n";
        $mailheaders .= "Content-type: text/html; charset=" . $this->charset . "\n";

        return $mailheaders;
    }

    function sendEmail($email, $subject, $text, $fromEmail = "")
    {
        if ($fromEmail == "") {
            $fromEmail = $this->adminEmail;
        }
        $headers = $this->createMailHeaders($fromEmail);

        $specialChars = array('Ŕ','Á','Â','Ă','Ä','Ĺ','Ć','ŕ','a','á','â','ă','ä','ĺ','ć','Č','É','Ę','Ë','č','e','é','ę','ë','e','Ě','Í','Î','Ď','ě','í','î','ď','Ň','Ó','Ô','Ő','Ö','Ř','ň','ó','ô','ő','ö','ř','Ů','Ú','Ű','Ü','ů','ú','ű','ü','ß','Ç','ç','Đ','đ','Ń','ń','Ţ','ţ','Ý' );
        $normalChars  = array('A','A','A','A','A','A','A','a','a','a','a','a','a','a','a','E','E','E','E','e','e','e','e','e','e','I','I','I','I','i','i','i','i','O','O','O','O','O','O','o','o','o','o','o','o','U','U','U','U','u','u','u','u','B','C','c','D','d','N','n','P','p','Y' );
        $subject = str_replace($specialChars, $normalChars, $subject);

        if ($this->inboxDebug) {
            $str = "<hr>";
            $str .= "<b>Time</b> " . date("Y-m-d G.i:s") . "<br>";
            $str .= "<b>Email:</b> $email<br>";
            $str .= "<b>Topic:</b> $subject<br>";
            $str .= "<b>Text:</b> $text<br>";
            $str .= "<b>Headers:</b> $headers<br>";

            $fp = fopen(CODE_ROOT_DIR . "inbox.html", "a");
            fwrite($fp, $str);
            fclose($fp);
        }

        if ($this->sendRealEmail) {
            @mail($email, $subject, $text, $headers);
        }

        return true;
    }
}
taratata
Embryon
 
Messages: 5
Inscription: 16 Juin 2011, 13:38

Re: Comment modifier ce script pour utiliser SMTP à la place de

Messagepar taratata 18 Juin 2011, 11:33

Alors! :(
taratata
Embryon
 
Messages: 5
Inscription: 16 Juin 2011, 13:38

Re: Comment modifier ce script pour utiliser SMTP à la place de

Messagepar moogli 18 Juin 2011, 15:51

l'exemple que tu donne c'est un exemple "basique" de la doc. tous ce que l'on en conclu c'est que la fonction mail est active sur ton compte.

Per contre ce que l'on ne sais pas c'est comment tu l'utilise; A la limite le code de la classe on s'en ficher un (bon il est quand même utile, mais on va pas debugger ;) ). Par contre voir comment toi tu l'utilise c'est intéressant, car c'est la que se trouve le soucis.

qu'entend tu par : dans l'interface admin on vois bien qu'un mail est partis ?


@+
Il en faut peu pour être heureux ......
moogli
Modérateur PHPfrance
Modérateur PHPfrance
 
Messages: 7458
Inscription: 06 Juil 2006, 17:23
Localisation: gwened bzh

Re: Comment modifier ce script pour utiliser SMTP à la place de

Messagepar taratata 17 Juil 2011, 06:44

un grand up! :D
taratata
Embryon
 
Messages: 5
Inscription: 16 Juin 2011, 13:38

Re: Comment modifier ce script pour utiliser SMTP à la place de

Messagepar Ryle 17 Juil 2011, 10:36

Modération :
Les "up" (petits ou grands) sont interdits sur PHPFrance.

Si tu veux relancer un sujet, commence par apporter des informations complémentaires, réponds aux questions qui ont été posées par moogli, ... De plus, qu'as tu fais comme test depuis un mois ? quels sont les nouveaux éléments à prendre en compte, y a-t-il des messages d'erreur ? etc.

Sans cela, il n'y a aucune chance que l'on te réponde, et le fait de remonter le topic juste en disant "up" n'y changera rien :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...
Avatar de l’utilisateur
Ryle
Modérateur PHPfrance
Modérateur PHPfrance
 
Messages: 9793
Inscription: 07 Fév 2006, 17:25
Localisation: Lat: 48°89. Long: 2°30.


Retourner vers PHP débutant

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 20 invités