﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
34414	Connection to SMTP server not closed after exception	chamalsl	nobody	"Django EmailMessage class does not close connection to SMTP server, when an exception is raised.
     

{{{
     email_msg = EmailMessage(subject=""Topic\n"", body=""Body"", from_email=""chamals@test.com"",
                             to=[""chamaltest@test.com""])
     email_msg.send()
}}}


Above Django/python code sends an email. But the email's subject contains a new line.
So Django will raise a BadHeaderError. But the connection to the SMTP server is not closed.
 

== Steps

1. Create a Django app.
 Add this method to a view.  
 {{{
   def email(request):
     email_msg = EmailMessage(subject=""Topic\n"", body=""Body"", from_email=""chamals@test.com"",
                             to=[""chamaltest@test.com""])
     email_msg.send()
     return HttpResponse(""Sent"")
}}}

   * Note: There is a new line character in the email subject.

2. Install aiosmtpd
{{{
 python3 -m pip install aiosmtpd
}}}

3. Run smtpd server
   This will start a SMTP server on port 8025
{{{
 python3 -m aiosmtpd -n
}}}

4. Add these lines to settings.py of your Django app.
{{{
   EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
   EMAIL_HOST = 'localhost'
   EMAIL_PORT = 8025
}}}

5. Open attached send_emails.py
   Change URL in this line to match your application's URL.
{{{
 requests.get('http://localhost:8080/file/email')
}}}

6. Run send_emails.py
   This script will make 10 requests to send email.   
{{{
python3 send_emails.py
}}}

7. Check connections to port 8025 (SMTP server)
{{{
netstat -at | grep 8025
}}}
You can see some connections are in ESTABLISHED state.
   
8. Remove the new line character inside the ""def email"" method.
   Run send_emails.py.
   Then run
{{{
 netstat -at | grep 8025.
}}}
You will see all connections are in TIME_WAIT state.
"	Bug	closed	Core (Mail)	4.1	Normal	fixed		chamalsl	Accepted	0	0	0	0	0	0
