title: Binary file email attachment problem
body: <p>Using Python 3.1.2 I am having a problem sending binary attachment files (jpeg, pdf, etc.) - MIMEText attachments work fine.  The code in question is as follows...</p>
  
  <pre><code>for file in self.attachments:
     part = MIMEBase('application', "octet-stream")
     part.set_payload(open(file,"rb").read())
     encoders.encode_base64(part)
     part.add_header('Content-Disposition', 'attachment; filename="%s"' % file)
     msg.attach(part)   # msg is an instance of MIMEMultipart()
  
  server = smtplib.SMTP(host, port)
  server.login(username, password)
  server.sendmail(from_addr, all_recipients, msg.as_string())
  </code></pre>
  
  <p>However, way down in the calling-stack (see traceback below), it looks as though msg.as_string() has received an attachment which creates a payload of 'bytes' type instead of string.</p>
  
  <p>Has anyone any idea what might be causing the problem?  Any help would be appreciated.</p>
  
  <p>Alan</p>
  
  <hr>
  
  <pre><code>builtins.TypeError: string payload expected: &lt;class 'bytes'&gt;
  File "c:\Dev\CommonPY\Scripts\email_send.py", line 147, in send
    server.sendmail(self.from_addr, all_recipients, msg.as_string())
  File "c:\Program Files\Python31\Lib\email\message.py", line 136, in as_string
    g.flatten(self, unixfrom=unixfrom)
  File "c:\Program Files\Python31\Lib\email\generator.py", line 76, in flatten
    self._write(msg)
  File "c:\Program Files\Python31\Lib\email\generator.py", line 101, in _write
    self._dispatch(msg)
  File "c:\Program Files\Python31\Lib\email\generator.py", line 127, in _dispatch
    meth(msg)
  File "c:\Program Files\Python31\Lib\email\generator.py", line 181, in _handle_multipart
    g.flatten(part, unixfrom=False)
  File "c:\Program Files\Python31\Lib\email\generator.py", line 76, in flatten
    self._write(msg)
  File "c:\Program Files\Python31\Lib\email\generator.py", line 101, in _write
    self._dispatch(msg)
  File "c:\Program Files\Python31\Lib\email\generator.py", line 127, in _dispatch
    meth(msg)
  File "c:\Program Files\Python31\Lib\email\generator.py", line 155, in _handle_text
    raise TypeError('string payload expected: %s' % type(payload))
  </code></pre>