2017-04-26 9 views
0

hostgatorサーバーにcronジョブを設定して、値1(電子メール送信)を返しますが、電子メールは実際に送信しません。ブラウザでPHPファイルを手動で呼び出すと、電子メールが送信されます。 cron経由で実行されている場合はありません。Cronジョブが電子メールを送信しない

今月初め、私は自分のサイトをhostgator上のあるサーバーから別のサーバー(hostgator上)に移動し、SSLと専用のIPアドレスを取得できました。サイトを移動してから、cronジョブは、以外は、を除いて、電子メールを送信する部分(つまり、データベース機能は正常に動作します)で動作します。私はhostgatorの技術サポートに連絡しましたが、彼は問題が私のコードにあると考えています。

私のサーバーの情報が間違っていたと思われるので、私はsmtp.gmail.comを使用してメールを送信するためにgmailアカウントを使用しましたが、それもうまくいきませんでした。助けてください!

* 7 * * * /opt/php56/bin/php /home/user/public_html/somefolder/sendmailcron.php 

(テストが、私は2分ごとに実行するように変更:*/2 * * * *)

cronジョブは、次のように設定されている

ここsendmailcron.phpですスクリプト:

<?php 

$now = date("Y-m-d H:i:s"); 

$msgcontent = []; 
$msgcontent['email'] = "[email protected]"; 
$msgcontent['name'] = "Recipient Name"; 
$msgcontent['textpart'] = "This is the text version of the email body."; 
$msgcontent['htmlpart'] = "<p>This is the <strong>HTML</strong> version of the email body.</p>"; 
$msgcontent['subject'] = "Test email sent at " . $now; 

$result = sendMyMail($msgcontent, "HTML"); 
exit();  

function sendMyMail($msgcontent, $format="HTML") { 
    require_once '/home/user/public_html/somefolder/swiftmailer/lib/swift_required.php'; 

    $result = 0; 
    $subject = $msgcontent['subject']; 
    $email = $msgcontent['email']; 
    if (strlen($email) == 0) { 
     return 0; 
    } 
    $name = $msgcontent['name']; 

    $emailbody = $msgcontent['textpart']; 
    $emailpart = $msgcontent['htmlpart']; 

    switch($format) { 
     case "TEXT": 
      $msgformat = 'text/plain'; 
      break; 
     case "HTML": 
      $msgformat = 'text/html; charset=UTF-8'; 
      break; 
     default: 
      $msgformat = 'text/html'; 
      break; 
    } 

    $adminemailaddress = "[email protected]"; 
    $adminemailpwd  = 'myadminpwd'; 
    $sendername  = 'My Real Name'; 

    $transport = Swift_SmtpTransport::newInstance('mygator1234.hostgator.com', 465, "ssl") 
     ->setUsername($adminemailaddress) 
     ->setPassword($adminemailpwd) 
     ; 

    $mailer = Swift_Mailer::newInstance($transport); 

    // Create the message 
    if($format == "TEXT") { 
     $message = Swift_Message::newInstance($subject) 
      ->setFrom(array($adminemailaddress => $sendername)) 
      ->setTo(array($email => $name)) 
      ->setBody($emailbody) 
      ->setContentType($msgformat) 
      ; 
    } 

    else { 
     $message = Swift_Message::newInstance($subject) 
      ->setFrom(array($adminemailaddress => $sendername)) 
      ->setTo(array($email => $name)) 
      ->setBody($emailpart) 
      ->setContentType($msgformat) 
      ; 
    } 

    //This is where we send the email 
    try { 
     $result = $mailer->send($message); //returns the number of messages sent 
    } catch(\Swift_TransportException $e){ 
     $response = $e->getMessage() ; 
    } 
    return $result; //will be 1 if success or 0 if fail 
} 

?> 

戻り値は常に1ですが、電子メールは送信されません。

ご意見をいただければ幸いです!

+0

メールログファイルを確認しましたか?コマンドラインからスクリプトを実行するとどうなりますか? – nogad

+0

ブラウザから実行すると、メールが送信されます。 PuTTYシェルまたはcronジョブから実行すると、電子メールは送信されません。 – rottlover

+0

解決策: メールがSMTPサーバーのスパムフィルタによって妨害されていることが判明しました。 hostgatorのテクニカルサポートで2.5時間後、問題が解決したようです。私はそれがコーディングの問題ではなかったことをうれしく思っています。 ;) – rottlover

答えて

0

cronジョブは、ブラウザが使用するものとは異なるphp.ini構成ファイルを使用します。

/opt/php56/bin/php -d safe_mode=Off /home/user/public_html/somefolder/sendmailcron.php 

と電子メールは現在送信されたかどうかを確認:

はこのように、safe_modeを無効にすることでcronジョブを実行してみてください。

+0

提案をいただきありがとうございますが、残念ながらこの変更を行った後にメールは送信されませんでした。 :( – rottlover

関連する問題