3

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 ライブラリをダウンロードしましたが、メールを送信しませんでした。Windows で Xampp を使用して実行しようとしたところ、動作しました。同じバージョンの 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 では動作しません。

4

1 に答える 1

0

というわけで、やっとPHP経由でメールが送れるようになりました。PHPMailer ライブラリは PHP 5.1.6 で適切に動作しませんでした。そのため、(最終的に) 次のようなエラーが発生したため、いくつか試してみました。

解析エラー: 構文エラー、3040 行目の var/www/html/[...]/class.phpmailer.php の予期しない T_FUNCTION

そこで、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;
        //        });
        //}
    }
于 2015-11-09T16:27:46.123 に答える