【问题标题】:E-mail not getting sent in Joomla in combo with VM在 Joomla 与 VM 的组合中未发送电子邮件
【发布时间】:2014-10-06 14:01:09
【问题描述】:

我是新来的,所以请多多包涵。我对代码相当noobish,我主要是网页设计师,而不是开发人员。但是我自己的网络开发人员在解决这个问题时遇到了困难,所以我试图在我能得到的地方寻求帮助。 所以,我们在 Virtuemart 商店遇到了这个问题,它运行 2.5.23 版的 Joomla 和 VM 2.6.10。

服务器信息:

  • PHP 构建于 Linux web04 3.13.0-35-generic #62~precise1-Ubuntu
  • 数据库版本: 5.1.73-0ubuntu0.10.04.1-log
  • 数据库整理: utf8_general_ci
  • PHP 版本: 5.3.10-1ubuntu3.14
  • 网络服务器: Apache
  • WebServer 到 PHP 接口: apache2handler
  • Joomla!版本: Joomla! 2.5.23 稳定 [Ember] 2014 年 7 月 24 日 14:00 GMT

所以这不是在任何地方发送邮件。我们在测试服务器上得到了它,在那里,生活很美好。它正在发送电子邮件。测试服务器正在运行 PHP 5.24。

我已经用它来查看是否可以检查:

<?php

$to = "dontsentmemail@gmail.com";
if( mail( $to , 'This is a test message.' , 'Is this working?' ) ) {
    echo 'Email sent.';
} else {
    echo 'Email failed to send.';
}

?>

这工作正常。我要拔掉我所有的头发。我们已经尝试过 SMTP 邮件处理,并且再次在测试服务器上运行得很好,但它在实时站点上无法运行。

有人知道 VM/joomla 是直接使用 mail() 还是默认使用 JUtility::sendMail(),如果我们可以改变它,让它工作?有人有什么想法吗?

【问题讨论】:

  • 还检查了服务器没有被列入黑名单,没关系..
  • mail() 返回 false?那么 php 配置错误或者您没有安装 SMTP 服务器。回归真的了吗?然后查看 smtp 服务器的日志,看看 PHP 交出邮件后会发生什么。
  • 你为什么不使用Joomla内置的JMail类?
  • 我可以编辑这段代码以查看 JMail 是否可以解决它吗?
  • @Kimberly - 请参阅我的回答;)

标签: php email joomla


【解决方案1】:

编辑

我不知道 Joomla 已经包含了它自己的 PHPMailer 版本。请参阅 Lodder 的答案以获得更好的开箱即用解决方案!


尝试切换到专业邮件库,例如PHPMailer发送邮件,代替php的邮件功能。

我也有类似的问题,电子邮件已发送但未送达,也没有退回邮件。 PHPMailer 成功地发送了也已送达的电子邮件。

<?php
require_once('path/to/PHPMailerAutoload.php');

//Create a new PHPMailer instance
$mail = new PHPMailer();

// Set PHPMailer to use the sendmail transport
$mail->isSendmail();

// Set who the message is to be sent from
// Name is optional
$mail->setFrom('somebody@yourdomain.com', 'Joe Bloggs');

//Set who the message is to be sent to
// Name is optional
$mail->addAddress('dontsentmemail@gmail.com', 'Jane Bliggs');

//Set the subject line
$mail->Subject = 'Is this working?';

// Set plain text body
$mail->IsHTML(false);
$mail->Body = 'This is a test message.';

//send the message, check for errors
if (!$mail->send()) {
    echo "Mailer Error: " . $mail->ErrorInfo;
}

【讨论】:

  • 当 Joomla 有自己的内置方法时,手动导入 PHPMailer 没有意义;)
  • 不熟悉 Joomla。听起来不错!
【解决方案2】:

我个人会使用 Joomla 的内置 JMail 类,它使用 PHPMailer。请看以下内容:

$mailer = JFactory::getMailer();

$mailer->setSender('dontsentmemail@gmail.com');
$mailer->addRecipient('from@emailaddress.com');
$mailer->setSubject('Your subject');

$body = "Some email text";
$mailer->setBody($body);

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

您可能希望将from@emailaddress.com 更改为适合您需要的任何内容。这个类还有一些额外的特性可以在 Joomla 文档中找到:

http://docs.joomla.org/Sending_email_from_extensions

更新:

我不知道您使用的是单独的 PHP 文件。在 PHP 文件的顶部,您需要像这样导入 Joomla 框架:

define( '_JEXEC', 1 );
define('JPATH_BASE', __DIR__);
require_once ( JPATH_BASE .'/includes/defines.php' );
require_once ( JPATH_BASE .'/includes/framework.php' );

$app = JFactory::getApplication('site');

您可能需要更改 JPATH_BASE 的值,以便您的脚本指向您的 Joomla 站点的根目录,相对于您的 PHP 文件所在的位置。

希望对你有帮助

【讨论】:

  • 当我在 php 文件中使用您的代码进行测试时,我得到一个空白屏幕。我把它放在网站的根目录下,也许这就是问题所在?我什至没有收到“发送电子邮件错误”的回声。
  • @Kimberly - 您不能简单地在单独的 PHP 文件中使用 Joomla 代码。如果您希望这样做,您需要导入 Joomla 框架。查看我的更新答案
  • 如果您在 joomla 框架之外使用 php 文件,则需要将 joomla 框架加载到该文件中。 stackoverflow.com/questions/23937651/…
  • 嘿洛德,不知道,哎呀!马上试试!
  • 现在有点想不通了,我按照您的要求上传了脚本,并在根映射中导入了 joomla 框架。从 root 开始,它与示例中的 JPATH_BASE 相同,对吧?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-02
相关资源
最近更新 更多