2011-07-28 21 views
0

ローカルサーバーのcakephpシェルからの電子メールを受信できません。ubuntuサーバーのcakephpシェルから電子メールを送信できません

私はubuntuサーバーを設定しており、report.phpmyapp/vendors/shellsにあります。 report.phpの構成は次のとおりです。

<?php 
class EmailShell extends Shell {  

    function main() { 
     App::import('Core', 'Controller'); 
     App::import('Component', 'Email'); 
     $this->Controller =& new Controller(); 
     $this->Email =& new EmailComponent(null); 
     $this->Email->initialize($this->Controller); 

     $this->Email->to = '[email protected]'; 
     $this->Email->subject = 'spain'; 
     $this->Email->from = 'blabla <[email protected]>'; 
     $this->Email->send('test email'); 
     $this->out('email sent'); 
    } 

} 
?> 

私はコンソールでこのシェルを実行して、私の受信トレイに出力が、無電子メール「送信されたメール」を受け取ることができます。私は正常に私の電子メールアドレスに電子メールを送信するコントローラでも同様のアクションを実行することができます。どちらの場合も、電子メールスクリプトが実行されると、1分でハングアップしてから、電子メールが正常に送信されます。

これには多くの変数がありますが、シェルからではなくコントローラからの電子メールを送信できるので、これを問題としてサーバーを削除すると仮定します。

ご迷惑をおかけして申し訳ありません。

+0

ローカルメールを送信するのはかなり瞬間的でなければなりません。タイムアウトになっている可能性がある外部SMTPサーバーを使用しているため、ローカルサービスにフォールバックが発生していますか? –

+0

私は外部SMTPサーバを持っていません(私はそう思わない)sendmailをインストールしたローカルのubunterサーバ – Alex

答えて

1

DNSの問題である可能性があります。sendmailがデーモンとして実行されていない場合、メールの送信イベントごとに起動します。サーバーのホスト名が起動時にsendmailによって参照/解決できない場合、DNS検索がタイムアウトするのを待って待機します。最終的には続行されますが、この検索はsendmailが起動するたびに行われます。

0

これは本当に奇妙な状況です。それはコントローラからまったく動作しているのは気が狂っている。 * nixディストリビューションは、デフォルトでsendmailをロールするのが好きです。 PHPはコントローラから電子メールを送ることができるでしょう。PHPは通常はApacheの権限でシステムユーザとして実行されるからです。一方、Cronは、(クールショック!)メールサーバーなどのものを除いて、誰でもそれを呼び出した者(つまりあなた)のパーマを拾います。そして、cronが使用できないようにする可能性のあるものが2千万もありますsendmail。

かねえ、どのようにそれらのGoogle SMTP設定試合::)

$this->Email->smtpOptions = array( 'port'=>'465', 
            'timeout'=>'30', 
            'host' => 'ssl://smtp.gmail.com', 
            'username'=>'[email protected]', 
            'password'=>'frosting', 
          ); 

マインドあなたは私が前にシェルで自分自身をGmailに設定していないので、何の約束が、これはまっすぐに私のコントローラから出てきたしていません私のサーバーとそれは私のために正常に動作します。

- $ this-> Email-> send()は実際に送信しているのですか、エラー処理していないだけですか?

if($this->Email->send('test email')) { 
    $this->out('email sent'); 
} else { 
    $this->out('email falled'); 
} 

- 送信しているとすれば、送信しようとしているものは何ですか?ケーキのアプリのログに加えて

$this->Email->delivery = 'debug'; 
// Untested, but you get the idea 
$mail = $this->Email->send(); 
$this->out($mail); 

(必要に応じて、デバッグとロギングをオンにする)アプリを/ tmp /ログ/、は/ var/log /メッセージ、maillogに、安全で、Apacheのサーバーのログ内のすべてがこれを反映することになります。

- HTH :)

関連する問題