【问题标题】:PHP - Mail attachment can't be opened [duplicate]PHP - 无法打开邮件附件[重复]
【发布时间】:2016-01-15 00:39:12
【问题描述】:

我目前的邮件有问题。它发送得很好,我收到一个带有名称和大小的附件,但无法打开。 另外我已经尝试过 PHPMailer 并且 SMTP 在我的服务器上不起作用,所以请不要建议我使用它:)

对法语变量名称和错误消息感到抱歉,但我认为它没有用。如果你需要,我当然可以翻译。

这是处理我的附件的一段代码。

    if(isset($_FILES["fichier"]) &&  $_FILES['fichier']['name'] != ""){
        $nom_fichier = $_FILES['fichier']['name'];
        $source = $_FILES['fichier']['tmp_name'];
        $type_fichier = $_FILES['fichier']['type'];
        $taille_fichier = $_FILES['fichier']['size'];

        if($nom_fichier != ".htaccess"){
             if($type_fichier == "image/jpeg" 
                || $type_fichier == "image/pjpeg" 
                || $type_fichier == "application/pdf"){

                if ($taille_fichier <= 2097152) {
                    $tabRemplacement = array("é"=>"e", "è"=>"e", "à"=>"a");

                    echo("Nom du fichier : ".$nom_fichier."<br/>");
                    echo("Nom du fichier temporaire : ".$source."<br/>");
                    echo("Type du fichier : ".$type_fichier."<br/>");
                    echo("Taille du fichier : ".$taille_fichier."<br/>");

                    $handle = fopen($source, 'r');
                    $content = fread($handle, $taille_fichier);
                    $encoded_content = chunk_split(base64_encode($content));
                    $f = fclose($handle);

                    $email_message .= $passage_ligne . "--" . $boundary . $passage_ligne;
                    $email_message .= 'Content-type:'.$type_fichier.';name='.$nom_fichier."\n";
                    $email_message .= 'Content-transfer-encoding:base64'."\n";
                    $email_message .= $encoded_content."\n";
                    //$email_message .= $passage_ligne . "--" . $boundary . "--" . $passage_ligne;
                }else{
//Error message
                    $email_message .= $passage_ligne ."L'utilisateur a tenté de vous envoyer une pièce jointe mais celle ci était superieure à 2Mo.". $passage_ligne;
                }
            }else{
//Error message
                $email_message .= $passage_ligne ."L'utilisateur a tenté de vous envoyer une pièce jointe mais elle n'était pas au bon format.". $passage_ligne;
            }
        }else{
//Error message
            $email_message .= $passage_ligne ."L'utilisateur a tenté de vous envoyer une pièce jointe .htaccess.". $passage_ligne;
        }
    }

【问题讨论】:

  • 显然 mario 没有阅读这篇文章,只是将所有内容标记为重复,因为我之前已经阅读过这篇文章,但它对我没有帮助......

标签: php email gmail attachment


【解决方案1】:

您应该在内容之前有两个换行符。邮件信息应如下所示:

Content-Type: multipart/alternative; boundary=foobar

--foobar
Content-Type: …
Content-Transfer-Encoding: …

base64data…
--foobar--

您缺少Content-Transfer-Encoding 和您的数据之间的白线。

【讨论】:

  • 你的意思是这样吗? $email_message .= '内容传输编码:base64'."\n"; $email_message .= "\n"; $email_message .= $encoded_content."\n";
  • 成功了!非常感谢:D
猜你喜欢
  • 2012-12-24
  • 1970-01-01
  • 2015-03-22
  • 2010-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-07
  • 1970-01-01
相关资源
最近更新 更多