Tho*_*ade 3 php email attachment
我正在尝试创建一个脚本,该脚本将通过电子邮件发送从我正在开发的iphone应用程序上传的图像.
我已经能够通过脚本向我发送带附件的电子邮件.但是,附件总是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\r\n"; // <- the "\r\n" indicate a carriage return and newline, respectively
$headers .= "From: <example@example.com>\r\n";
$headers .= "Content-Type: multipart/mixed; boundary=" . $boundary . "\r\n"; // <- 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 = "\r\n\r\n--" . $boundary . "\r\n"; // <- This indicates that I'm going to start
// declaring headers specific to this section of the email.
// MAKE SURE there's only ONE(1) "\r\n" between the above boundry and the first header below (Content-Type)
$message .= "Content-type: text/plain; charset=\"iso-8859-1\"\r\n"; // <- Here I'm saying this content should be plain text
$message .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
// Body of the email for the headers I just declared
$message .= "Someone filled out the form. See their info below:\r\n";
$message .= "Name:";
//Second Content Type
$message .= "\r\n\r\n--" . $boundary . "\r\n"; // <- This idicates that I'm going to start
// declaring some more headers for the content below
// MAKE SURE there's only ONE(1) "\r\n" between the above boundry and the first header below (Content-Type)
$message .= "Content-type: image/jpeg\r\n"; // <- Here I'm saying that this Content Type is for a JPEG image
$message .= "Content-Transfer-Encoding: base64\r\n"; // <- this is saying that this section's content will be base64 Encoded
$message .= "Content-Disposition: attachment; filename=\"Image.jpg\"\r\n"; // <- 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 .= "\r\n\r\n--" . $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";
Run Code Online (Sandbox Code Playgroud)
一切正常,但附件是0kb.
任何帮助表示赞赏.
谢谢.
mti*_*935 11
// 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 .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\"";
// multipart boundary
$message = "This is a multi-part message in MIME format.\n\n" . "--{$mime_boundary}\n" . "Content-Type: text/plain; charset=\"iso-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n";
$message .= "--{$mime_boundary}\n";
// 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\"};\n" . " name=\"".$fname."\"\n" .
"Content-Disposition: attachment;\n" . " filename=\"$fname\"\n" .
"Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
$message .= "--{$mime_boundary}--\n";
// send
//print $message;
$ok = @mail($to, $subject, $message, $headers, "-f " . $from);
Run Code Online (Sandbox Code Playgroud)