Почтовый клиент не открывает вложение, но загружает и открывает
Я использую PHP для отправки вложения в электронное письмо, все работает как положено, за исключением почтового клиента (с другими почтовыми вложениями), я могу просто щелкнуть по нему, и он запустит внешнее приложение для просмотра файла или, по крайней мере, дать У меня есть возможность выбрать программу, чтобы попробовать и просмотреть ее. Я не получаю это, так как ничего не происходит, когда я нажимаю на вложение. Я могу скачать его и просмотреть, и это работает, как и ожидалось.
Хотел узнать, что я что-то упустил в шапке.
Вот моя функция (это в классе):
public function mail() {
if(!empty($this->attachment)) {
$filename = empty($this->attachment_filename) ? basename($this->attachment) : $this->attachment_filename;
$path = dirname($this->attachment);
$mailto = $this->to;
$from_mail = $this->from;
$from_name = $this->from_name;
$replyto = $this->reply_to;
$subject = $this->subject;
$message = $this->message;
$file = $path.'/'.$filename;
$file_size = filesize($file);
$handle = fopen($file, "r");
$content = fread($handle, $file_size);
fclose($handle);
$content = chunk_split(base64_encode($content));
$uid = md5(uniqid(time()));
$name = basename($file);
$mime_type = $this->getMimeType($file); // function returns the MIME type
$header = "From: ".$from_name." <".$from_mail.">\r\n";
$header .= "Reply-To: ".$replyto."\r\n";
$header .= "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
$header .= "This is a multi-part message in MIME format.\r\n";
$header .= "--".$uid."\r\n";
$header .= "Content-type:text/plain; charset=iso-8859-1\r\n";
$header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$header .= $message."\r\n\r\n";
$header .= "--".$uid."\r\n";
$header .= "Content-Type: ".$mime_type."; name=\"".$filename."\"\r\n";
$header .= "Content-Transfer-Encoding: base64\r\n";
$header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
$header .= $content."\r\n\r\n";
$header .= "--".$uid."--";
return (mail($mailto, $subject, "", $header) ? true : false);
} else {
$header = "From: ".($this->from_name)." <".($this->from).">\r\n";
$header .= "Reply-To: ".($this->reply_to)."\r\n";
return (mail($this->to, $this->subject, $this->message, $header) ? true : false);
}
}
Как я это называю (что работает и отправьте письмо с приложением, как ожидалось)
$sendit = new MailAttachment(
$to,
$subject,
$message,
$excel_report,
basename($excel_report)
);
if(!$sendit->mail()) {
return 'Error';
}
1 ответ
Ну, оказывается, все работает, как ожидалось. Проблема с почтовым клиентом - расширение файла.
- Файл (ы) с расширением.xls открываются при двойном щелчке из почтового клиента,
- Файлы с расширением.xlsx не открываются при двойном щелчке из почтового клиента и должны быть загружены и открыты.
Надеюсь, это поможет кому-то.