title: Python SMTP/MIME Message body
body: <p>I've been working on this for 2 days now and managed to get this script with a pcapng file attached to send but I cannot seem to make the message body appear in the email.</p>
  
  <pre><code>import smtplib
  import base64
  import ConfigParser
  #from email.MIMEapplication import MIMEApplication
  #from email.MIMEmultipart import MIMEMultipart
  #from email.MIMEtext import MIMEText
  #from email.utils import COMMASPACE, formatdate
  
  Config = ConfigParser.ConfigParser()
  Config.read('mailsend.ini')
  
  filename = "test.pcapng"
  
  fo = open(filename, "rb")
  filecontent = fo.read()
  encoded_content = base64.b64encode(filecontent)  # base 64
  
  sender = 'notareal@email.com'  # raw_input("Sender: ")
  receiver = 'someother@fakeemail.com'  # raw_input("Recipient: ")
  
  marker = raw_input("Please input a unique set of numbers that will not be found elsewhere in the message, ie- roll face: ")
  
  body ="""
  This is a test email to send an attachment.
  """
  
  # Define the main headers
  header = """ From: From Person &lt;notareal@email.com&gt;
  To: To Person &lt;someother@fakeemail.com&gt;
  Subject: Sending Attachment
  MIME-Version: 1.0
  Content-Type: multipart/mixed; boundary=%s
  --%s
  """ % (marker, marker)
  
  # Define message action
  message_action = """Content-Type: text/plain
  Content-Transfer-Encoding:8bit
  
  %s
  --%s
  """ % (body, marker)
  
  # Define the attachment section
  message_attachment = """Content-Type: multipart/mixed; name=\"%s\"
  Content-Transfer-Encoding:base64
  Content-Disposition: attachment; filename=%s
  
  %s
  --%s--
  """ % (filename, filename, encoded_content, marker)
  
  message = header + message_action + message_attachment
  
  try:
      smtpObj = smtplib.SMTP('smtp.gmail.com')
      smtpObj.sendmail(sender, receiver, message)
      print "Successfully sent email!"
  except Exception:
      print "Error: unable to send email"
  </code></pre>
  
  <p>My goal is to ultimately have this script send an email after reading the parameters from a config file and attach a pcapng file along with some other text data describing the wireshark event. The email is not showing the body of the message when sent. The pcapng file is just a test file full of fake ips and subnets for now. Where have I gone wrong with the message body?</p>
  
  <pre><code>def mail_man():
      if ms == 'Y' or ms == 'y' and ms_maxattach &lt;= int(smtp.esmtp_features['size']):
          fromaddr = [ms_from]
          toaddr = [ms_sendto]
          cc = [ms_cc]
          bcc = [ms_bcc]
  
          msg = MIMEMultipart()
  
          body = "\nYou're captured event is attached. \nThis is an automated email generated by Dumpcap.py"
  
          msg.attach("From: %s\r\n" % fromaddr
          + "To: %s\r\n" % toaddr
          + "CC: %s\r\n" % ",".join(cc)
          + "Subject: %s\r\n" % ms_subject
          + "X-Priority = %s\r\n" % ms_importance
          + "\r\n"
          + "%s\r\n" % body
          + "%s\r\n" % ms_pm)
          toaddrs = [toaddr] + cc + bcc
  
          msg.attach(MIMEText(body, 'plain'))
  
          filename = "dcdflts.cong"
          attachment = open(filename, "rb")
  
          if ms_attach == 'y' or ms_attach == "Y":
              part = MIMEBase('application', 'octet-stream')
              part.set_payload(attachment.read())
              encoders.encode_base64(part)
              part.add_header('Content-Disposition', "attachment; filename= %s" % filename)
              msg.attach(part)
  
          server = smtplib.SMTP(ms_smtp_server[ms_smtp_port])
          server.starttls()
          server.login(fromaddr, "YOURPASSWORD")
          text = msg.as_string()
          server.sendmail(fromaddr, toaddrs, text)
          server.quit()
  </code></pre>
  
  <p>This is my second attempt, all "ms_..." variables are global through a larger program.</p>