2017-03-05 8 views
3

PHPのmail()関数でHTMLコンテンツを送信しようとしています。自分のコードに何が間違っているのか分かりません。私は時間を費やし、多くの方法を試しました。しかし、何もうまくいかなかった。誰も私のコードで何が間違っているか教えてください。PHP mail()関数がHTMLを送信しない

<?php 
$to = "[email protected]"; 
$today = date("Y/m/d"); 
$today = $today." 00:00"; 
$count_cash_inc = mysql_query("SELECT sum(income) as inc, sum(expense) as exp FROM journal_entry WHERE `date` >= '$today'"); 
$inc = mysql_fetch_array($count_cash_inc); 
$income_c = $inc['inc']; 
$epense_c = $inc['exp']; 
$counter_cash = $income_c - $epense_c; 
$subject = "Daily Report From Sri Sankalpa"; 
$headers = "From: [email protected]\r\n"; 
$headers .= "Reply-To: [email protected]\r\n"; 
$headers .= "CC: [email protected]\r\n"; 
$headers .= "MIME-Version: 1.0\r\n"; 
$headers .= "Content-Type: text/html; charset=UTF-8\r\n"; 
$message = '<center><h1>Sri Sankalpa Daily Journal Report</h1>'; 
$message .= '<br><table><tr><td>Date</td><td>Total Income</td><td>Total Expense</td><td>Balance</td></tr>'; 
$message .= '<tr><td>'.date("d-m-Y").'</td><td>'.$income_c.'</td><td>'.$epense_c.'</td><td>'.$counter_cash.'</td></tr></table><br>'; 
$message .= '<p>To Know More... Please Click <strong><a target="_blank" href="http://srisankalpa.com/demo/journal_entry.php">HERE</a></strong></p></center>'; 
mail($to, $subject, $message, $headers); 
?> 

\ r、\ r \ nを削除し、charset = UTF-8をcharset = iso-8859-1に変更しようとしました。しかし、何も動作しません。あなたのお手伝いをお待ちしております。以下の行のないプレーンテキストとして完全に送信するメール

$headers .= "Content-Type: text/html; charset=UTF-8\r\n"; 
+1

単純な 'mail()'よりも高度で、簡単にエラーを追跡する[PHPmailer](http://phpmailer.worxware.com/)を使用してください。 –

+0

メールは送信されても​​Gmailはそれを削除しました(スパム)。これを防ぐには、phpmailerを使用するだけです。 –

+0

このヘッダーを追加します。 '$ headers。= 'コンテンツタイプ:text/html; charset = iso-8859-1 'となります。 "\ r \ n"; ' –

答えて

1

php mail()関数の使用をやめてください! PHPMailerを使用し、SMTP経由で電子メールを送信します。

$mail->IsHTML(true);  // <=== call IsHTML() after $mail->Body has been set. 

例:

<?php 
require("class.phpmailer.php"); 
$mail = new PHPMailer();$mail = new PHPMailer(); 
$mail->IsSMTP(); 
$mail->Host = "smtp1.example.com;smtp2.example.com"; 
$mail->SMTPAuth = true; 
$mail->Username = 'smtpusername'; 
$mail->Password = 'smtppassword'; 

$mail->From="[email protected]"; 
$mail->FromName="My site's mailer"; 
$mail->Sender="[email protected]"; 
$mail->AddReplyTo("[email protected]", "Replies for my site"); 

$mail->AddAddress("[email protected]"); 
$mail->Subject = "Test 1"; 

$mail->IsHTML(true); 
$mail->Body = "<h1>Test 1 of PHPMailer html</h1><img src="http://wallpaper-gallery.net/images/ball/ball-17.jpg" style="width:220px; height:59px; margin-bottom:15px"><p>This is a test</p>"; 
$mail->AltBody="This is text only alternative body."; 

if(!$mail->Send()) 
{ 
    echo "Error sending: " . $mail->ErrorInfo;; 
} 
else 
{ 
    echo "Letter is sent"; 
} 
?> 
+0

OPが尋ねるものとは関係ありません –

+1

より良いアプローチのOPを指示してください –

+0

まず最初に問題を解決してから何を提案してください –

4

私は私のオンラインサーバー上でスクリプトを実行しているし、私のために、SQLクエリと変数を含めないとはいえ、正常に動作するようです。

あなたのメールが送信されない理由はいくつかあります。あなたがローカルホスト上でこのスクリプトを実行している場合は

ローカルホストのメールサーバが

を設定していない、あなたのローカルホスト上でメールサーバを設定する必要はありませんよう、mailはほとんど機能しません。 this answer on setting up a mail server on your localhost (XAMPP)を読んでください。

チェックサーバーのログ

は、メールを送信しようとしたときに出ている可能性のあるエラーのためにサーバーのログで見てください。ログファイルは、通常、 logsフォルダ内またはそれに類するサーバー内のルートディレクトリにあります。 This answer will help you identify the mail logs location

メールがホストによってブロックされています。

ホストと確認してください。ホストしている相手によっては、送信メールをブロックしている場合としていない場合があります。多くの人がPHPのmailを悪意のある目的で使用しているため、一部のホストでは単純に無効にすることがあります。彼らは代わりにSMTPサーバーを使用することをお勧めします。

メールがスパムとしてマークされている可能性があります。

迷惑メールフォルダを確認してください。 Gmailはmailで送信されたメールのファンではなく、おそらくあなたのメールをスパムフォルダに入れます。

重複行が\n\rがあなたのヘッダ文字列内の重複改行を引き起こす可能性が使用して、いくつかのケースでは、あなたのヘッダ文字列

に壊れます。代わりに\rまたは\nを使用してください。

文字エンコーディング

あなたがPHPMailerのようなものを使用したほうが良いでしょう、あなたのローカルホスト上でメールを送信するために$headers .= "Content-Type: text/html; charset=UTF-8\r\n"; PHPのmail();

よりもより良い代替

$headers .= "Content-Type: text/html; charset=iso-8859-1\r\n";から切り替えてみてください。これにより、SMTPサーバー経由でメールを送信できます。便利なチュートリアルhereがあります。

+0

私は共有ホスト上で実行しています。 – SHAKTHI

+0

あなたのホストが 'mail'からの送信メールを許可していない可能性があります。 –

+0

ああ、Hostingサポートチームに確認してください。しかし、私が言及したように、この行はありません。 $ headers。= "Content-Type:text/html; charset = UTF-8 \ r \ n"; mail()関数はプレーンテキストとして正常に動作します。 – SHAKTHI

関連する問題