Загруженный файл изображения не может быть встроен в тело письма с помощью phpmailer - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь встроить встроенный файл изображения в электронное письмо с помощью 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

Где я делаю не так?

EDIT:

Мой вопрос совершенно другой. Это НЕ Дубликат Отправить письмо с PHPMailer - вставить изображение в тело

Я имею дело с динамически загружаемым файлом, а не со статическим файлом изображения.

1 Ответ

0 голосов
/ 31 августа 2018

Если вы посмотрите на документ для addEmbeddedImage(), вы увидите, что функция ожидает путь к файлу изображения, а не строку base64.

вы должны использовать addStringEmbeddedImage(), если вы хотите встроить изображение из base64.

...