php 如何在php中的单个邮件中发送多个附件
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/27296361/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to send multiple attachment in single mail in php
提问by Abinaya Palanisamy
I would like to know about attaching multiple attachment in single mail and send . Please refer my following oode. In this only one file is getting attached. That is second file. First file is not at all considering for attaching. But file is being created properly in the path specified.
我想知道如何在单个邮件中附加多个附件并发送 . 请参考我的以下 oode。在此仅附加一个文件。那是第二个文件。第一个文件根本不考虑附加。但是正在指定的路径中正确创建文件。
$filename=array($filenamee1 ,$filenamee2);
for($x=0;$x<count($filename);$x++){
echo $path.$filename[$x];
$file = $path.$filename[$x];
$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);
$header = "From: ".$from_name." <".$from_mail.">\r\n";
$header .= "cc: ".$mailtoCC."\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/html; 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: application/octet-stream; name=\"".$filename[$x]."\"\r\n";
$header .= "Content-Transfer-Encoding: base64\r\n";
$header .= "Content-Disposition: attachment; filename=\"".$filename[$x]."\"\r\n\r\n";
$header .= $content."\r\n\r\n";
$header .= "--".$uid."--";
}
if (mail($mailto, $subject, "", $header)) {
echo "<br>mail sent Successfully... OK";
} else {
echo "<br>mail send ... ERROR!";
}
回答by Matheno
Following the reusability principles, you can use https://github.com/PHPMailer/PHPMailer
遵循可重用性原则,您可以使用https://github.com/PHPMailer/PHPMailer
<?php
require 'PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'smtp1.example.com;smtp2.example.com'; // Specify main and backup server
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = 'jswan'; // SMTP username
$mail->Password = 'secret'; // SMTP password
$mail->SMTPSecure = 'tls'; // Enable encryption, 'ssl' also accepted
$mail->From = '[email protected]';
$mail->FromName = 'Mailer';
$mail->addAddress('[email protected]', 'Josh Adams'); // Add a recipient
$mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments
$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name
$mail->Subject = 'Here is the subject';
$mail->Body = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
exit;
}
echo 'Message has been sent';
Source: How to attach two or multiple files and send mail in PHP
回答by Rishi
This is what I came up with for multiple files with form file name userfile:
这就是我为表单文件名为 userfile 的多个文件想出的:
for($ct=0;$ct<count($_FILES['userfile']['tmp_name']);$ct++)
{
$uploadfile = tempnam(sys_get_temp_dir(), sha1($_FILES['userfile']['name'][$ct]));
$filename =$_FILES['userfile']['name'][$ct];
if (move_uploaded_file($_FILES['userfile']['tmp_name'][$ct], $uploadfile)) {
$mail->addAttachment($uploadfile, $filename);
}
}
if ($mail->send()) {
echo "Sent";
} else {
echo "Mailer Error: " . $mail->ErrorInfo;
}
回答by Felipe Lima
For those who want to send multiple files using phpMailer and input file multiple. I joined and used the above two codes of @Rishi and @Matheno to achieve this result that dinamically add attachments selecteds by user.
对于那些想要使用 phpMailer 发送多个文件并输入多个文件的人。我加入并使用@Rishi和@Matheno的上述两个代码来实现这个结果,即动态添加用户选择的附件。
On your input file name remember to put brackets:
在你的输入文件名上记得加括号:
<input type="file" multiple="multiple" name="attach_file[]" />
On your php send file:
在您的 php 发送文件上:
Instead of:
代替:
$mail->addAttachment('/var/tmp/file.tar.gz');
Use:
用:
for($ct=0;$ct<count($_FILES['attach_file']['tmp_name']);$ct++){
$mail->AddAttachment($_FILES['attach_file']['tmp_name'][$ct],$_FILES['attach_file']['name'][$ct]);
}