2012-02-14 79 views
0

我试图将一些代码从一个PHP教程中展示出来,该教程展示了如何使一个非常基本的PHPMailer表单发送一个纯文本电子邮件到一个邮件列表。简单性正是我想要的大部分,因为有几个人会使用这种形式,尽管我想包括在表单中使用HTML的能力。因此,例如,我想使用<center>标签或插入托管图像<img src="www.link.com/img.jpg">以使电子邮件更丰富一点。带有textarea格式和html的PHPMailer

目前,我无法弄清楚如何启用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>"; 
} 

?> 

和这是邮件列表,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 protected]"; 
$sFromName = "my name"; 
$sSMTPHost = "mail.smtp.com"; 
$sSMTPAuth = true; 
$sSMTPUser = "[email protected]"; 
$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']; 
      } 
     } 
    } 
} 
+0

你有没有试过htmlentities? [链接](http://ch2.php.net/manual/en/function.htmlentities.php) – kamalo 2012-02-14 18:11:39

回答

0

您正在使用的脚本的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->车身行后添加如下内容:

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

,将满足对非HTML版本,以及,发送 - 作为后备。