doushi4956 2012-04-19 15:40
浏览 45

PHP - 无法从表单发送带附件的电子邮件

I having some trouble sending e-mail with attachment from the php MAIL function. The error checking is working but I can't get the file to upload and send in the e-mail. I'm using code I've pulled off the net. Just can't seem to get it working. Anyone have any thoughts? Any help would be appreciated. Thanks! URL to follow:

http://www.xsp.com/careers2.php

if(array_key_exists('submit_check', $_POST)) {
                        if($_POST['first_name'] != NULL && $_POST['last_name'] != NULL && $_POST['e-mail'] != NULL && $_POST['address'] != NULL && $_POST['city'] != NULL && $_POST['zipcode'] != NULL && $_POST['country'] != NULL && $_POST['telephone'] != NULL && $_POST['first_name'] != '' && $_POST['last_name'] != '' && $_POST['e-mail'] != '' && $_POST['address'] != '' && $_POST['city'] != '' && $_POST['zipcode'] != '' && $_POST['country'] != '' || 
        (($_FILES["file"]["type"] == "application/doc") || ($_FILES["file"]["type"] == "application/pdf") || ($_FILES["file"]["type"] == "application/pdf")) && $_FILES["file"]["size"] < 100000) {                         
                            $first_name = preg_replace('/[^a-zA-Z0-9_]/s', '', $_POST['first_name']);
                            $last_name = preg_replace('/[^a-zA-Z0-9_]/s', '', $_POST['last_name']);
                            $city = preg_replace('/[^a-zA-Z0-9_]/s', '', $_POST['city']);
                            $state = preg_replace('/[^a-zA-Z0-9_]/s', '', $_POST['state']);
                            $zipcode = preg_replace('/[^a-zA-Z0-9_]/s', '', $_POST['zipcode']);
                            $email = $_POST['e-mail'];

                            // we'll begin by assigning the To address and message subject
                            $to = "myhiddenemailaddress@domain.com";

                            $subject = $form_title;

                           // get the sender's name and email address
                           // we'll just plug them a variable to be used later
                           //$from = stripslashes($_POST['fromname'])."<".stripslashes($_POST['fromemail']).">";
                           $form = $email;

                           // generate a random string to be used as the boundary marker
                           $mime_boundary = "==Multipart_Boundary_x".md5(mt_rand())."x";

                           // store the file information to variables for easier access
                           $tmp_name = $_FILES['file']['tmp_name'];
                           $type = $_FILES['file']['type'];
                           $name = $_FILES['file']['name'];
                           $size = $_FILES['file']['size'];

                           // here we'll hard code a text message
                           // again, in reality, you'll normally get this from the form submission
                           $message = "Here is your file: $name";

                           /*echo $message."<br />";
                           echo "TMP NAME:".$tmp_name."<br />";
                           echo $_FILES['file'];*/

                           // if the upload succeded, the file will exist
                           if (file_exists($tmp_name)){

                              // check to make sure that it is an uploaded file and not a system file
                              if(is_uploaded_file($tmp_name)){

                                 // open the file for a binary read
                                 $file = fopen($tmp_name,'rb');

                                 // read the file content into a variable
                                 $data = fread($file,filesize($tmp_name));

                                 // close the file
                                 fclose($file);

                                // now we encode it and split it into acceptable length lines
                                $data = chunk_split(base64_encode($data));
                             }

                             // now we'll build the message headers
                              $headers = "From: $from
" .
                                 "MIME-Version: 1.0
" .
                                 "Content-Type: multipart/mixed;
" .
                                 " boundary=\"{$mime_boundary}\"";

                              // next, we'll build the message body
                              // note that we insert two dashes in front of the
                              // MIME boundary when we use it
                              $message = "This is a multi-part message in MIME format.

" .
                                 "--{$mime_boundary}
" .
                                 "Content-Type: text/plain; charset=\"iso-8859-1\"
" .
                                 "Content-Transfer-Encoding: 7bit

" .
                                 $message . "

";
                                $message .="Application Form 
";
                                $message .="First Name: ".$first_name."
";
                                $message .="Last Name: ".$last_name."
";
                                $message .="E-Mail: ".$email."
";

                                if ($_POST["company"] != NULL && $_POST["company"] != "") {
                                    $company = $_POST["company"];
                                    $message .= "COMPANY: ".$company."
";
                                }

                                if ($_POST["position"] != NULL && $_POST["position"] != "") {
                                    $position = $_POST["position"];
                                    $message .= "POSITION: ".$position."
";
                                }

                                if ($_POST["address"] != NULL && $_POST["address"] != "") {
                                    $address = $_POST["address"];
                                    $message .= "ADDRESS: ".$address."
";
                                }

                                if ($city != NULL && $city != "") {
                                    $message .= "CITY: ".$city."
";
                                }

                                if ($state != NULL && $state != "") {
                                    $message .= "STATE: ".$state."
";
                                }

                                if ($zipcode != NULL && $zipcode != "") {
                                    $message .= "ZIPCODE: ".$zipcode."
";
                                }

                                if ($_POST["telephone"] != NULL && $_POST["telephone"] != "") {
                                    $telephone = $_POST["telephone"];
                                    $message .= "TELEPHONE: ".$telephone."
";
                                }

                                if ($_POST["website"] != NULL && $_POST["website"] != "") {
                                    $website = $_POST["website"];
                                    $message .= "WEBSITE: ".$website."

";
                                }

                                if ($_POST["message"] != NULL && $_POST["message"] != "") {
                                    $message_text = $_POST["message"];
                                    $message .= "MESSAGE TEXT: ".$message_text."

";
                                }


                              // now we'll insert a boundary to indicate we're starting the attachment
                              // we have to specify the content type, file name, and disposition as
                              // an attachment, then add the file content and set another boundary to
                              // indicate that the end of the file has been reached
                              $message .= "--{$mime_boundary}
" .
                                 "Content-Type: {$type};
" .
                                 " name=\"{$name}\"
" .
                                 //"Content-Disposition: attachment;
" .
                                 //" filename=\"{$fileatt_name}\"
" .
                                 "Content-Transfer-Encoding: base64

" .
                                 $data . "

" .
                                 "--{$mime_boundary}--
";

                              // now we just send the message
                              if (@mail($to, $subject, $message, $headers))
                                 echo "Message Sent";
                              else
                                 echo "Failed to send";
                           }
                        } else {
                            if ($file > 0) {
                                echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
                            }

                            echo '<p class="note" style="margin:5px 0 5px 0; color:#ff0000;">Please fill in all the required fields</p>';
                        }
                        //echo '<p class="note" style="margin:5px 0 0 0;">First Name: '.$first_name.'</p>';
                    } ?>
  • 写回答

2条回答

  • duanchun1909 2012-04-19 15:43
    关注

    I use PHPMAILER, its easy to use, a had a lot of examples (included a method to attach files) pagina de phpmailer

    评论

报告相同问题?

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办