无法使用phpmailer将上载的图像文件内嵌在电子邮件正文中

时间:2018-08-31 15:16:41

标签: php email file-upload phpmailer

我正在尝试使用phpmailer内联在电子邮件中嵌入上载的图像文件,但是无法嵌入该图像。电子邮件中的图片损坏了。

这是我正在使用的代码:

if(isset($_FILES['file1']['name']) && $_FILES['file1']['error'] == 0)
{
    $file_name = $_FILES['file1']['name'];
    $file_type = $_FILES['file1']['type'];
    $temp_file = $_FILES['file1']['tmp_name'];

    $file_name = strtolower(basename($file_name));
    $file_name = preg_replace("/\s+/", "-", $file_name);

    $image_file_type = pathinfo($file_name, PATHINFO_EXTENSION);
    $allowed_file_types = array("jpg", "jpeg", "png", "gif");

    // Check if image file is a actual image or fake image
    $check = getimagesize($temp_file);
    if($check !== false)
    {
        // Allow certain file formats
        if(in_array($image_file_type, $allowed_file_types))
        {
            // Open the file and read its content
            $file_handle = fopen($temp_file, "rb");
            $data = fread($file_handle, filesize($temp_file));
            fclose($file_handle);

            $attachment = base64_encode($data);
            $mail->AddEmbeddedImage($attachment, "logo");   
        }
    }
}


$mail->Body .= "<img src='cid:logo' alt='logo' />";

使用的相关HTML是:

<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" enctype="multipart/form-data">

<label for="file1">Attach File:</label>
<input type="file" name="file1" id="file1" />

在电子邮件中,我收到了以下损坏的图像:

enter image description here

我在哪里做错了?

编辑:

我的问题完全不同。它不是Send email with PHPMailer - embed image in body

的副本

我正在处理动态上传的文件,而不是静态图像文件。

1 个答案:

答案 0 :(得分:1)

如果您查看addEmbeddedImage()的文档,则会看到该函数需要图像文件的路径,而不是base64字符串。

如果要嵌入base64中的图像,则必须使用addStringEmbeddedImage()