PHPMailer - 无法访问文件

So I'm getting this error, and haven't a clue of what the problem is. It's the first time I'm using PHPMailer, and when I try to attach a file, it only works with files that are at the same path as the php. I know that the JavaScript can't get the path of the file, but if the user chooses a file it is supposed to have a path, what am I passing?

Here is my html

<!DOCTYPE HTML>
<html>

<head>
    <script type="text/javascript" src="teste_Functions.js"></script>
    <script type="text/javascript" src="jquery.min.js"></script>
    <script type="text/javascript" src="jquery.fullscreen-min.js"></script>
    <script type="text/javascript" src="jquery.cookie.js"></script>
    <script type="text/javascript" src="jquery.steps.js"></script>
</head>

<body>
    <label>CC:</label>
    <textarea id="cc" style="height: 20px; width: 100%"></textarea><br>
    <label>Name:</label>
    <textarea id="name" style="height: 20px; width: 100%"></textarea><br>
    <label>Telefone:</label>
    <textarea id="telefone" style="height: 20px; width: 100%"></textarea><br>
    <label>Header:</label>
    <textarea id="header" style="height: 20px; width: 100%"></textarea><br>
    <label>Body:</label>
    <textarea id="body" style="height: 20px; width: 100%"></textarea><br>
    <label>Anexos:</label>
    <input id="anexos" type="file" name="userfile">
    <button onclick="teste()">Test</button>
</body>

</html>

Here is my JavaScript:

function teste(){
var cc = $('#cc').val();
console.log(cc);
var name = $('#name').val();
console.log(name);
var telefone = $('#telefone').val();
console.log(telefone);
var header = $('#header').val();
console.log(header);
var body = $('#body').val();
console.log(body);
var fileInput = document.getElementById('anexos');  
var filename = fileInput.files[0].name;
console.log('File Input:', fileInput);
console.log('File Name:', filename);
$.ajax({
    type: "POST",
    url : 'http://localhost/teste/mailer',
    data: {'cc' : cc , 'name' : name, 'telefone' : telefone, 'header' : header, 'body' : body, 'anexos' : filename},
    success:function(response){
        console.log(response);
        if (response == true) {
            console.log('True');
        }
        if (response == false) {
            console.log('False');
        }
        else{
            console.log('Nem true nem false');
        }
    }
});

;}

And here is my controller:

<?php

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'C:/wamp64/www/teste/PHPMailer/src/Exception.php';
require 'C:/wamp64/www/teste/PHPMailer/src/PHPMailer.php';
require 'C:/wamp64/www/teste/PHPMailer/src/SMTP.php';

$mail = new PHPMailer(true);                              // Passing `true` enables exceptions
try {
    //Server settings                                // Enable verbose debug output
    $mail->isSMTP();                                      // Set mailer to use SMTP
    $mail->Host = 'smtp.gmail.com';               // Specify main and backup SMTP servers
    $mail->SMTPAuth = true;                              // Enable SMTP authentication
    $mail->Username = '**********';         // SMTP username
    $mail->Password = '**********';                       // SMTP password
    $mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
    $mail->Port = 587;                                    // TCP port to connect to
    $mail->SMTPOptions = array(
        'ssl' => array(
            'verify_peer' => false,
            'verify_peer_name' => false,
            'allow_self_signed' => true
        )
    );
    //Recipients
    $mail->setFrom('************', $_POST['name'], $_POST['telefone']);
    $mail->addAddress('*************', 'Domingos');     // Add a recipient
    //$mail->AddCC($_POST['cc']);


    //Content
    $mail->isHTML(true);                                  // Set email format to HTML
    $mail->Subject = $_POST['header'];
    $mail->Body    = $_POST['body'];
    $mail->AltBody = $_POST['body'];
    $mail->addAttachment($_POST['anexos'], 'teste.jpg');

    $mail->send();
    echo 'Message has been sent';
} catch (Exception $e) {
    echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
}
?>

It sends the email perfectly without the attachments, but I really need this, and I'm probably missing something easy.

Thanks anyway.

</div>
duanbichenhe1968
duanbichenhe1968 我var_dump$uploadfile变量,它的名字是whatever.tmp,它没有任何类型。
2 年多之前 回复
douji3426
douji3426 如果它具有带扩展名的文件名,PHPMailer将自动设置类型。您发布的表单没有enctype,我不认为它与您的控制器有任何关系。Var_dump$_FILES的内容检查您是否正在接收上传。这一切都直接来自PHP文档。
2 年多之前 回复
douyulv6921
douyulv6921 一大早,我很蠢,这种方式是在CodeIgniter中,它给了我在表单中的enctype。我只是想知道如何获取文件的类型并将其设置在addAttachments的名称中,如果你能提供帮助,那就太棒了。
2 年多之前 回复
duangouhui0446
duangouhui0446 但是我这样做的方式它给我发送了附件,但我必须用扩展名给它,例如:$mail->addAttachment($uploadfile,'image.jpg'),如果我只设置'图像',或者没有设置任何东西,文件被发送,但它是'空的'。如果这甚至有意义......
2 年多之前 回复
dongtu4028
dongtu4028 不,我使用<?phpechoform_open_multipart('admin/SendMail');?>因为它需要直接进入我的控制器...我似乎没有办法将其插入到它。
2 年多之前 回复
dtamho6404
dtamho6404 您是否在表单上设置了enctype属性?如果你没有,你就不会得到附件。
2 年多之前 回复
doushan2811
doushan2811 没关系,这个问题与扩展的事实有关。有没有办法获得文件的扩展名并将其设置为名称?
2 年多之前 回复
duanheye7909
duanheye7909 我使用了与您发送的链接中完全相同的示例。它完美地发送电子邮件,但是有一个问题,我的文件在收到的电子邮件中总是空的,我var_dump$uploadfile变量,看起来很好。我没有收到任何错误。
2 年多之前 回复
dontoften8899
dontoften8899 我说的几乎所有内容都被@NobbyNobbs指出的PHP文档所涵盖,我总是建议在发布之前阅读文档。
2 年多之前 回复
doukuanghuan7582
doukuanghuan7582 那更清楚了。所以我会试试这个,并尽快说些什么。谢谢@Synchro:)也许你可以在这里给下面的人一个答案!
2 年多之前 回复
dongtang4954
dongtang4954 你的表格是可行的。您错过的最重要的事情是文件上传不会出现在$_POST中;他们在$_FILES。但这并非全部-您需要使用is_uploaded_file或move_uploaded_file验证上传并将其移动到安全位置(通常在Web根目录之外),就像我在节目中指出的那样。
2 年多之前 回复
duanliaoyu8419
duanliaoyu8419 你的方式似乎是一个很好的方式,似乎你理解它。所以这里的问题是,我需要这样做,因为我正在显示它,我需要一个按钮,提交我想要出现在电子邮件中的信息。文本区域工作得很好。不要担心,我发送任何我想要的东西。正如我所说,这里唯一的问题是它返回(C:/fakepath/whateverimg.jpg),即使我在控制器上var_dump它。告诉你你有点清楚并向我解释我做错了什么,而不是说我忽略了一切,拜托。
2 年多之前 回复
doomm4711
doomm4711 你根本就没有处理文件上传-你忽略了PHP文档所说的一切。查看PHPMailer提供的sendfileupload示例。您不应该禁用证书验证;解决问题(更新您的CA证书),不要忽略它-它已在此处和故障排除指南中多次记录。你为什么使用textarea作为输入?为什么不输入?
2 年多之前 回复
doupingtang9627
doupingtang9627 我在这个问题之前尝试过使用它,反正我也没带我,我觉得我不能用它,谢谢!
2 年多之前 回复
dongxiandi8313
dongxiandi8313 我已经多次看到了这个问题和那些答案,但我仍然无法看到我做错了什么......
2 年多之前 回复
doujiao1180
doujiao1180 stackoverflow.com/questions/11764156/...
2 年多之前 回复
dq1685513999
dq1685513999 php.net/manual/en/features.file-upload.post-method.php
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐