如何使用PHP Mailer通过电子邮件发送文件?[副本]

rslzwgfq  于 2023-09-29  发布在  PHP
关注(0)|答案(2)|浏览(135)

此问题已在此处有答案

File attachment with PHPMailer(2个答案)
2小时前关闭
我已经尝试了一段时间,使代码在php发送一个文件从一个形式。
表单工作,它将信息和文件上传到服务器。
我用 AJAX 提交表单。
问题:
当我做电子邮件测试时,我只收到消息...没有附件,或者它甚至没有达到谷歌电子邮件。当我删除附件的代码行时,我也会在谷歌邮件上收到这条消息。
简而言之,如果我删除添加附件的代码行,代码就可以完美地工作。
有人能帮帮我吗?
我是PHP的初学者。

require __DIR__ . '/../../vendor/autoload.php';

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

    $mail = new PHPMailer(true);

    $mail->CharSet = 'UTF-8';
    $mail->Encoding = 'base64';

    $mail->isSMTP();
    $mail->SMTPAuth = true;

    $mail->Host = Config::SMTP_HOST;
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
    $mail->Port = Config::SMTP_PORT;

    $mail->Username = Config::SMTP_USERNAME;
    $mail->Password = Config::SMTP_PASSWORD;

    $mail->addCustomHeader('MIME-Version', '1.0');
    $mail->addCustomHeader('Content-type', 'text/html; charset=UTF-8');
    $mail->addCustomHeader('Viewport', 'width=device-width, initial-scale=1.0');
    $mail->ContentType = 'text/html; charset=UTF-8';
    

    $mail->setFrom($customerEmail, $customerName);
    $mail->addAddress($sellerEmail, $sellerName);
    $mail->addAttachment($_FILES['file']['tmp_name'], $_FILES['file']['name']);
   
    $mail->IsHTML(true);
    $mail->Subject = $subjectForSeller;
    $mail->Body = $messageForSeller;

    $mail->send();
qni6mghb

qni6mghb1#

尝试以下代码,我验证了它可以工作(发送电子邮件w/附件到我的Gmail):

$subjectForSeller = 'This is the subject';
$messageForSeller = 'Hello <strong>World</strong>';

$mail = new PHPMailer(true);

$mail->CharSet = 'UTF-8';
    
$mail->isSMTP();
$mail->SMTPAuth   = true;
$mail->Host       = Config::SMTP_HOST;
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port       = Config::SMTP_PORT;

$mail->Username   = Config::SMTP_USERNAME;
$mail->Password   = Config::SMTP_PASSWORD;

$mail->setFrom($customerEmail, $customerName);

$mail->addAddress($sellerEmail, $sellerName);
if(is_uploaded_file($_FILES['file']['tmp_name'])) {
    $mail->addAttachment($_FILES['file']['tmp_name'], $_FILES['file']['name']);
} else {
    $messageForSeller .= ' FILE NOT FOUND!';
}

$mail->isHTML(true);

而线状

$messageForSeller .= ' FILE NOT FOUND!';

仅用于调试目的,您应该始终使用 is_uploaded_file 进行验证。
这是我用于测试的HTML表单:

<form action="" method="post" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="submit" value="submit" />
</form>

编辑:我也试过你的代码片段,它工作得很好,所以你的文件或文件上传可能有问题。您可能希望将表单、 AJAX 调用和测试文件的链接添加到您的问题中。

slmsl1lt

slmsl1lt2#

删除以下行:

$mail->addCustomHeader('MIME-Version', '1.0');
$mail->addCustomHeader('Content-type', 'text/html; charset=UTF-8');
$mail->addCustomHeader('Viewport', 'width=device-width, initial-scale=1.0');
$mail->ContentType = 'text/html; charset=UTF-8';

检查大小(小于25兆)和文件的MIME类型(不是EXE,APK等)并将其上传到您的主机上。然后在$mail->addAttachment中使用主机上的文件路径和一个干净的名称(只是带有扩展名的数字/字母)。

相关问题