2012-12-04 38 views
4

我想在Joomla 2.5中建立聯繫表單。填寫完所有字段並提交表單後,我得到如下錯誤:以下地址失敗:[email protected]

以下來自地址失敗:[email protected]

我使用的電子郵件是有效的。

我的SMTP設置如下:

郵件設置

Mailer: SMTP Server 
Mail from: [email protected] 
From Name: joomla 
Sendmail Path: /usr/sbin/sendmail 
SMTP Authentication: Yes 
SMTP Security: SSL 
SMTP Port: 465 
SMTP Username: [email protected] 
SMTP Password: ****** 
SMTP Host: smtp.gmail.com 

此發送電子郵件

<?php 
/** 
* @package  Joomla.Site 
* @subpackage com_mailto 
* @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved. 
* @license  GNU General Public License version 2 or later; see LICENSE.txt 
*/ 

    defined('_JEXEC') or die; 

/** 
* @package  Joomla.Site 
* @subpackage com_mailto 
*/ 

    class MailtoController extends JControllerLegacy 
    { 
    /** 
    * Show the form so that the user can send the link to someone 
    * 
    * @access public 
    * @since 1.5*/ 

    function mailto() 

    { 
     $session = JFactory::getSession(); 
    $session->set('com_mailto.formtime', time()); 
    JRequest::setVar('view', 'mailto'); 
    $this->display(); 
    } 

    /** 
    * Send the message and display a notice 
    * 
    * @access public 
    * @since 1.5 
    */ 
    function send() 
    { 
     // Check for request forgeries 
     JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); 

     $app = JFactory::getApplication(); 
     $session = JFactory::getSession(); 
     $db = JFactory::getDbo(); 

     $timeout = $session->get('com_mailto.formtime', 0); 
     if ($timeout == 0 || time() - $timeout < 20) { 
      JError::raiseNotice(500, JText:: _ ('COM_MAILTO_EMAIL_NOT_SENT')); 
      return $this->mailto(); 
     } 

     $SiteName = $app->getCfg('sitename'); 
     $MailFrom = $app->getCfg('mailfrom'); 
     $FromName = $app->getCfg('fromname'); 

     $link  = MailtoHelper::validateHash(JRequest::getCMD('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    = JRequest::getString('mailto', '', 'post'); 
     $sender    = JRequest::getString('sender', '', 'post'); 
     $from    = JRequest::getString('from', '', 'post'); 
     $subject_default = JText::sprintf('COM_MAILTO_SENT_BY', $sender); 
     $subject   = JRequest::getString('subject', $subject_default, 'post'); 

     // 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'); 
     $body = sprintf($msg, $SiteName, $sender, $from, $link); 

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

     // 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(); 
     } 

     JRequest::setVar('view', 'sent'); 
     $this->display(); 
    } 
} 
+1

請分享代碼sendin g電子郵件。 –

+0

我指的是一些PHP代碼。這是一個編程問題嗎? –

+0

謝謝!我得到了解決方案,電子郵件現在正在好起來!我上傳我的joomla到網絡主機,現在它工作正常! – Thejdeep

回答

0

只需通過改變全局配置郵件檢查代碼管理頁面

0

在Linux(SELINUX)適用:
setsebool -P httpd_can_network_connect = 1
setsebool -P httpd_can_sendmail = 1

重啓

在Windows上:
在php.ini
UN-評論
;擴展名= php_openssl.dll

+1

這是一個英文網站,你不應該留下其他語言的評論 – Longball27

相關問題