我正在尝试使用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" />
在电子邮件中,我收到了以下损坏的图像:
我在哪里做错了?
编辑:
我的问题完全不同。它不是Send email with PHPMailer - embed image in body
的副本我正在处理动态上传的文件,而不是静态图像文件。
答案 0 :(得分:1)
如果您查看addEmbeddedImage()
的文档,则会看到该函数需要图像文件的路径,而不是base64字符串。
如果要嵌入base64中的图像,则必须使用addStringEmbeddedImage()
。