在joomla电子邮件中添加html输出

时间:2015-04-25 10:40:06

标签: php html joomla3.0

我正在尝试在joomla发送的电子邮件的输出上设置html。我的文件位于joomla核心。 我知道我必须添加类似 - > isHTML(true);但我不知道在哪里以及如何。 这是代码:

class MailtoController extends JControllerLegacy
{
/**
 * Show the form so that the user can send the link to someone.
 *
 * @return  void
 *
 * @since 1.5
 */
public function mailto()
{
    $session = JFactory::getSession();
    $session->set('com_mailto.formtime', time());
    $this->input->set('view', 'mailto');
    $this->display();

}


public function send()
{
    // Check for request forgeries
    JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN'));

    $app     = JFactory::getApplication();
    $session = JFactory::getSession();
    $timeout = $session->get('com_mailto.formtime', 0);

    if ($timeout == 0 || time() - $timeout < 1)
    {
        JError::raiseNotice(500, JText::_('COM_MAILTO_EMAIL_NOT_SENT'));

        return $this->mailto();
    }

    $SiteName = $app->get('sitename');
    $link     = MailtoHelper::validateHash($this->input->get('link', '', 'post'));

    // Verify that this is a local link
    if (!$link || !JUri::isInternal($link))
    {
        // Non-local url...
        JError::raiseNotice(500, JText::_('COM_MAILTO_EMAIL_NOT_SENT'));

        return $this->mailto();
    }

    // An array of email headers we do not want to allow as input
    $headers = array (
        'Content-Type:',
        'MIME-Version:',
        'Content-Transfer-Encoding:',
        'bcc:',
        'cc:'
    );

    // An array of the input fields to scan for injected headers
    $fields = array(
        'mailto',
        'sender',
        'from',
        'subject',
    );

    /*
     * Here is the meat and potatoes of the header injection test.  We
     * iterate over the array of form input and check for header strings.
     * If we find one, send an unauthorized header and die.
     */
    foreach ($fields as $field)
    {
        foreach ($headers as $header)
        {
            if (strpos($_POST[$field], $header) !== false)
            {
                JError::raiseError(403, '');
            }
        }
    }

    /*
     * Free up memory
     */
    unset ($headers, $fields);

    $email           = $this->input->post->getString('mailto', '');
    $sender          = $this->input->post->getString('sender', '');
    $from            = $this->input->post->getString('from', '');
    $subject_default = JText::sprintf('COM_MAILTO_SENT_BY', $sender);
    $subject         = $this->input->post->getString('subject', $subject_default);

    // Check for a valid to address
    $error = false;

    if (!$email || !JMailHelper::isEmailAddress($email))
    {
        $error = JText::sprintf('COM_MAILTO_EMAIL_INVALID', $email);
        JError::raiseWarning(0, $error);
    }

    // Check for a valid from address
    if (!$from || !JMailHelper::isEmailAddress($from))
    {
        $error = JText::sprintf('COM_MAILTO_EMAIL_INVALID', $from);
        JError::raiseWarning(0, $error);
    }

    if ($error)
    {
        return $this->mailto();
    }

    // Build the message to send
    $msg  = JText::_('COM_MAILTO_EMAIL_MSG');
    $link = $link;
    //$body = sprintf($msg, $SiteName, $sender, $from, $link);
    $body = "<p>Hello Test F,</p><br/><p>Thank you for registering at Deals&offers. Your account is created and activated.</p><br/>You may login to ".$SiteName." using the following username and password:</br><p>Username: ".$sender."</p><p>Password: ".$from."/p><br/><p><b>Note:</b> It is recomended to change your password after first login. ".$link."</p>";

    // Clean the email data
    $subject = JMailHelper::cleanSubject($subject);
    $body    = JMailHelper::cleanBody($body);

    // To send we need to use punycode.
    $from  = JStringPunycode::emailToPunycode($from);
    $from  = JMailHelper::cleanAddress($from);
    $email = JStringPunycode::emailToPunycode($email);

    // Send the email
    if (JFactory::getMailer()->sendMail($from, $sender, $email, $subject, $body) !== true)
    {
        JError::raiseNotice(500, JText::_('COM_MAILTO_EMAIL_NOT_SENT'));

        return $this->mailto();
    }

    JFactory::getApplication()->enqueueMessage('ok!', '');
    $this->input->set('view', 'sent');
    $this->display();
}
}

非常感谢

1 个答案:

答案 0 :(得分:0)

你可以在身体之前或在主体和身体之间添加。但是,它必须在提交命令之前! 这里首先是PhpMailler的一个例子,你需要像这样调用类,你可以使用它

  $this->mail= new PHPMailer();
          $this->mail->IsSMTP(); 

$this->mailIsHTML(true);
$subject = JMailHelper::cleanSubject($subject);
$body    = JMailHelper::cleanBody($body);

但是如果函数是静态的,那么你也可以在同一个类中调用该函数 你可以通过sef命令调用该函数

self::mailIsHTML(true)