ImportError: No module named 'email.mime'; email is not a package

Question:

When running the below code, I keep getting the error:

ImportError: No module named 'email.mime'; email is not a package

So I run:

pip install email

And get the following error:

ImportError: No module named 'cStringIO'...
Command "python setup.py egg_info" failed with error code 1

The internet has told me to run:

pip install --upgrade pip

To solve this problem, which I’ve done many times now. I don’t know what else I can do.

Python version: Python 3.3.5 | Anaconda 2.3.0 (x86_64)

import smtplib,email,email.encoders,email.mime.text,email.mime.base

smtpserver = '[email protected]'
to = ['[email protected]']
fromAddr = '[email protected]'
subject = "testing email attachments"

# create html email
html = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" '
html +='"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html >'
html +='<body style="font-size:12px;font-family:Verdana"><p>...</p>'
html += "</body></html>"
emailMsg = email.MIMEMultipart.MIMEMultipart('text/csv')
emailMsg['Subject'] = subject
emailMsg['From'] = fromAddr
emailMsg['To'] = ', '.join(to)
emailMsg['Cc'] = ", ".join(cc)
emailMsg.attach(email.mime.text.MIMEText(html,'html'))

# now attach the file
fileMsg = email.mime.base.MIMEBase('text/csv')
fileMsg.set_payload(file('rsvps.csv').read())
email.encoders.encode_base64(fileMsg)
fileMsg.add_header('Content-Disposition','attachment;filename=rsvps.csv')
emailMsg.attach(fileMsg)

# send email
server = smtplib.SMTP(smtpserver)
server.sendmail(fromAddr,to,emailMsg.as_string())
server.quit()
Asked By: Super_John

||

Answers:

The issue is in pip. I was unable to update setuptools using

easy_install --upgrade setuptools

I was also unable to install email with pip using

pip install email

I fixed the problem by installing email using easy_install

easy_install email

Hope someone finds that as helpful. Thanks to those who have helped.

Answered By: Super_John

I encountered the same problem just now. Finally, I found it’s because I name the python file as ’email.py’. It works after changing its name.

Answered By: Yue Deng

I had the same problem. Both answers helped me solve it.
However, in addition I also had to delete the email.pyc file that was created when the script was run with the old name email.py.

To summarize:

  • make sure the email module is installed
  • delete the email.pyc file that was created when the script called email.py was run
  • rename the script to something else
Answered By: Simone

Don’t use “email” in your .py file name or even in package name as well.
This will cause confusion to the interpreter between user declared module and pre-defined modules

Answered By: Vivek
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.