【问题标题】:Email Client doesn't open attachment but will download and open电子邮件客户端不打开附件但会下载并打开
【发布时间】:2011-07-01 11:11:40
【问题描述】:

我正在使用 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';
}

【问题讨论】:

  • 您是否尝试过其他电子邮件程序?如果出现问题,其他软件可能会给您一条错误消息。
  • 是的,在 Mac (mail) 和 Linux (Thunderbird) 上没有问题,只是双击时无法打开,必须下载才能查看内容
  • 如果您的电子邮件中的附件是可下载的,那么问题与 PHP 无关。也许您的电子邮件客户端中有一些安全设置禁止您打开/运行附件?
  • 我不认为它是 PHP,但可能是标题中的某些内容,客户端很好,因为其他带有附件的电子邮件也可以正常工作
  • 你可以试试 SwiftMailer。这很容易上手(特别是因为您已经成功发送电子邮件),然后您可以比较标题。 swiftmailer.org

标签: php email email-client email-attachments email-headers


【解决方案1】:

事实证明一切都按预期工作。邮件客户端的问题是文件扩展名。

  • 从电子邮件客户端双击会打开扩展名为 .xls 的文件,
  • 扩展名为 .xlsx 的文件无法在电子邮件客户端双击打开,需要下载并打开。

希望这对某人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    相关资源
    最近更新 更多