PHP - 无法打开邮件附件
PHP - Mail attachment can't be opened
我目前的邮件有问题。它发送得很好,我收到一个带有名称和大小的附件,但无法打开。
此外,我已经尝试过 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;
}
}
你应该在内容之前有两个换行符。邮件消息应如下所示:
Content-Type: multipart/alternative; boundary=foobar
--foobar
Content-Type: …
Content-Transfer-Encoding: …
base64data…
--foobar--
您缺少 Content-Transfer-Encoding
和您的数据之间的白线。
我目前的邮件有问题。它发送得很好,我收到一个带有名称和大小的附件,但无法打开。 此外,我已经尝试过 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;
}
}
你应该在内容之前有两个换行符。邮件消息应如下所示:
Content-Type: multipart/alternative; boundary=foobar
--foobar
Content-Type: …
Content-Transfer-Encoding: …
base64data…
--foobar--
您缺少 Content-Transfer-Encoding
和您的数据之间的白线。