如何在Joomla2.5中实例化mail()函数并发送电子邮件?

7

根据Joomla!文档@http://docs.joomla.org/Sending_email_from_extensions,我尝试使用以下代码发送电子邮件:

function sendmail($file,$mailto)
{  
    $mailer =& JFactory::getMailer();
    //var_dump($mailer); exit;
    $config =&JFactory::getConfig();
    $sender = array( 
        $config->getValue( 'config.mailfrom' ),
        $config->getValue( 'config.fromname' )
    );

    $mailer->setSender($sender);         

    $recipient = array($mailto);           
    $mailer->addRecipient($recipient);

    $body   = "Your body string\nin double quotes if you want to parse the \nnewlines etc";
    $mailer->setSubject('Your subject string');
    $mailer->setBody($body);
    // Optional file attached

    $mailer->addAttachment(JPATH_BASE.DS.'CSV'.DS.$file);

    $send =&$mailer->Send();

    if ( $send !== true ) {
        echo 'Error sending email: ' . $send->message;
    } else {
        echo 'Mail sent';
    }
}

($file 是 zip 文件的完整路径,$mailto 是我的 gmail 地址。)

然而,当我发送邮件时,我收到以下错误提示:

无法实例化邮件函数。
致命错误: 在 /var/www/html/dai/components/com_servicemanager/views/i0602/view.html.php 的第142行中无法访问受保护的属性 JException::$message

是什么导致了这个错误?


4
view.html.php的第142行是什么? - GBD
但主要问题是无法实例化邮件功能。 - mum
你可以尝试在 Joomla 管理面板的全局配置下设置 SMTP 设置吗? - GBD
GBD:我在全局配置中设置为SMTP,显示回显'Mail sent';但是在邮件中,我没有收到邮件。 - mum
好的。谢谢大家,我已经成功发送了。 - mum
显示剩余4条评论
4个回答

2
请节约您的时间和精力,不要尝试使用Joomla自带的邮件发送功能。这个功能不可靠,会出现问题,并且无法良好地处理不同字符集和HTML内容。请使用PHPMailer替代。

1
在Joomla中发送带附件的邮件。
   $from="noreplay@gmail.com";//Please set Proper email id
   $fromname="noreplay";
   $to ='admin@gmail.com';
   // Set a you want send email to
   $subject = "Download";
   $message = "Thank you For Downloading";
   $attachment = JPATH_BASE.'/media/demo.pdf';
   // set a file path
   $res = JFactory::getMailer()->sendMail($from, $fromname, $to,$subject,     $message,$mode=1,$cc = null, $bcc = null, $attachment);
   if($res)
   {
        $errormsg = "Mail Successfully Send";
   }
   else
   {
     $errormsg ="Mail Not Send";
   }

在你检查了收件箱或垃圾邮件文件夹后。
邮件出现在垃圾邮件文件夹中是因为发件人的邮件地址未设置正确。


1

echo 'Error sending email: ' . $send->message;

改为

echo 'Error sending email:'.$send->get('message');

然后再次运行您的代码。您得到的错误应该告诉我们为什么它没有实例化。


0
经过几年的Joomla开发,我建议使用RSJOOMLA的RSFORM PRO来为您发送邮件,以便在访问者填写表单后。相比于处理内部邮件服务器,这样做要容易得多。

也许将一些免费的联系扩展链接给OP是个好主意。并不是每个人都选择商业方式;) 我自己通常使用标准默认的联系表单,但如果我需要更复杂的东西,我会使用aiContactSafe。 - Lodder
公司rsjoomla推出了一个免费版本,功能较少,但仅适用于Joomla 1.5: http://www.rsjoomla.com/joomla-extensions/rsform.html在Joomla扩展目录中可能还有其他免费的选项: http://extensions.joomla.org但我发现RS Form Pro物有所值。 - Edward
2
真的,不过这个问题是关于2.5的 ;) - Lodder
如果OP决定自己编写代码,1.5中的代码仍然很有参考价值。研究代码,学习专业人士的做法! - Edward

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接