📜  如何在PHP中附加带有反馈表的文件?

📅  最后修改于: 2022-05-13 01:56:42.199000             🧑  作者: Mango

如何在PHP中附加带有反馈表的文件?

反馈表用于通过邮件服务从用户那里获得评论。邮件是当今大多数 Web 服务器所需的服务器端实用程序之一。在PHP中, mail()是内置函数,用于从PHP脚本以纯文本形式或格式化的 HTML 发送电子邮件。您还可以编写一个脚本,将任何文件附加到您的邮件中,从发送带有电子邮件的附件文章中。

PHP邮件函数具有以下基本语法:


在反馈表单中附加文件:要发送带有附件作为反馈的电子邮件,我们需要使用 multipart/mixed MIME 类型(将 Content-type 标头设置为 multipart/mixed)指定混合类型将包含在电子邮件中。此外,我们希望使用多部分/替代 MIME 类型来发送电子邮件的纯文本和 HTML 版本。文本和附件部分可以在边界内指定。边界以两个连字符开头,后跟一个唯一编号,该编号不能出现在电子邮件的消息部分中。一个PHP函数md5()用于创建一个 32 位的十六进制数字来创建一个唯一的数字。表示电子邮件最后部分的最后边界也必须以两个连字符结尾。

为了在我们的消息中包含附件,我们将指定文件中的数据读入一个字符串,使用base64_encode()函数对其进行编码以更安全地传输,使用chunk_split()函数将其拆分为更小的块以确保它与 MIME 匹配规格,然后将其作为附件包含在内。

例子:

GeeksforGeeks
                    

Hello, '.$name.'


                    

Message:'.$message.'

';                            $msg = "Please find the attachment
Thank You.";     $s_m = md5(uniqid(time()));     $headers = "From: ".$fromemail;     $mime_boundary = "==Multipart_Boundary_x{$s_m}x";          $headers .= "\nMIME-Version: 1.0\n" .     "Content-Type: multipart/mixed;\n" .     " boundary=\"{$mime_boundary}\"";          if($_FILES["file"]["name"]!= ""){           $file_name = $_FILES["file"]["name"];               $content = chunk_split(base64_encode(             file_get_contents($_FILES["file"]["tmp_name"])));                $msg .= "This is a multi-part message in MIME format.\n\n" .             "--{$mime_boundary}\n" .             "Content-Type:text/html; charset=\"iso-8859-1\"\n" .             "Content-Transfer-Encoding: 7bit\n\n" .             $msg .= "\n\n";              $msg .= "--{$mime_boundary}\n" .             "Content-Type: application/octet-stream;\n" .             " name=\"{$file_name}\"\n" .                    // "Content-Disposition: attachment;\n" .             // " filename=\"{$fileatt_name}\"\n" .             "Content-Transfer-Encoding: base64\n\n" .             $content  .= "\n\n" .             "--{$mime_boundary}--\n";     }         if(mail($toemail, $subject, $msg, $headers)){         $Msg= "Email send successfully with attachment";     }else{         $Msg= "Email Not sent";     } } ?>             Sending file attachment with email                                                     

                     

                
        

            GeeksforGeeks         

                   
            Sending email with a             file attachment         
                   
                     
                   
                     
                   
                     
                   
                     
                   
                     
                   
                     
    
   

输出:

  • 反馈表 GUI:
  • 收到邮件后:

在 XAMPP 的 localhost 上使用 mail():可以使用 Sendmail 包从 localhost 发送邮件,Sendmail 包在 XAMPP 中内置。

  • 第 1 步:C:\xampp\ PHP\ PHP.ini中找到extension=php_openssl.dll并从该行的开头删除分号,以使 SSL 适用于本地主机的 gmail。
  • 第 2 步:PHP.ini文件中找到[mail 函数]并更改
    SMTP=smtp.gmail.com
    smtp_port=587
    sendmail_from = gmail-id@gmail.com
    sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"
  • 第 3 步:C:\xampp\sendmail\sendmail.ini 中。sendmail.ini中的所有现有代码替换为以下代码:
    [sendmail]
    smtp_server=smtp.gmail.com
    smtp_port=587
    error_logfile=error.log
    debug_logfile=debug.log
    auth_username=gmail-id@gmail.com
    auth_password=gmail-password
    force_sender=gmail-id@gmail.com
  • 第 4 步:根据需要更改gmail-id@gmail.comgmail-password 。重新启动服务器 XAMMP 控制面板,使更改生效。
  • 第 5 步:创建一个PHP文件并发送邮件。

注意:然而, PHP mail()函数是PHP核心的一部分,但您需要在您的机器上设置一个邮件服务器才能使其真正工作。