2012-04-27 12 views
1

私は次のコードに少し問題があります。 "Send"をクリックすると、PHP警告:mail()[function.mail]: "sendmail_from"がphp.iniに設定されていないか、カスタム "From:"ヘッダーがCにありません:** * .com **もし(メール($に、$メッセージ、$:\ライン21" 上のmail.phpPHPメール機能が動作しません(jQuery/php)

<?php 
$mail = $_POST['mail']; 
$name = $_POST['name']; 
$text = $_POST['messaggio']; 
$ip = $_SERVER['REMOTE_ADDR']; 

$to = "[email protected]****.com"; 

$message = "E-mail received from: ".$name.", ".$mail.".<br />"; 
$message .= "Messaggio: <br />".$text."<br /><br />"; 
$message .= "IP: ".$ip."<br />"; 
$headers = "From: $mail \n"; 
$headers .= "Reply-To: $mail \n"; 
$headers .= "MIME-Version: 1.0 \n"; 
$headers .= "Content-Type: text/html; charset=ISO-8859-1 \n"; 

if(mail($to, $message, $headers)){ 
    echo "<h6>Message sent.</h6>"; 
} 

else{ 
    echo "<h6>Ops! We've got a problem! :(</h6>"; 
} 
?> 

言及したラインがある

$(document).ready(function(){ 
$("#send").click(function(){ 


    var valid = ''; 
    var isr = ' requested.</h6>'; 
    var name = $("#name").val(); 
    var mail = $("#email").val(); 
    var messaggio = $("#message").val(); 

    if (name.length<1) { 
     valid += '<h6>A valid name is'+isr; 
    } 
    if (!mail.match(/^([a-z0-9._-][email protected][a-z0-9._-]+\.[a-z]{2,4}$)/i)) { 
     valid += '<h6>A valid e-mail address is'+isr; 
    } 


    if (valid!='') { 
     $("#re").fadeIn("slow"); 
     $("#re").html("<h6><b>Error:</b></h6>"+valid); 
     $("#re").css("background-color","#ffc0c0"); 
    } 

    else { 
     var datastr ='name=' + name + '&mail=' + mail + '&messaggio=' + encodeURIComponent(messaggio); 
     $("#re").css("display", "block"); 
     $("#re").css("background-color","#FFFFA0"); 
     $("#re").html("<h6>Sending..</h6>"); 
     $("#re").fadeIn("slow"); 
     setTimeout("send('"+datastr+"')",2000); 
    } 
    return false; 
}); 
}); 

function send(datastr){ 
    $.ajax({  
     type: "POST", 
     url: "mail.php", 
     data: datastr, 
     cache: false, 
     success: function(html){ 
     $("#re").fadeIn("slow"); 
     $("#re").html(html); 
     $("#re").css("background-color","#e1ffc0"); 
     setTimeout('$("#re").fadeOut("slow")',2000); 
    } 
    }); 
} 

そしてPHP

これはjQueryのです」ヘッダー)){"しかし、私はエラーを理解していない。

私は別のウェブサイト(別のドメイン)でも同じコードを使用していますが、問題なく実行できます。

+0

あなた自身のMIMEメッセージを生成すべきではありません。 PHPMailerまたはSwiftmailer(それらのためのGoogle)を使用し、詳細を処理させます。電子メールヘッダーを正しく取得するのは難しく、適切に生成していません。 –

+0

は 'ini_set(" sendmail_from "、" [email protected] ");'作業しますか? –

+1

また、 '\ n \ 'の代わりに' \ r \ n'を使ってみてください。ヘッダーの分離にはCRとLFの両方が使われています。 – Basic

答えて

0

PHP.INIのSMTP設定を確認しましたか?

このコード内またはあなたのphp.iniで設定します。

<?php 
    ini_set("SMTP","smtp-server-address"); 
    ini_set('sendmail_from', 'from-email-address'); 
    ?> 

をそして、あなたは25とは異なるポートを介して送信されている場合、あなたはまた、デフォルトを上書きすることができます。

ini_set('smtp_port', '2525'); 
+0

それが問題でした。お試しいただきありがとうございます。 – TyTiKi

1

ヘッダ\r\nではなく、\nで終了する必要があります。

$headers = "From: $mail \r\n"; 
$headers .= "Reply-To: $mail \r\n"; 
$headers .= "MIME-Version: 1.0 \r\n"; 
$headers .= "Content-Type: text/html; charset=ISO-8859-1 \r\n"; 

また、あなたのコード内のヘッダインジェクションの脆弱性があります。電子メールヘッダーに入れたすべての投稿データを検証する必要があります。

0

あなたがして、ヘッダーからあなたを交換してみてください:

$headers = "From: $name <$mail>\r\n"; 

LT/GT括弧内に電子メールアドレスを指定します。

もう1つの考えは、$ _POST ['mail']値が実際に渡されていることを確認することです。

0

あなたのフィールドからの復帰があるかもしれないと思います。あなたはまた、DBに入力した場合、正規表現でmysql_real_escape_stringのか、同様のものを使用することをお勧めします

$mail = trim($_POST['mail']); 

:あなたは次のように$ _POSTでデータ入力をスクラブする必要があります。あなたのコードでconsistantcy用も

$headers = "From: ".$mail." \r\n"; 
$headers .= "Reply-To: ".$mail." \r\n"; 

また、私はあなたの行方不明正しいメールパラメータを考えます。メールのドキュメントによれば、件名のパラメータが欠落しています。

mail($to, $subject, $message, $headers); 
関連する問題