未使用php mail()函数发送附件

未使用php mail()函数发送附件,php,phpmailer,Php,Phpmailer,我正在处理文件附件。邮件功能工作正常,但文件字段为空。我尝试过使用内容类型:multipart/mixed和其他一些方法,但无法实现所需的输出。我已经寻找了一个不同的答案,并尝试了,但仍然面临着同样的问题。似乎有一个重复,但我已经尝试了所有的方法,任何人都可以根据我的脚本指导我正确的方向,我在这里错过了什么。如何获取文件附件?有人能告诉我正确的方向吗?我在这里遗漏了什么?为什么其他字段没有出现?如果我删除了文件附件代码,那么其他字段工作正常,邮件也出现了。 HTML 挑选工作角色 网络开发者

我正在处理文件附件。邮件功能工作正常,但文件字段为空。我尝试过使用
内容类型:multipart/mixed
和其他一些方法,但无法实现所需的输出。我已经寻找了一个不同的答案,并尝试了,但仍然面临着同样的问题。似乎有一个重复,但我已经尝试了所有的方法,任何人都可以根据我的脚本指导我正确的方向,我在这里错过了什么。如何获取文件附件?有人能告诉我正确的方向吗?我在这里遗漏了什么?为什么其他字段没有出现?如果我删除了文件附件代码,那么其他字段工作正常,邮件也出现了。 HTML


挑选工作角色
网络开发者
Java开发者
上传图像
/text区域>
提交
请求已发送!

要使用PHP更好地处理电子邮件,您可以使用以下库:

此外,还可以制作:

至少您需要src/PHPMailer.php。如果你正在使用 SMTP,您需要src/SMTP.php,如果您在SMTP之前使用POP, 您需要src/POP3.php


使用更新表单开始标记

在启动if条件之前添加以下代码

if ($_FILES['upload']['error'] == 0) {
   $filename = $_FILES["upload"]["name"];
   $content = file_get_contents( $_FILES['upload']['tmp_name'] );
   $content = chunk_split(base64_encode($content));
   $uid = md5(uniqid(time()));
}

我希望这只是一个打字错误。您正在使用var
$msg
两次。一次用于html消息和消息正文

<?php

....

    // Message body

    $msg = '<html><body><p>';

    $msg .= '<b> Request Sent From : </b>' . $reqBy . '<br/>';

    $msg .= '<b> Name : </b>' . $name . '<br/>';

    if($_POST["phone"] != "") {
       $msg .= '<b> Phone : </b>' . $phone . '<br/>';
    }

    if($_POST["company"] != "") {
       $msg .= '<b> Company : </b>' . $company . '<br/>';
    }

    if($_POST["message"] != "") {
        $msg .= '<b> Message : </b>' . $message . '<br/>';
    }

    if($_POST["industry"] != "") {
        $msg .= '<b> Industry : </b>' . $industry . '<br/>';
    }

    if($_POST["job"] != "") {
        $msg .= '<b> Job Role : </b>' . $job . '<br/>';
    }

    if($_FILES["upload"] != "") {
        $msg .= '<b> Upload : </b>' . $upload . '<br/>';
    }

    $msg .= '</p>';
    $msg .= '</body></html>';
    var_dump($msg);

    $filename = $_FILES["upload"]["name"];
    //$content = file_get_contents( $_FILES['upload']['tmp_name'] );

    if(!empty($_FILES['upload']['tmp_name']) && file_exists($_FILES['upload']['tmp_name'])) {
        $content= file_get_contents($_FILES['upload']['tmp_name']); // No add_slashes()
    }
    $content = chunk_split(base64_encode($content));
    $uid = md5(uniqid(time()));


    $replyto = 'test';
    $headers = "From: ".$subject." <".'yourmail@gmail.com'.">\r\n";
    $headers .= "Reply-To: ".$replyto."\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";

这里有几个问题。主要问题是,这段代码是一个安全噩梦,永远不应该部署到任何地方


第二个问题是在尝试使用参数实例化其他变量之前检查参数是否已填充。当您分配$upload,然后检查$\u POST数据,然后才查看$\u POST参数是否在第一个位置设置时,这表明您需要重新阅读,甚至是基本原理

确保有责任,而不是“不工作”。“还有一个更有力的方法。”马里奥谢谢你的回答。我已经在调试模式下为true。@Husna,文件不会显示在
$\u POST
,您需要使用
$\u文件
@PragneshChauhan谢谢您的回复。我改为$\u文件,但邮件中只有文件,没有其他字段。你能用新的更改重新发布你的代码吗?我想你已经将所有
$\u POST
更改为
$\u文件
,你只需使用
$\u POST[“上载”]
$\u文件[“上载”]
是的,但我不想使用PHPMailer使用php发送邮件,因为我想这样做,因为有一些客户端要求。@Husna请务必理解,大多数电子邮件客户端很容易将自己发送的邮件标记为垃圾邮件。使用上述选项或SendGrid之类的第三方可以解决此问题。获取此错误
警告:file_get_contents():文件名在contactMail中不能为空。php
enctype=“multipart/form data”
是否在表单中添加了此属性?@PragneshChauhan这是将文件上载到mailyeah,我尝试了文件和字段,但是字段都带有html标记,比如Name here为什么会发生这种情况这里不起作用。当我下载时,文件类型是file,一个空文件出现了。您是否从
文件中删除了
添加斜杠()
?尝试在
内容类型:text/html
中添加空格。您的文件名始终为myfile。尝试
$filename=$\u文件[“上载”][“名称”]是的。我明白了:)现在为什么空文件来了,我上载了带有一些内容的pdf文件,但当我下载文件类型是file,文件是空的。请尝试
“内容类型:”.mime\u content\u type($\u FILES['upload']['tmp\u name'])。“name=\”。$filename.\“\r\n”在附件中。
    $msgBody = "--".$uid."\r\n";
    $msgBody .= "Content-type:text/html; charset=iso-8859-1\r\n";
    $msgBody .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
    $msgBody .= $msg."\r\n\r\n";

    if(isset($_Files['upload'])) // Only add attachment if uploaded
         $msgBody .= "--".$uid."\r\n";
         $msgBody .= "Content-Type: ".mime_content_type ( $_FILES['upload']['tmp_name'] )."; name=\"".$filename."\"\r\n";
         $msgBody .= "Content-Transfer-Encoding: base64\r\n";
         $msgBody .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
         $msgBody .= $content."\r\n\r\n";
    }
    $msgBody .= "--".$uid."--";

    if( mail( $mail_to, $subject, $msgBody, $headers )) {
        echo "Thank You!";
    } else {
        die("Error!");
    }
   }

 ?>