2014-12-04 539 views
4

我想知道如何在单个邮件中附加多个附件并发送。请参考我的下面的oode。在这只有一个文件正在附加。这是第二个文件。第一个文件根本不考虑附加。但是在指定的路径中正在创建文件。如何在单个邮件中发送多个附件php

$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!"; 
    } 

回答

8

继可重用性原则,就可以使用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'; 

来源:How to attach two or multiple files and send mail in PHP

+0

谢谢很多你的答案。我想知道我在代码中犯了什么错误,以及为什么它没有作为多个附件附加。 – 2014-12-04 14:36:33

+3

这就是使用库的要点。电子邮件出现错误的方式有很多,不值得痛苦。我建议你尝试用PHPMailer生成相同的消息,然后将它与你的相比较,看看你错在哪里。也可以尝试通过IETF msglint运行您的消息。 – Synchro 2014-12-04 14:52:43

+1

谢谢老兄。我会开始按照你的方式 – 2014-12-05 12:07:55

1

这是我想出了多个文件格式的文件名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; 
} 
0

对于那些想发送多个文件使用phpMailer并输入多个文件。 我加入并使用了@Rishi和@Matheno的上述两个代码来实现这个结果,该结果是通过用户选择的附件添加的。

在输入文件名记得把括号:

<input type="file" multiple="multiple" name="attach_file[]" /> 

在你的PHP发送文件:

相反的:

$mail->addAttachment('/var/tmp/file.tar.gz'); 

用途:

for($ct=0;$ct<count($_FILES['attach_file']['tmp_name']);$ct++){ 
    $mail->AddAttachment($_FILES['attach_file']['tmp_name'][$ct],$_FILES['attach_file']['name'][$ct]); 
} 
相关问题