Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP邮件()附件问题_Php_Email_Attachment - Fatal编程技术网

PHP邮件()附件问题

PHP邮件()附件问题,php,email,attachment,Php,Email,Attachment,有人能帮我弄清楚为什么这个总是返回false吗 $to = "myemail@mydomain.com"; $from = "Website <website@mydomain.com>"; $subject = "Test Attachment Email"; $separator = md5(time()); // carriage return type (we use a PHP end of line constant) $eol = PHP_EOL; // atta

有人能帮我弄清楚为什么这个总是返回false吗

$to = "myemail@mydomain.com";
$from = "Website <website@mydomain.com>";
$subject = "Test Attachment Email";

$separator = md5(time());

// carriage return type (we use a PHP end of line constant)
$eol = PHP_EOL;

// attachment name
$filename = "document.pdf";

//$pdfdoc is PDF generated by FPDF
$attachment = chunk_split(base64_encode($pdfdoc));

// main header
$headers  = "From: ".$from.$eol;
$headers .= "MIME-Version: 1.0".$eol; 
$headers .= "Content-Type: multipart/mixed; boundary=\"".$separator."\"".$eol.$eol; 
$headers .= "Content-Transfer-Encoding: 7bit".$eol;
$headers .= "This is a MIME encoded message.".$eol.$eol;

// message
$headers .= "--".$separator.$eol;
$headers .= "Content-Type: text/html; charset=\"iso-8859-1\"".$eol;
$headers .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
$headers .= $message.$eol.$eol;

// attachment
$headers .= "--".$separator.$eol;
$headers .= "Content-Type: application/octet-stream; name=\"".$filename."\"".$eol; 
$headers .= "Content-Transfer-Encoding: base64".$eol;
$headers .= "Content-Disposition: attachment".$eol.$eol;
$headers .= $attachment.$eol.$eol;
$headers .= "--".$separator."--";

// send message
if (mail($to, $subject, "", $headers)) {
    echo "mail send ... OK";
} else {
    echo "mail send ... ERROR";
}
$to=”myemail@mydomain.com";
$from=“网站”;
$subject=“测试附件电子邮件”;
$separator=md5(time());
//回车类型(我们使用一个PHP行尾常量)
$eol=PHP\u eol;
//附件名称
$filename=“document.pdf”;
//$pdfdoc是由FPDF生成的PDF
$attachment=chunk_split(base64_encode($pdfdoc));
//主割台
$headers=“From:”.$From.$eol;
$headers.=“MIME版本:1.0”。$eol;
$headers.=“内容类型:多部分/混合;边界=\”“.$separator.\”“.$eol.$eol;
$headers.=“内容传输编码:7bit”。$eol;
$headers.=“这是一条MIME编码的消息。”。$eol.$eol;
//信息
$headers.=“-”$separator.$eol;
$headers.=“内容类型:text/html;字符集=\“iso-8859-1\”。$eol;
$headers.=“内容传输编码:8位”。$eol.$eol;
$headers.=$message.$eol.$eol;
//附件:
$headers.=“-”$separator.$eol;
$headers.=“内容类型:应用程序/八位字节流;名称=\”.$filename.\”.$eol;
$headers.=“内容传输编码:base64”。$eol;
$headers.=“内容处置:附件”。$eol.$eol;
$headers.=$attachment.$eol.$eol;
$headers.=“--”“分隔符”“--”;
//发送消息
if(邮件($to,$subject,“,$headers)){
回显“邮件发送…确定”;
}否则{
回显“邮件发送…错误”;
}
$to=”myemail@mydomain.com";
$from=“网站”;
$subject=“测试附件电子邮件”;
$separator=md5(time());
//回车类型(我们使用一个PHP行尾常量)
$eol=PHP\u eol;
//附件名称
$filename=“document.pdf”;
//$pdfdoc是由FPDF生成的PDF
$attachment=chunk_split(base64_encode($pdfdoc));
//主割台
$headers=“From:”.$From.$eol;
$headers.=“MIME版本:1.0”。$eol;
$headers.=“内容类型:多部分/混合;边界=\”.$separator.\”;
//没有更多的标题之后,我们开始身体//
$body=“-->$分隔符.$eol;
$body.=“内容传输编码:7bit”。$eol.$eol;
$body.=“这是一条MIME编码的消息。”。$eol;
//信息
$body.=“-”$separator.$eol;
$body.=“内容类型:文本/html;字符集=\“iso-8859-1\”。$eol;
$body.=“内容传输编码:8位”。$eol.$eol;
$body.=$message.$eol;
//附件:
$body.=“-”$separator.$eol;
$body.=“内容类型:应用程序/八位字节流;名称=\”“.$filename.\”“.$eol;
$body.=“内容传输编码:base64”。$eol;
$body.=“内容处置:附件”。$eol.$eol;
$body.=$attachment.$eol;
$body.=“--”“分隔符”“--”;
//发送消息
if(邮件($to、$subject、$body、$headers)){
回显“邮件发送…确定”;
}否则{
回显“邮件发送…错误”;
}
我所做的:

  • 将主体与标题分开
  • 移除了放置在分离器前的额外EOL

这些是我在脚本中使用的标题

$base = basename($_FILES['upload']['name']);
$file = fopen($randname_path,'rb');
$size = filesize($randname_path);
$data = fread($file,$size);
fclose($file);
$data = chunk_split(base64_encode($data));

//boundary
$div = "==Multipart_Boundary_x".md5(time())."x";
//headers
$head = "From: $from\n".
        "MIME-Version: 1.0\n".
        "Content-Type: multipart/mixed;\n".
        " boundary=\"$div\"";
//message
$mess = "--$div\n".
        "Content-Type: text/plain; charset=\"iso-8859-1\"\n".
        "Content-Transfer-Encoding: 7bit\n\n".
        "$message\n\n".
        "--$div\n".
        "Content-Type: application/octet-stream; name=\"$base\"\n".
        "Content-Description: $base\n".
        "Content-Disposition: attachment;\n".
        " filename=\"$base\"; size=$size;\n".
        "Content-Transfer-Encoding: base64\n\n".
        "$data\n\n".
        "--$div\n";
$return = "-f$from";

我也面临着这个问题,并找到了一个简洁的答案。您可以将此功能用于多个附件

function mail_attachment($files, $path, $mailto, $from_mail, $from_name, $replyto, $subject, $message, $cc, $bcc) 
{
    $uid = md5(uniqid(time()));
    $header = "From: ".$from_name." <".$from_mail.">\r\n";
    $header .= "Reply-To: ".$replyto."\r\n";
    $header .= "cc : < $cc > \r\n" ;  // comma saparated emails
    $header .= "Bcc :  < $bcc >\r\n"; // comma saparated emails
    $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";

    foreach ($files as $filename) 
    { 
        $file = $path.$filename; // path should be document root path.
        $name = basename($file);
        $file_size = filesize($file);
        $handle = fopen($file, "r");
        $content = fread($handle, $file_size);
        fclose($handle);
        $content = chunk_split(base64_encode($content));

        $header .= "--".$uid."\r\n";
        $header .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"; // use different content types here
        $header .= "Content-Transfer-Encoding: base64\r\n";
        $header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
        $header .= $content."\r\n\r\n";
    }
    $header .= "--".$uid."--";
    return mail($mailto, $subject, "", $header);
}
函数邮件\附件($files、$path、$mailto、$from\ mail、$from\ name、$replyto、$subject、$message、$cc、$bcc)
{
$uid=md5(uniqid(time());
$header=“From:”.$From\u name.\r\n”;
$header.=“回复:”.$replyto.\r\n”;
$header.=“cc:<$cc>\r\n”//逗号分隔电子邮件
$header.=“密件抄送:<$Bcc>\r\n”;//以逗号分隔的电子邮件
$header.=“MIME版本:1.0\r\n”;
$header.=“内容类型:多部分/混合;边界=\”.$uid.\“\r\n\r\n”;
$header.=“这是MIME格式的多部分消息。\r\n”;
$header.=“-”$uid.\r\n”;
$header.=“内容类型:text/html;字符集=iso-8859-1\r\n”;
$header.=“内容传输编码:7bit\r\n\r\n”;
$header.=$message.“\r\n\r\n”;
foreach($files作为$filename)
{ 
$file=$path.$filename;//路径应为文档根路径。
$name=basename($file);
$file\u size=文件大小($file);
$handle=fopen($file,“r”);
$content=fread($handle,$file\u size);
fclose($handle);
$content=chunk_split(base64_encode($content));
$header.=“-”$uid.\r\n”;
$header.=“内容类型:应用程序/八位字节流;名称=\”.$filename.\“\r\n”;//在此处使用不同的内容类型
$header.=“内容传输编码:base64\r\n”;
$header.=“内容处置:附件;文件名=\”.$filename.\“\r\n\r\n”;
$header.=$content.“\r\n\r\n”;
}
$header.=“--”$uid.--”;
返回邮件($mailto,$subject,“,$header);
}

希望有帮助。

正如我在@GovindTotla的回答中所评论的那样,他的解决方案对我很有效。为了完整起见,下面是带有两个附件的
$header
的输出代码。认为这是一个逆向设计的答案:

From: from@domain.com
Reply-To: reply@domain.com
Cc: cc@domain.com
Bcc: bcc@domain.com
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="2527518bb813d2f2847a2adba8b8b47f"

This is a multi-part message in MIME format.
--2527518bb813d2f2847a2adba8b8b47f
Content-type:text/html; charset=iso-8859-1
Content-Transfer-Encoding: 7bit

Here comes the message.

--2527518bb813d2f2847a2adba8b8b47f
Content-Type: application/octet-stream; name="test.txt"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="test.txt"

U29tZXRoaW5nIGVsc2UuIFNvbWV0aGluZyBlbHNlLiBTb21ldGhpbmcgZWxzZS4gU29tZXRoaW5n
IGVsc2UuIFNvbWV0aGluZyBlbHNlLiBTb21ldGhpbmcgZWxzZS4gU29tZXRoaW5nIGVsc2UuIFNv
bWV0aGluZyBlbHNlLiBTb21ldGhpbmcgZWxzZS4gU29tZXRoaW5nIGVsc2UuIFNvbWV0aGluZyBl
bHNlLiBTb21ldGhpbmcgZWxzZS4gU29tZXRoaW5nIGVsc2UuIFNvbWV0aGluZyBlbHNlLiBTb21l
dGhpbmcgZWxzZS4gU29tZXRoaW5nIGVsc2UuIFNvbWV0aGluZyBlbHNlLiBTb21ldGhpbmcgZWxz
ZS4gU29tZXRoaW5nIGVsc2UuIFNvbWV0aGluZyBlbHNlLgo=


--2527518bb813d2f2847a2adba8b8b47f
Content-Type: application/octet-stream; name="test2.txt"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="test2.txt"

VGhpcyBpcyB0aGUgY29udGVudCBvZiB0aGUgc2Vjb25kIGF0dGFjaG1lbnQuIFRoaXMgaXMgdGhl
IGNvbnRlbnQgb2YgdGhlIHNlY29uZCBhdHRhY2htZW50LiBUaGlzIGlzIHRoZSBjb250ZW50IG9m
IHRoZSBzZWNvbmQgYXR0YWNobWVudC4gVGhpcyBpcyB0aGUgY29udGVudCBvZiB0aGUgc2Vjb25k
IGF0dGFjaG1lbnQuIFRoaXMgaXMgdGhlIGNvbnRlbnQgb2YgdGhlIHNlY29uZCBhdHRhY2htZW50
LiBUaGlzIGlzIHRoZSBjb250ZW50IG9mIHRoZSBzZWNvbmQgYXR0YWNobWVudC4gVGhpcyBpcyB0
aGUgY29udGVudCBvZiB0aGUgc2Vjb25kIGF0dGFjaG1lbnQuCg==


--2527518bb813d2f2847a2adba8b8b47f--

几天前我看到过这样的“将所有内容放入
$headers
”。你们从哪里复制粘贴它?这个手动标题操作是一个肮脏的解决方案。就我个人而言,我是Zend_Mail的粉丝,尽管我想知道任何其他“智能”方法。@MattH.,Zend开发人员也不必做这种“肮脏的解决方案”?很明显,尽管有其他建议的解决方案,这还是行得通的!不适合我。我只是将
$更改为
$filename
变量。电子邮件已经发送,邮件正文和附件都在那里,但是文件被破坏了。我试过使用“.zip”和“.txt”。@Alin Purcaru:上面的代码对我不起作用,它只是发送了一个文件名的文件,该文件中缺少内容。我试过这段代码,所有东西都可以找到,但当我从email@MoazAteeq请定义变量绝对路径。这对我来说很好。看起来很像布莱恩的解决方案
From: from@domain.com
Reply-To: reply@domain.com
Cc: cc@domain.com
Bcc: bcc@domain.com
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="2527518bb813d2f2847a2adba8b8b47f"

This is a multi-part message in MIME format.
--2527518bb813d2f2847a2adba8b8b47f
Content-type:text/html; charset=iso-8859-1
Content-Transfer-Encoding: 7bit

Here comes the message.

--2527518bb813d2f2847a2adba8b8b47f
Content-Type: application/octet-stream; name="test.txt"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="test.txt"

U29tZXRoaW5nIGVsc2UuIFNvbWV0aGluZyBlbHNlLiBTb21ldGhpbmcgZWxzZS4gU29tZXRoaW5n
IGVsc2UuIFNvbWV0aGluZyBlbHNlLiBTb21ldGhpbmcgZWxzZS4gU29tZXRoaW5nIGVsc2UuIFNv
bWV0aGluZyBlbHNlLiBTb21ldGhpbmcgZWxzZS4gU29tZXRoaW5nIGVsc2UuIFNvbWV0aGluZyBl
bHNlLiBTb21ldGhpbmcgZWxzZS4gU29tZXRoaW5nIGVsc2UuIFNvbWV0aGluZyBlbHNlLiBTb21l
dGhpbmcgZWxzZS4gU29tZXRoaW5nIGVsc2UuIFNvbWV0aGluZyBlbHNlLiBTb21ldGhpbmcgZWxz
ZS4gU29tZXRoaW5nIGVsc2UuIFNvbWV0aGluZyBlbHNlLgo=


--2527518bb813d2f2847a2adba8b8b47f
Content-Type: application/octet-stream; name="test2.txt"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="test2.txt"

VGhpcyBpcyB0aGUgY29udGVudCBvZiB0aGUgc2Vjb25kIGF0dGFjaG1lbnQuIFRoaXMgaXMgdGhl
IGNvbnRlbnQgb2YgdGhlIHNlY29uZCBhdHRhY2htZW50LiBUaGlzIGlzIHRoZSBjb250ZW50IG9m
IHRoZSBzZWNvbmQgYXR0YWNobWVudC4gVGhpcyBpcyB0aGUgY29udGVudCBvZiB0aGUgc2Vjb25k
IGF0dGFjaG1lbnQuIFRoaXMgaXMgdGhlIGNvbnRlbnQgb2YgdGhlIHNlY29uZCBhdHRhY2htZW50
LiBUaGlzIGlzIHRoZSBjb250ZW50IG9mIHRoZSBzZWNvbmQgYXR0YWNobWVudC4gVGhpcyBpcyB0
aGUgY29udGVudCBvZiB0aGUgc2Vjb25kIGF0dGFjaG1lbnQuCg==


--2527518bb813d2f2847a2adba8b8b47f--