【问题标题】:I can't send email via php on Elastix我无法在 Elastix 上通过 php 发送电子邮件
【发布时间】:2015-11-09 16:17:52
【问题描述】:

我正在尝试在 Elastix 上通过 php 发送电子邮件。 当我将 php 作为 ssh 运行时,它可以工作,但是当我尝试在 Web (PHP) 上运行时,我什么也没发送。 这是我的代码:

#!/usr/bin/php -q  
<?php
    echo shell_exec('whoami');
    shell_exec("sudo sendEmail -f j.example@example.com -t example@example.com -u Subject -m Message-s example.com.mx -o tls=yes -xu j.user@example.com.mx -xp password");
?>

我认为是关于权限的,因为当我在命令行上运行它时,输出是:

电子邮件已发送。但是当我尝试通过 Web 打开文件时,我什么也没发送,输出是下一个:

星号

所以我尝试给 Asteriks 根权限,但它不起作用:(。 在另一个尝试中,我下载了 PHPMailer 库,但我没有发送电子邮件。我尝试使用 Xampp 在 Windows 上执行此操作,它可以工作并且与 PHP (5.1.6) 的版本相同。

这是我的 PHPMailer 代码:

<?PHP
    $mail = new PHPMailer;

    $mail->isSMTP();                                   
    $mail->Host = 'example.com';
    $mail->SMTPAuth = true;           
    $mail->Username = 'example@example.com';      
    $mail->Password = 'password';              
    $mail->SMTPSecure = 'ssl';             
    $mail->Port = 465;
    $mail->SMTPOptions = array(
        'ssl' => array(
            'verify_peer' => false,
            'verify_peer_name' => false,
            'allow_self_signed' => true
        )
    );

    $mail->From = 'example@example.com';
    $mail->FromName = 'Name';
    $mail->addAddress('example@example.com'); 

    $mail->WordWrap = 50;                                
    $mail->isHTML(true); 

    $mail->Subject = 'Here is the subject';
    $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
    if(!$mail->send()) {

        echo 'Message could not be sent.';
        echo 'Mailer Error: ' . $mail->ErrorInfo;
    } else {
        echo 'Message has been sent';
    }
?>

它适用于 Windows,但不适用于 Elastix 有什么帮助吗?

【问题讨论】:

  • whoami 毫无意义,因为您使用的是 sudo - 您以 root 身份运行 sendEmail。既然你已经用 phpmailer 标记了这个,那么你的 phpmailer 代码在哪里?如果您使用的是 phpmailer,为什么首先要使用 shell_exec?
  • 我在另一个答案中添加了代码。抱歉,我是 Stackoverflow 的新手 :( 感谢您的回答 :)
  • 您可以编辑您的问题。不要发布其他信息作为答案。无论如何,您会遇到什么(如果有的话)错误?如果 phpmailer 没有吐出错误,那么这不是 php 问题。 PHP 的工作相当于从你那里拿一个信封,然后把它从街角的邮箱里走下来。一旦信封落入插槽,php 的工作就完成了,它报告成功。如果邮局随后丢失了您的邮件,那不是 php 的问题,并且首先对 php 不可见。
  • 不,我没有收到任何错误,只是一个空白页。
  • 那么在你的脚本到达 send() 调用之前,有些东西正在破坏你的脚本。打开 display_errors 和 error_reporting。那些不应该首先在调试/开发系统上关闭。

标签: php email phpmailer elastix


【解决方案1】:

所以,我终于能够通过 PHP 发送电子邮件了。 PHPMailer 库在 PHP 5.1.6 上无法正常工作 所以我尝试了几次,因为(最终)给我的错误是:

解析错误:语法错误,意外的 T_FUNCTION 在 var/www/html/[...]/class.phpmailer.php 在第 3040 行

所以我偶然发现了class.phpmailer.php的代码:

/**
     * Clear queued addresses of given kind.
     * @access protected
     * @param string $kind 'to', 'cc', or 'bcc'
     * @return void
     */
    protected function clearQueuedAddresses($kind)
    {
        //if (version_compare(PHP_VERSION, '5.3.0', '<')) {
            $RecipientsQueue = $this->RecipientsQueue;
            foreach ($RecipientsQueue as $address => $params) {
                if ($params[0] == $kind) {
                    unset($this->RecipientsQueue[$address]);
                }
            }
        //} else {
        //    $this->RecipientsQueue = array_filter(
        //        $this->RecipientsQueue,
        //        function ($params) use ($kind) {
        //            return $params[0] != $kind;
        //        });
        //}
    }

【讨论】:

  • 完成,我添加了我的问题的答案。谢谢
  • 所以从技术上讲,问题在于您注释掉的代码使用了仅在 PHP 5.3+ 中受支持的匿名函数 (php.net/manual/en/functions.anonymous.php) 而不是注释掉潜在重要的代码,也许您应该考虑使用超过 8 年的 PHP 版本(这在软件开发领域是永恒的)。但是,我不知道为什么 if 语句让您一开始就走错了路。它应该为您处理向后兼容性方面的问题。
  • 哈哈!我知道,但我无权更新 PHP 的版本。所以我必须使用那个版本:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-21
  • 2017-12-14
  • 2013-04-26
  • 2012-01-26
  • 2014-05-28
相关资源
最近更新 更多