By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
446,183 Members | 1,179 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 446,183 IT Pros & Developers. It's quick & easy.

How can i send the mail with db field attachment?

P: 1
Hi
I am already send a mail using Php with some attachement into it. My Problem is the attachement file is in my Database(mysql). I don't know how can i get from database and then add to my mail.
Expand|Select|Wrap|Line Numbers
  1. <?php  function send_mail($emailaddress, $fromaddress, $emailsubject, $body, $ccaddress, $attachments=false)  {   
  2.  $eol="\r\n";  
  3.   $mime_boundary=md5(time());            # Common Headers    
  4.   $headers .= 'From: Sangeetha<'.$fromaddress.'>'.$eol;    
  5. $headers .= 'Cc: <'.$ccaddress.'>'.$eol;       
  6.  $headers .= "Message-ID: <".$now."TheSystem@".$_SERVER['SERVER_NAME'].">".$eol;   
  7.  $headers .= "X-Mailer: PHP v".phpversion().$eol;          // These two to help avoid spam-filters    
  8.   # Boundry for marking the split & Multitype Headers 
  9.    $headers .= 'MIME-Version: 1.0'.$eol;  
  10.   $headers .= "Content-Type: multipart/related; boundary=\"".$mime_boundary."\"".$eol;      
  11.   $msg = "";           
  12.    if ($attachments !== false)    {   
  13.      for($i=0; $i < count($attachments); $i++)      { 
  14.        if (is_file($attachments[$i]["file"]))        {             # File for Attachment       
  15. $file_name = substr($attachments[$i]["file"], (strrpos($attachments[$i]["file"], "/")+1));                 
  16. $handle=fopen($attachments[$i]["file"], 'rb');         
  17. $f_contents=fread($handle, filesize($attachments[$i]["file"]));          $f_contents=chunk_split(base64_encode($f_contents));    //Encode The Data For Transition using base64_encode();          
  18. fclose($handle);                    # Attachment          
  19. $msg .= "--".$mime_boundary.$eol;          
  20. $msg .= "Content-Type: ".$attachments[$i]["content_type"]."; name=\"".$file_name."\"".$eol;          
  21. $msg .= "Content-Transfer-Encoding: base64".$eol;          
  22. $msg .= "Content-Disposition: attachment; filename=\"".$file_name."\"".$eol.$eol; // !! This line needs TWO end of lines !! IMPORTANT !!          
  23. $msg .= $f_contents.$eol.$eol;               
  24.    }    
  25.   }    
  26. }        # Setup for text OR html    
  27. $msg .= "Content-Type: multipart/alternative".$eol;        # Text Version    
  28. $msg .= "--".$mime_boundary.$eol;    
  29. $msg .= "Content-Type: text/plain; charset=iso-8859-1".$eol;    
  30. $msg .= "Content-Transfer-Encoding: 8bit".$eol;    
  31. $msg .= strip_tags(str_replace("<br>", "\n", $body)).$eol.$eol;        # HTML Version    
  32. $msg .= "--".$mime_boundary.$eol;    
  33. $msg .= "Content-Type: text/html; charset=iso-8859-1".$eol;    
  34. $msg .= "Content-Transfer-Encoding: 8bit".$eol;    
  35. $msg .= $body.$eol.$eol;        # Finished    
  36. $msg .= "--".$mime_boundary."--".$eol.$eol;  // finish with two eol's for better security. see Injection.         
  37.  # SEND THE EMAIL    ini_set(sendmail_from,$fromaddress);  // the INI lines are to force the From Address to be used !    
  38. mail($emailaddress, $emailsubject, $msg, $headers);    ini_restore(sendmail_from);   
  39.  echo "mail send";  }    
  40. $emailaddress = "xxx@xx.com";  
  41. $fromaddress = "yyy@yahoo.com";  
  42. $ccaddress = "zzz@yahoo.com";    
  43. $emailsubject = "Test";    $link = mysql_connect("myConnection") or die                        ("Error connecting to mysql:");    mysql_select_db("index",$link) or die("Unable to select database: . mysql_error()");   
  44.  //$commid = $_POST["CommId"];  
  45. $selectSql = "select CommId, Attachment from COMM_EML_ATTACHMENT where CommId = 4167";    $
  46. result = mysql_query($selectSql,$link); 
  47.  while($row = mysql_fetch_array($result))  { 
  48.  $commid = $row["CommId"];  # Use relative paths to the attachments    $attachments = Array(    Array("file"=> $row["Attachment"],"content_type"=>"application/msword"));  
  49.  
  50. # Message Body  $body="This is a test message! ";   
  51.  
  52. $result = send_mail($emailaddress, $fromaddress, $emailsubject, $body, $ccaddress, $attachments);  }  
  53. mysql_close($link);  ?>
please help to solve it

Thanks
Chitu.
Sep 20 '07 #1
Share this Question
Share on Google+
1 Reply


pbmods
Expert 5K+
P: 5,821
Heya, Chitu03. Welcome to TSDN!

You can retrieve your file from the database the same way you would retrieve any other data. MySQL and PHP simply treat the file as a really long binary string.

[EDIT: Ah. I see that the framework you are using requires a file path. Try using file_put_contents() to create a temporary file.]
Sep 20 '07 #2

Post your reply

Sign in to post your reply or Sign up for a free account.