Jump to content

Recommended Posts

Hey everyone

 

I've got a loop that loops through attachments and then sends them by email.  When I sent it to my address the attachments got there fine.  However when I sent it to a different address the attachments got there but were all empty as if they hadn't been encoded properly.  Do you think this could be problem with my script or a problem with the different email addresses?  I've copied my script below. 

 

$to = "[email protected]"; 
$subject = "You have been sent some content by " . $_REQUEST['order_company_name']; 
$email = $_REQUEST['order_email'] ; 

foreach ($_FILES['att']['error'] as $key => $error) {
  if (UPLOAD_ERR_OK === $error) {

$att_path = $_FILES['att']['tmp_name'][$key];
$att_name = $_FILES['att']['name'][$key];
$att_size = $_FILES['att']['size'][$key];
$att_type = $_FILES['att']['type'][$key];

$fp = fopen( $att_path, "rb");
$file = fread( $fp, $att_size );
fclose ($fp);

$num = md5(time());
$str = "==multipart_Boundary_x{$num}x";

$file = chunk_split(base64_encode($file));

$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: multipart/mixed;";
$headers .= "boundary=\"{$str}\"\r\n";
$headers .= "From: $email"; 

$msg .= "This is a multi-part message in MIME format\r\n\n";
$msg .= "--{$str}\r\n";
$msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
$msg .= "Content-Transfer-Encoding: 8bit\r\n";
$msg .= "--{$str}\r\n";

$msg .= "Content-Type: {$att_type}; ";
$msg .= "name=\"{$att_name}\"\r\n";
$msg .= "Content-Disposition: attachment; ";
$msg .= "filename =\"{$att_name}\"\r\n";
$msg .= "Content-Transfer-Encoding: base64\r\n";
$msg .= "$file\r\n\n";
$msg .= "--{$str}";

$sent = mail($to, $subject, $msg, $headers) ; 
if($sent) 
{print "<p>Thank you.  Your attachment was sent successfully</p>"; }
else 
{print "<p>Sorry.  We encountered an error sending your mail</p>"; }

$msg = "";
$headers = "";
}
}

 

Thanks for any help

 

Link to comment
https://forums.phpfreaks.com/topic/203500-trouble-with-encoding/
Share on other sites

You may use this function. It works already tested.

 

<?php

 

function SendMail($emailaddress,$from,$fromaddress,$emailsubject="",$body="", $html = true,$attachment="",$encoding="utf-8"){

 

  if (strtoupper(substr(PHP_OS,0,3)=='WIN')) {

      $eol="";

  } elseif (strtoupper(substr(PHP_OS,0,3)=='MAC')) {

      $eol="\r";

  } else {

    $eol="\n";

  }

 

  if ($encoding != "utf-8" && !empty($body)) {

      $body = mb_convert_encoding($body, $encoding, "utf-8");

  }

 

  $msg = "";

 

  # Common Headers

  $headers .= "From: ".$from." <".$fromaddress.">".$eol;

  $headers .= "Reply-To: ".$from." <".$fromaddress.">".$eol;

  $headers .= "Return-Path: ".$from." <".$fromaddress.">".$eol;

  $headers .= "Message-ID: <".time()." serv@".$_SERVER['SERVER_NAME'].">".$eol;

  $headers .= "X-Mailer: PHP v".phpversion().$eol;

  $headers .= 'MIME-Version: 1.0'.$eol;

 

  if (!empty($attachment)) {

    //send multipart message

    # Boundry for marking the split & Multitype Headers

    $mime_boundary=md5(time());

 

    $headers .= "Content-Type: multipart/related; boundary=\"".$mime_boundary."\"".$eol;

 

    # File for Attachment

 

    $f_name = $attachment;

    $handle=fopen($f_name, 'rb');

    $f_contents=fread($handle, filesize($f_name));

    $f_contents=chunk_split(base64_encode($f_contents));

    $f_type=filetype($f_name);

    fclose($handle);

 

    # Attachment

    $msg .= "--".$mime_boundary.$eol;

    $msg .= "Content-Type: application/jpeg; name=\"".$file."\"".$eol;

    $msg .= "Content-Transfer-Encoding: base64".$eol;

    $msg .= "Content-Disposition: attachment; filename=\"".basename($attachment)."\"".$eol.$eol; // !! This line needs TWO end of lines !! IMPORTANT !!

    $msg .= $f_contents.$eol.$eol;

    # Setup for text OR html

    $msg .= "Content-Type: multipart/alternative".$eol;

     

    $contentType = "text/plain";

    if ($html) {

      $contentType = "text/html";

    }

 

    # Body

    $msg .= "--".$mime_boundary.$eol;

    $msg .= "Content-Type: ".$contentType."; charset=\"".$encoding."\"".$eol;

    $msg .= "Content-Transfer-Encoding: 8bit".$eol.$eol; // !! This line needs TWO end of lines !! IMPORTANT !!

    $msg .= $body.$eol.$eol;

 

    # Finished

    $msg .= "--".$mime_boundary."--".$eol.$eol;  // finish with two eol's for better security.

  } else {

    $headers .= "Content-Type: text/plain; charset=\"".$encoding."\"".$eol;

    $headers .= "Content-Transfer-Encoding: 8bit".$eol.$eol; // !! This line needs TWO end of lines !! IMPORTANT !!

    $msg .= $body.$eol.$eol;

  }

 

  ini_set(sendmail_from, $fromaddress); //needed to hopefully get by spam filters.

  $success = mail($emailaddress, $emailsubject, $msg, $headers);

  ini_restore(sendmail_from);

 

  return $success;

}

?>

 

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.