Attaching a User Defined .JPG to an email with Sendmail

Posted on 2005-04-12
Last Modified: 2012-06-22
Hi. Here's what I'm trying to do - I have a form that users fill out, and then click BROWSE, choose a .JPG file and have it send to me via email. This is done on my school's server, as we're a school sponsored organization, and we HAVE to use SendMail and I DON'T have the capability to store the image on the server. It needs to be put into a Session Variable or Temp  Space and sent from there.

We only want .JPG files.

I've found a code online, but it doesn't seem to work. The form sends, but no attachment comes with it. That code is posted below. A solutoin  here is worth 500pts as I need it answered quickly and well :) Note, the solution does NOT have to use the code provided, rather, whatever will work to get this done. I'm simply providing what I have as a starting point and to show what other form-fields are being sent through the email.



      if ( $_POST['hidden'] == "sent" ) {

          function sendmail ($from_name, $from_email, $to_name, $to_email, $from_hometown, $from_address, $from_state, $from_zip, $from_telephone, $from_title, $from_category, $from_class, $from_professor, $from_url, $from_description, $subject, $text_message="", $html_message, $attachment="")
                  $from = "$from_name <$from_email>";
              $to   = "$to_name <$to_email>";
              $main_boundary = "----=_NextPart_".md5(rand());
              $text_boundary = "----=_NextPart_".md5(rand());
              $html_boundary = "----=_NextPart_".md5(rand());
              $headers  = "From: $from\n";
              $headers .= "Reply-To: $from\n";
              $headers .= "X-Mailer: Q Manning (\n";
              $headers .= "MIME-Version: 1.0\n";
              $headers .= "Content-Type: multipart/mixed;\n\tboundary=\"$main_boundary\"\n";
              $message .= "\n--$main_boundary\n";
              $message .= "Content-Type: multipart/alternative;\n\tboundary=\"$text_boundary\"\n";
              $message .= "\n--$text_boundary\n";
              $message .= "Content-Type: text/plain; charset=\"ISO-8859-1\"\n";
              $message .= "Content-Transfer-Encoding: 7bit\n\n";
              $message .= ($text_message!="")?"$text_message":"Text portion of HTML Email";
              $message .= "\n--$text_boundary\n";
              $message .= "Content-Type: multipart/related;\n\tboundary=\"$html_boundary\"\n";
              $message .= "\n--$html_boundary\n";
              $message .= "Content-Type: text/html; charset=\"ISO-8859-1\"\n";
              $message .= "Content-Transfer-Encoding: quoted-printable\n\n";
              $message .= str_replace ("=", "=3D", $html_message)."\n";
              if (isset ($attachment) && $attachment != "" && count ($attachment) >= 1)

                      $attfile = $attachment;
                      $file_name = ($_FILES['entryField']['name']);
                      $fp = fopen ($attfile, "r");
                      $fcontent = "";
                      while (!feof ($fp))
                          $fcontent .= fgets ($fp, 1024);
                      $fcontent = chunk_split (base64_encode($fcontent));
                      @fclose ($fp);
                      $message .= "\n--$html_boundary\n";
                      $message .= "Content-Type: application/octetstream\n";
                      $message .= "Content-Transfer-Encoding: base64\n";
                      $message .= "Content-Disposition: inline; filename=\"$file_name\"\n";
                      $message .= "Content-ID: <$file_name>\n\n";
                      $message .= $fcontent;
              $message .= "\n--$html_boundary--\n";
              $message .= "\n--$text_boundary--\n";
              $message .= "\n--$main_boundary--\n";
              @mail ($to, $subject, $message, $headers);
          # Example
          # Sender Name
          $from_name  = $_POST['name'];
          # Sender Email
          $from_email = $_POST['email'];
          # Recipient Name
          $to_name    = "Q Manning";
          # Recipient Email
          $to_email   = "";
          # Email Subject
          $subject    = "Best of 2thousand5 Design Annual Submission";
            # Hometown
            $from_hometown = $_POST['hometown'];
            # Current Address
            $from_address = $_POST['address'];      
            # City
            $from_city = $_POST['city'];            
            # State
            $from_state = $_POST['state'];      
            # Zip Code
            $from_zip = $_POST['zip'];            
            # Telephone Number
            $from_telephone = $_POST['telephone'];            
            # Title of Work
            $from_title = $_POST['title'];            
            # Category
            $from_category = $_POST['category'];            
            # Class Created For
            $from_class = $_POST['class'];      
            # Professor Name
            $from_professor = $_POST['professor'];                  
            # Their Website URL
            $from_url = $_POST['url'];            
            # Description of Work
            $from_description = $_POST['description'];            
          # Text Portion
            $text_message = "This is HTML email and your email client softawre ain't support HTML email.";
          # HTML Portion
          $html_message = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n";
          $html_message.= "<html><head><title></title>\n";
          $html_message.= "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n";
          $html_message.= "<style type=\"text/css\">\n";
          $html_message.= "body, td {\nfont-family: Trebuchet MS;\nfont-size: 12px;\n}\n";
          $html_message.= "</style>\n";
          $html_message.= "</head>\n";
          $html_message.= "<body><table width=\"100%\" cellpadding=0 cellspacing=0>";
            $html_message.= "<tr><td><b>Name:</b> $from_name</td></tr>";
            $html_message.= "<tr><td><b>Email:</b> $from_email</td></tr>";             
            $html_message.= "<tr><td><b>Hometowm:</b> $from_hometown</td></tr>";             
            $html_message.= "<tr><td><b>Local Address:</b> $from_address</td></tr>";             
            $html_message.= "<tr><td><b>State:</b> $from_state</td></tr>";             
            $html_message.= "<tr><td><b>Zip:</b> $from_zip</td></tr>";             
            $html_message.= "<tr><td><b>Telephone:</b> $from_telephone</td></tr>";             
            $html_message.= "<tr><td><b>Title of Work:</b> $from_title</td></tr>";             
            $html_message.= "<tr><td><b>Category:</b> $from_category</td></tr>";             
            $html_message.= "<tr><td><b>Website URL:</b> $from_url</td></tr>";             
            $html_message.= "<tr><td><b>Description:</b> $from_description</td></tr>";             
          $html_message.= "</tr></table>";
          $html_message.= "</body></html>";
          # Attachment Location
           $file_name = ($_FILES['entryField']['name']);
          # Execute SendMail Function
          sendmail ($from_name, $from_email, $to_name, $to_email, $from_hometown, $from_address, $from_state, $from_zip, $from_telephone, $from_title, $from_category, $from_class, $from_professor, $from_url, $from_description, $subject, $text_message, $html_message, $attachment);

Question by:bleutuna
    LVL 2

    Expert Comment

    Could you post the form that the submits to the code above?

    Author Comment

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

                            /* Body Styles */
                            body {background-image:url("images/backgrounds/cf_bo2005_bgtile.gif"); margin:0px; padding:0px;}
                            /* Text Styles */
                            /* Background Styles */
                            /* DIV Styles */
                            #counterformLogo {position:absolute; top:0px; left:0px; z-index:1000;}
                            #textTop {position:absolute; top:0px; left:109px; z-index:1000;}
                            #manStart {position:absolute; top:98px; left:0px; z-index:1000;}                        
                            #textBot{position:absolute; top:98px; left:109px; z-index:1000;}
                            #manStop {position:absolute; top:352px; left:0px; z-index:1000;}                        
                            #formSend {position:absolute; top:365px; right:16px; z-index:2000;}
                            #button {position:absolute; top:645px; right:20px; z-index:2000;}      
                            /* Form Styles */
                            .textBox {background-color:#D80280; border-style:solid; border-width:1px; border-color:#009FDA; font-size:10px; color:#ffffff; font-family:din engrschift, arial narrow, arial, helvetica, sans-serif; text-align:right; padding-right:5px; text-transform:uppercase;}
                            submit {background-color:#F9E500; border-style:solid; border-width:1px; border-color:#D80280; font-family: din engscrhrift, arial narrow, arial, helvetica, sans-serif; font-size:10px; color:#D80280;}

    <form action="annual.php" method="post">
    <div id="counterformLogo"><img src="images/structure/cf_bf2005_topleft_01.gif" width="109" height="98" hspace="0" vspace="0" border="0" alt="Counterform, The Graphic Design Club" /></div>
    <div id="textTop"><img src="images/structure/cf_bf2005_topright_01.gif" width="325" height="98" hspace="0" vspace="0" border="0" alt="" /></div>
    <div id="manStart"><img src="images/structure/cf_bf2005_topleft_02.gif" width="109" height="254" hspace="0" vspace="0" border="0" alt="" /></div>
    <div id="textBot"><img src="images/structure/cf_bf2005_topright_02.gif" width="325" height="254" hspace="0" vspace="0" border="0" alt="" /></div>
    <div id="manStop"><img src="images/backgrounds/cf_bo2005_bgtile_bot.gif" width="450" height="348" hspace="0" vspace="0" border="0" alt="" /></div>
    <div id="formSend">
          <table border="0" cellpadding="0" cellspacing="5" cellspacing="0" align="right">
                      <td><input type="text" class="textBox" value="name" name="name" size="35" /></td>
                      <td><input type="text" class="textBox" value="email" name="email" size="25" /></td>                  
                      <td colspan="2" align="right"><input type="text" class="textBox" value="hometown, state" name="hometown" size="45" /></td>
          </table>      <br clear="all">
          <table border="0" cellpadding="0" cellspacing="5" cellspacing="0" align="right">
                      <td align="right"><input type="text" class="textBox" value="current street address" name="address" size="35" /></td>
                      <td align="right"><input type="text" class="textBox" value="city" name="city" size="20" /></td>                  
          </table> <br clear="all">
          <table border="0" cellpadding="0" cellspacing="5" cellspacing="0" align="right">      
                      <td><input type="text" class="textBox" value="state" name="state" size="5" /></td>
                      <td><input type="text" class="textBox" value="zip" name="zip" size="10" /></td>                  
                      <td><input type="text" class="textBox" value="telephone" name="telephone" size="25" /></td>                                    
          </table>      <br clear="all">
          <table border="0" cellpadding="0" cellspacing="5" cellspacing="0" align="right">
                      <td align="right"><input type="text" class="textBox" value="title of work" name="title" size="35" /></td>                  
                      <td align="right">
                            <select class="textBox" name="category">
                                  <option value="">select category</option>
                                  <option value="identity">identity design</option>
                                  <option value="illustration">poster design</option>                                                            
                                  <option value="package">package design</option>                              
                                  <option value="poster">poster design</option>                              
                                  <option value="print">print design</option>
                                  <option value="photography">photography</option>                              
                                  <option value="typography">typography design</option>                              
                                  <option value="web">web design</option>                              
                                  <option value="misc">miscellaneous</option>                                                            
                      <td align="right"><input type="text" class="textBox" value="class created for" name="class" size="25" /></td>
                      <td align="right"><input type="text" class="textBox" value="professor's name" name="professor" size="25" /></td>                  
                      <td colspan="2" align="right"><input type="text" class="textBox" value="your website url" name="url" size="45" /></td>
                      <td colspan="2" align="right">
    <textarea class="textBox" rows="3" cols="50" name="description">
          </table><br clear="all">
          <table border="0" cellpadding="0" cellspacing="5" cellspacing="0" align="right">      
                      <td colspan="2" align="right"><input type="file" class="textBox" value="" name="entryFile" size="45" /> <input type="hidden" name="hidden" value="sent" /></td>
    <div id="button"><input type="image" src="images/structure/cf_bf2005_button.gif" width="130" height="48" hspace="0" vspace="0" border="0" alt="send entry" /></div>
    LVL 25

    Accepted Solution

    It's much easier to get multipart email working right using PHPMailer. This code has several problems which may be stopping it working:

    For RFC2822 compliance, headers should be separated using \r\n, not just \n. Some email clients will accept it, but that doesn't make it right.

    $message .= "Content-Type: application/octetstream\n";

    should be:

    $message .= "Content-Type: application/octet-stream\n";

    Though strictly speaking, if you're sending a jpeg image, it should be 'image/jpeg', which may allow things like inline rendering in email clients.

    This is wrong too:

    $message .= "Content-Disposition: inline; filename=\"$file_name\"\n";

    should be:

    $message .= "Content-Disposition: attachment; filename=\"$file_name\"\n";
    LVL 14

    Expert Comment

    No comment has been added to this question in more than 21 days, so it is now classified as abandoned..
    I will leave the following recommendation for this question in the Cleanup topic area:
    Accept: Squinky {http:#13773583}

    Any objections should be posted here in the next 4 days. After that time, the question will be closed.

    EE Cleanup Volunteer

    Write Comment

    Please enter a first name

    Please enter a last name

    We will never share this with anyone.

    Featured Post

    Better Security Awareness With Threat Intelligence

    See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

    Suggested Solutions

    This is a general how to create your own custom plugin system for your PHP application that you designed (or wish to extend a third party program to have plugin functionality that doesn't have it yet).  This is not how to make plugins for existing s…
    I imagine that there are some, like me, who require a way of getting currency exchange rates for implementation in web project from time to time, so I thought I would share a solution that I have developed for this purpose. It turns out that Yaho…
    This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.
    The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …

    760 members asked questions and received personalized solutions in the past 7 days.

    Join the community of 500,000 technology professionals and ask your questions.

    Join & Ask a Question

    Need Help in Real-Time?

    Connect with top rated Experts

    9 Experts available now in Live!

    Get 1:1 Help Now