Frequently Asked Questions

Circular Import

Question

I get this error:

Traceback (most recent call last):
File "..\email.py", line 1, in <module>
    from redmail import EmailSender
File "..\redmail\__init__.py", line 1, in <module>
    from .email.sender import EmailSender, send_email, gmail, outlook
File "..\redmail\email\__init__.py", line 1, in <module>
    from redmail.email.sender import EmailSender
File "..\redmail\email\sender.py", line 3, in <module>
    from email.message import EmailMessage
File "..\email.py", line 1, in <module>
    from redmail import EmailSender
ImportError: cannot import name 'EmailSender' from partially initialized module 'redmail' (most likely due to a circular import) (..\redmail\__init__.py)

Answer

This is due to your script is named as ´´email.py´´ and that happens to be the same name as the email library from standard library. Please use another filename than email.py.

From in Text Body

Question

In text body, a line starting with From gets turned to >From. For example, I have this code:

from redmail import EmailSender

email = EmailSender(...)

email.send(
    subject="An example email",
    sender="me@example.com",
    receivers=['me@example.com'],
    text="Hi!\nFrom what we discussed..."
)

But email body looks like this:

Hi!
>From what we discussed...

Answer

Please use HTML body instead if this causes problems. This is a problem in smtplib itself and there is nothing to do with it at the moment. Line beginning with From is mangled to >From to avoid body injection and there is no way to switch that off. See more details from this Stackoverflow answer.