PHPメールフォームを設定しようとしています。私はthis guideで始まり、私が行くにつれて少し修正しています。現在、私は送信するフォームを取得していますが、私は電子メールを受信していますが、テキストエリアに書かれたコメントだけが電子メールの本文を入力しています。 PHPメールフォーム - 1つの変数だけが投稿されています
私のPHPコード:}他の私は、主に画像添付せずにそれをテストしてきたので、コードは にジャンプしなければならない<?php
$recipient_email = "[email protected]"; //recepient
$from_email = "[email protected]"; //from email using site domain.
if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
\t die('Sorry, request must be Ajax POST'); //exit script
}
if($_POST){
$sender_name \t = filter_var($_POST["name"], FILTER_SANITIZE_STRING); //capture sender name
$sender_email \t = filter_var($_POST["email"], FILTER_SANITIZE_STRING); //capture sender email
$phone_number = filter_var($_POST["telephone"], FILTER_SANITIZE_NUMBER_INT);
$subject = "Contact Form Entry";
$message \t \t = filter_var($_POST["comments"], FILTER_SANITIZE_STRING); //capture message
$attachments = $_FILES['file_attach'];
\t
//php validation
if(strlen($sender_name)<4){ // If length is less than 4 it will output JSON error.
print json_encode(array('type'=>'error', 'text' => 'Name is too short or empty!'));
exit;
}
if(!filter_var($sender_email, FILTER_VALIDATE_EMAIL)){ //email validation
print json_encode(array('type'=>'error', 'text' => 'Please enter a valid email!'));
exit;
}
if(!filter_var($phone_number, FILTER_SANITIZE_NUMBER_FLOAT)){ //check for valid numbers in phone number field
print json_encode(array('type'=>'error', 'text' => 'Enter only digits in phone number'));
exit;
}
if(strlen($message)<3){ //check emtpy message
print json_encode(array('type'=>'error', 'text' => 'Too short message! Please enter something.'));
exit;
}
$file_count = count($attachments['name']); //count total files attached
$boundary = md5("whatever");
if($file_count > 0){ //if attachment exists
//header
$headers = "MIME-Version: 1.0\r\n";
$headers .= "From:".$from_email."\r\n";
$headers .= "Reply-To: ".$sender_email."" . "\r\n";
$headers .= "Content-Type: multipart/mixed; boundary = $boundary\r\n\r\n";
//message text
$body = "--$boundary\r\n";
$body .= "Content-Type: text/plain; charset=ISO-8859-1\r\n";
$body .= "Content-Transfer-Encoding: base64\r\n\r\n";
$body .= chunk_split(base64_encode($message));
//attachments
for ($x = 0; $x < $file_count; $x++){
if(!empty($attachments['name'][$x])){
if($attachments['error'][$x]>0) //exit script and output error if we encounter any
{
$mymsg = array(
1=>"The uploaded file exceeds the upload_max_filesize directive in php.ini",
2=>"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form",
3=>"The uploaded file was only partially uploaded",
4=>"No file was uploaded",
6=>"Missing a temporary folder");
print json_encode(array('type'=>'error',$mymsg[$attachments['error'][$x]]));
\t \t \t \t \t exit;
}
//get file info
$file_name = $attachments['name'][$x];
$file_size = $attachments['size'][$x];
$file_type = $attachments['type'][$x];
//read file
$handle = fopen($attachments['tmp_name'][$x], "r");
$content = fread($handle, $file_size);
fclose($handle);
$encoded_content = chunk_split(base64_encode($content)); //split into smaller chunks (RFC 2045)
$body .= "--$boundary\r\n";
$body .="Content-Type: $file_type; name=".$file_name."\r\n";
$body .="Content-Disposition: attachment; filename=".$file_name."\r\n";
$body .="Content-Transfer-Encoding: base64\r\n";
$body .="X-Attachment-Id: ".rand(1000,99999)."\r\n\r\n";
$body .= $encoded_content;
}
}
}else{ //send plain email otherwise
$headers = "From:".$from_email."\r\n".
"Reply-To: ".$sender_email. "\n" .
"X-Mailer: PHP/" . phpversion();
$body = "Name: " . $sender_name . "\r\n";
$body .= "Email: " . $sender_email . "\r\n";
$body .= "Comments: " . $message . "\r\n";
$body .= "Telephone: ".$phone_number . "\r\n";
}
$sentMail = mail($recipient_email, $subject, $body, $headers);
if($sentMail) //output success or failure messages
{
print json_encode(array('type'=>'done', 'text' => 'Thank you for your email'));
\t \t exit;
}else{
print json_encode(array('type'=>'error', 'text' => 'Could not send mail! Please check your PHP mail configuration.'));
\t \t exit;
}
}
?>
{//そうでない場合は、プレーンメールを送りますセクション。このコードでは
$body = "Name: " . $sender_name . "\r\n";
$body .= "Email: " . $sender_email . "\r\n";
$body .= "Comments: " . $message . "\r\n";
$body .= "Telephone: ".$phone_number . "\r\n";
これらの行のすべてが体変数に連結し、そしてmail()
機能が発射されるときに、この情報のすべてを送信しない理由を私は思ったんだけど、含まれています。私が受け取る電子メールは、フォーム上のtextarea
で書かれたものだけで構成されています。どんな洞察?
'コード_should_ジャンプ' ... '$ file_count'は' 0'と同じですか? 'var_dump($ file_count);'を実行してください。 –
あなたのヘッダは '\ r \ n 'で区切られていなければなりません。私の推測では、他の行は電子メールヘッダに詰め込まれています。 – Progrock
@PetervanderWal PHPがどのように動作するのか全く知らないので、var_dumpを実行する方法が分からないので、あなたのコメントはif/else文を完全に削除し、elseブロックにあったコードを残してしまいました。これは実際に送信すべきすべてを送信してしまいました!だから私はこの問題がifブロック内にあることを確認しています。さて、どのようにファイルを添付してすべての作業を行う... – user8345012