使用 sendmail 附加多个文件 PHP
Attach multiples files with sendmail PHP
我正在用 sendmail 测试 mail() 函数。我正在使用 xampp,我的网站在 wordpress 上。当邮件没有附加文件时,我的 mail() 函数可以工作,但是当我尝试在邮件中附加多个文件时,我可以在邮件中看到以下内容:
Content-Type: {"application/octet-stream"};
name="/tmp/phpmXXXXX"
Content-Disposition: attachment;
filename="/tmp/phpmXXXXX"
Content-Transfer-Encoding: base64
JVBERi0xLjUNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFu [etc..]
我正在 PHP 代码中寻找解决方案,其中有关于文件附件的部分:
$files = array(); //Array pour les fichiers
$filesSize = array(); //Array pour la taille total des fichiers
$count = count(array_filter($_FILES['fichier']['name'])); //Compte le nombre de fichiers
for($i=0;$i<$count;$i++){ //boucle sur chaque fichier
if($_FILES['fichier']['name'] != ".htaccess"){ //Vérifie que ce n'est pas un .htaccess
array_push($files, $_FILES['fichier']['tmp_name'][$i]); //insere le fichier dans l'array $files
array_push($filesSize, $_FILES['fichier']['size'][$i]); //insere le fichier dans l'array $filesSize (pour le calcul de la taille total)
}
}
if(isset($_FILES["fichier"]) && $_FILES['fichier']['name'] != ""){
$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
// headers pour les pièces jointes
$headers .= "MIME-Version: 1.0" . "Content-Type: multipart/mixed;" . " boundary=\"{$mime_boundary}\"";
// preparation des pièces jointes
for($x=0;$x<count($files);$x++){
$file = fopen($files[$x],"rb");
$data = fread($file,filesize($files[$x]));
fclose($file);
$data = chunk_split(base64_encode($data));
$message .= '----------------------------------------------------------' . "\r\n";
$message .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$files[$x]\"\n" .
"Content-Disposition: attachment;\n" . " filename=\"$files[$x]\"\n" .
"Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
$message .= "--{$mime_boundary}\n";
}
}
如果没有任何解决方案,也许我会安装 PHPMailer。
谢谢大家。
您使用 PHPMailer 的方向正确。它使所有此类事情变得更加容易。无需重新发明轮子。在与错误作斗争的时间里,您可以安装 PHPMailer 并发送电子邮件。
我写了很多电子邮件代码只是为了避免使用像 PHPMailer 这样的库。我总是有这样或那样的问题。我不再浪费时间,也没有回头。
我正在用 sendmail 测试 mail() 函数。我正在使用 xampp,我的网站在 wordpress 上。当邮件没有附加文件时,我的 mail() 函数可以工作,但是当我尝试在邮件中附加多个文件时,我可以在邮件中看到以下内容:
Content-Type: {"application/octet-stream"};
name="/tmp/phpmXXXXX"
Content-Disposition: attachment;
filename="/tmp/phpmXXXXX"
Content-Transfer-Encoding: base64
JVBERi0xLjUNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFu [etc..]
我正在 PHP 代码中寻找解决方案,其中有关于文件附件的部分:
$files = array(); //Array pour les fichiers
$filesSize = array(); //Array pour la taille total des fichiers
$count = count(array_filter($_FILES['fichier']['name'])); //Compte le nombre de fichiers
for($i=0;$i<$count;$i++){ //boucle sur chaque fichier
if($_FILES['fichier']['name'] != ".htaccess"){ //Vérifie que ce n'est pas un .htaccess
array_push($files, $_FILES['fichier']['tmp_name'][$i]); //insere le fichier dans l'array $files
array_push($filesSize, $_FILES['fichier']['size'][$i]); //insere le fichier dans l'array $filesSize (pour le calcul de la taille total)
}
}
if(isset($_FILES["fichier"]) && $_FILES['fichier']['name'] != ""){
$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
// headers pour les pièces jointes
$headers .= "MIME-Version: 1.0" . "Content-Type: multipart/mixed;" . " boundary=\"{$mime_boundary}\"";
// preparation des pièces jointes
for($x=0;$x<count($files);$x++){
$file = fopen($files[$x],"rb");
$data = fread($file,filesize($files[$x]));
fclose($file);
$data = chunk_split(base64_encode($data));
$message .= '----------------------------------------------------------' . "\r\n";
$message .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$files[$x]\"\n" .
"Content-Disposition: attachment;\n" . " filename=\"$files[$x]\"\n" .
"Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
$message .= "--{$mime_boundary}\n";
}
}
如果没有任何解决方案,也许我会安装 PHPMailer。
谢谢大家。
您使用 PHPMailer 的方向正确。它使所有此类事情变得更加容易。无需重新发明轮子。在与错误作斗争的时间里,您可以安装 PHPMailer 并发送电子邮件。
我写了很多电子邮件代码只是为了避免使用像 PHPMailer 这样的库。我总是有这样或那样的问题。我不再浪费时间,也没有回头。