PHPMailer с формой текстовой области и HTML - PullRequest
0 голосов
/ 14 февраля 2012

Я пытаюсь собрать воедино некоторый код из учебника php, который показывает, как создать очень простую форму PHPMailer, которая отправляет текстовое электронное письмо в список рассылки. Простота - именно то, что я хочу по большей части, так как пара людей будет использовать эту форму, хотя я хочу включить возможность использовать HTML в форме. Поэтому, если, например, я хочу использовать теги <center> или вставить размещенное изображение <img src="www.link.com/img.jpg">, чтобы сделать электронную почту более насыщенной.

В настоящее время я не могу понять, как включить встраивание html. Если я помещаю HTML-код в форму, он просто выводит код как <b><i>text</i></b>, где я хочу, чтобы электронное письмо отображалось как: текст

Я думал, что это может быть переменная IsHTML(True);, но, кажется, все работает нормально, когда я отправляю электронные письма. Если я избавлюсь от <input type и изменит его на <span, тогда сообщение электронной почты будет пустым.

вот исходный код, над которым я работаю: http://yorkspace.wordpress.com/simple-php-mailing-list/

вот sendmail.php, куда вы можете отредактировать сообщение, просмотреть, а затем отправить:

<?php

require "maillist-settings.inc.php";
if ($_POST['preview'])
{
    $email_array = $_POST['emaillist'];

    if (is_array($email_array))
    {
        $subject = $_POST['emailtitle'];
        $message = $_POST['emailmessage'];
        $bcc_list = implode(", ", $email_array);

        echo "<table><tr><td>";    
            echo "<form action=\"" . $_SERVER['SCRIPT_URL'] . "\" method=\"POST\">";
            foreach ($email_array as $email_address)
            {
                echo "<input type=\"hidden\" name=\"emaillist[]\" value=\"" .  $email_address . "\">";
            }
            echo "<input type=\"hidden\" name=\"emailtitle\" value=\"" . $subject . "\">";
            echo "<input type=\"hidden\" name=\"emailmessage\" value=\"". $message ."\">";
            echo "<input type=\"submit\" name=\"sendemail\" value=\"Send Email\"></form>";

        echo "</td></tr></table>";

}
else if ($_POST['sendemail'])
{
    LoadLib_PHPMailer();
    $mail = new MLMail;

    $email_array = $_POST['emaillist'];

    if ( is_array($email_array) == TRUE )
    {
            $mail->AddAddress($mail->From);
            $mail->Subject = stripslashes($_POST['emailtitle']);
            $mail->Body = stripslashes($_POST['emailmessage']);

            if(!$mail->Send())
                echo "There has been an error sending email:<br><br><b>" . $mail->ErrorInfo . "</b>";
            else
                echo "Message has been sent successfully.<br><br><a href=\"" . $_SERVER['SCRIPT_URL'] . "\">Send another message</a>";
            $mail->ClearAddresses();
    }
}
else
{
    $sEditSubject = $_POST['emailtitle'];
    if (isset($sEditSubject))
        $subject = $sEditSubject;
    else
        $subject = "";

    $sEditMessage = $_POST['emailmessage'];
    if (isset($sEditMessage))
        $message = $sEditMessage;
    else
    {
    $message = "\n\n\n<br>FOOTER</BR>\n\n";
    }
    echo "Subject:";
    echo "<br><input type=\"text\" name=\"emailtitle\" size=\"80\" value=\"" . htmlspecialchars(stripslashes($subject)) . "\"></input>";
    echo "<br>Message:";
    echo "<br><textarea name=\"emailmessage\" rows=\"20\" cols=\"72\">" . htmlspecialchars(stripslashes($message)) . "</textarea>";
    echo "<br><input type=\"submit\" name=\"preview\" value=\"Preview\"></form>";
}

?>

и это maillist-settings.inc.php, который вызывается из sendmail.php

<?php
$listname = "Mailing List";
$listfile = "list.csv";
$sPHPMAILER_PATH = "phpmailer";
$sProtocol = "http://";
$sReferrer = "index.php";
$bEmailSend = true;
$sSendType = "smtp";
$sFromEmailAddress = "email@email.com";
$sFromName = "my name";
$sSMTPHost = "mail.smtp.com";
$sSMTPAuth = true;
$sSMTPUser = "email@email.com";
$sSMTPPass = "password";
$iSMTPPort = 25;
$ishtml = true;

require $sPHPMAILERpath . "class.phpmailer.php";
require $sPHPMAILERpath . "class.smtp.php";

// Define parameters as class MLMail
class MLMail extends PHPMailer {
    // Set default variables for all new objects
    var $From;
    var $FromName;
    var $Mailer;
    var $IsHtml;
    var $WordWrap;
    var $Host;
    var $SMTPAuth;
    var $Username;
    var $Password;
    var $Port;

    function MLMail() {
        parent::SetLanguage('en','phpmailer/language/');
        $this->From = $GLOBALS['sFromEmailAddress'];
        $this->FromName = $GLOBALS['sFromName'];
        $this->Mailer = $GLOBALS['sSendType'];
        $this->IsHtml = $GLOBALS['ishtml'];
        $this->WordWrap = $GLOBALS['sWordWrap'];
        if ($this->Mailer == "smtp")
        {
            $this->Port = $GLOBALS['iSMTPPort'];
            $this->Host = $GLOBALS['sSMTPHost'];
            $this->SMTPAuth = $GLOBALS['sSMTPAuth'];
            if ($this->SMTPAuth) {
                $this->Username = $GLOBALS['sSMTPUser'];
                $this->Password = $GLOBALS['sSMTPPass'];
            }
        }
    }
}

1 Ответ

0 голосов
/ 15 февраля 2012

этот скрипт, который вы используете, является расширением Phpmailer.Вы правы, когда упоминаете переменную isHTML, но эту переменную необходимо установить, используя встроенный метод для класса Phpmailer.

В своем файле sendmail.php добавьте следующую (третью) строку:

  $mail->AddAddress($mail->From);
  $mail->Subject = stripslashes($_POST['emailtitle']);

  $mail->IsHTML(true);

  $mail->Body = stripslashes($_POST['emailmessage']);

Возможно, вы также захотите указать электронную почту, отличную от HTML (поскольку некоторые почтовые клиенты этого не делают).принимать электронные письма в формате HTML), и в этом случае вы можете добавить что-то вроде этого после строки $ mail-> Body:

  $mail->AltBody= striptags(stripslashes($_POST['emailmessage']));

, которая также будет обслуживать не HTML-версию для отправки - какотступать.

...