PHP 发送带有图像附件的电子邮件 [英] PHP send an email with image attachment

查看:41
本文介绍了PHP 发送带有图像附件的电子邮件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建一个脚本,该脚本将从我正在开发的 iphone 应用程序上传的图像通过电子邮件发送给我.

I'm trying to create a script that will send an image uploaded from an iphone app I'm developing to me in an email.

我已经能够让脚本向我发送带有附件的电子邮件.但是,附件始终为 0kb.

I've been able to get the script to send me an email with an attachment. However, the attachment is always 0kb.

这是我的代码:

// Standard email info


$to = 'example@example.com'; 
 $subject = 'Email with an image attached'; 

 // This variable will be used when declaring the "boundaries"
 // for the different sections of the email
 $boundary = md5(date('r', time()));

 //Initial Headers 
 $headers = "MIME-Version: 1.0
"; // <- the "
" indicate a carriage return and newline, respectively
 $headers .= "From: <example@example.com>
";
 $headers .= "Content-Type: multipart/mixed; boundary=" . $boundary . "
"; // <- This is 
 // saying the there will be more than one (a "mix") of Content Types in this email.
 // The "boundary" value will indicate when each content type will start

  //First Content Type
 $message = "

--" . $boundary . "
"; // <- This indicates that I'm going to start
 // declaring headers specific to this section of the email. 
 // MAKE SURE there's only ONE(1) "
" between the above boundry and the first header below (Content-Type)
 $message .= "Content-type: text/plain; charset="iso-8859-1"
"; // <- Here I'm saying this content should be plain text
 $message .= "Content-Transfer-Encoding: 7bit

";

 // Body of the email for the headers I just declared 
 $message .= "Someone filled out the form. See their info below:
";
 $message .= "Name:";

//Second Content Type
 $message .= "

--" . $boundary . "
"; // <- This idicates that I'm going to start 
 // declaring some more headers for the content below
 // MAKE SURE there's only ONE(1) "
" between the above boundry and the first header below (Content-Type)
 $message .= "Content-type: image/jpeg
"; // <- Here I'm saying that this Content Type is for a JPEG image
 $message .= "Content-Transfer-Encoding: base64
"; // <- this is saying that this section's content will be base64 Encoded
 $message .= "Content-Disposition: attachment; filename="Image.jpg"
"; // <- This is saying the content below should be an attachment and gives it a file name

 // The base64_encode below is necessary because this is a file. 
 $message .= base64_encode(file_get_contents($_FILES["userfile"]["name"])); 

 $message .= "

--" . $boundary . "--"; // <- This indicates the end of the boundries. Notice the additional "--" after the boundry's value.

 // Send the email using "mail()".
 // Adding the "$mail_sent = " before "mail()" will store TRUE in $mail_sent if the email is sent successfully
 // Adding the "@" sign before "mail()" will disable error display so users
 // won't see the actual error info if it fails, just "Mail failed".
 $mail_sent = @mail($to, $subject, $message, $headers); 

 //Check to see if the email was sent successfully ($mail_sent = true).
 //If so, display "Mail Sent" to the screen, else display "Mail Failed".
 echo $mail_sent ? "Mail sent" : "Mail failed"; 

除了附件为 0kb 外,一切正常.

Everything works fine except the attachment is 0kb.

感谢任何帮助.

谢谢.

推荐答案

        // to, from, subject, message body, attachment filename, etc.
        $to = "to@to.com";
        $from = "from@from.com";
        $subject = "subject";
        $message = "this is the message body";
        $filename = "/home/user/file.jpeg";
        $fname = "file.jpeg";

        $headers = "From: $from"; 
        // boundary 
        $semi_rand = md5(time()); 
        $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 

        // headers for attachment 
        $headers .= "
MIME-Version: 1.0
" . "Content-Type: multipart/mixed;
" . " boundary="{$mime_boundary}""; 

        // multipart boundary 
        $message = "This is a multi-part message in MIME format.

" . "--{$mime_boundary}
" . "Content-Type: text/plain; charset="iso-8859-1"
" . "Content-Transfer-Encoding: 7bit

" . $message . "

"; 
        $message .= "--{$mime_boundary}
";

        // preparing attachments            
            $file = fopen($filename,"rb");
            $data = fread($file,filesize($filename));
            fclose($file);
            $data = chunk_split(base64_encode($data));
            $message .= "Content-Type: {"application/octet-stream"};
" . " name="".$fname.""
" . 
            "Content-Disposition: attachment;
" . " filename="$fname"
" . 
            "Content-Transfer-Encoding: base64

" . $data . "

";
            $message .= "--{$mime_boundary}--
";


        // send
        //print $message;

        $ok = @mail($to, $subject, $message, $headers, "-f " . $from);          

这篇关于PHP 发送带有图像附件的电子邮件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆