地址中的以下内容失败:myname@gmail.com

时间:2012-12-04 06:15:21

标签: joomla2.5

我正在尝试在Joomla 2.5中构建联系表单。在填写所有字段并提交表单后,我收到如下错误:

  

以下地址失败:myname@gmail.com。

我使用的电子邮件是有效的。

我的SMTP设置如下:

邮件设置

Mailer: SMTP Server
Mail from: myname@gmail.com
From Name: joomla 
Sendmail Path: /usr/sbin/sendmail
SMTP Authentication: Yes
SMTP Security: SSL 
SMTP Port: 465 
SMTP Username: myname@gmail.com
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();
    }
}

2 个答案:

答案 0 :(得分:0)

只需在管理页面的全局配置中更改邮件程序进行检查

答案 1 :(得分:0)

在Linux(SELINUX)上申请:
setsebool -P httpd_can_network_connect = 1
setsebool -P httpd_can_sendmail = 1

重新启动

在Windows上:
在php.ini中 取消注释
;延长= php_openssl.dll