Comments (8)
client.is_connected
should always be a boolean, and client.connect()
shouldn't hang. Any idea what it's hanging on?
You can avoid the whole problem by using the send coroutine and creating a new connection each time, which is probably better practice anyway. But if you do have any more information, please provide it 🙂
from aiosmtplib.
I'm not sure why client was hanging, that may have something to do with the SMTP server we use, which I have no info about. For now I fixed it by creating a new client each time, which seems to work 🤔
from aiosmtplib.
Could you explain why creating a new connection would be considered best practice by the way?
from aiosmtplib.
It's just a simple way to avoid a lot of error states from server timeouts, etc.
I wonder if there is an internal lock in the library that's getting stuck, I'll see if I can add some test cases around that.
from aiosmtplib.
I tried writing a context manager like this:
@contextlib.asynccontextmanager
async def reconnect_smtp_client(
client: aiosmtplib.SMTP,
timeout: float = 15,
) -> AsyncIterator[None]:
try:
if not client.is_connected:
logging.warning("SMTP client is not connected, reconnecting.")
async with asyncio.timeout(timeout):
await client.connect()
yield
except SMTPServerDisconnected:
logging.warning("Caught SMTPServerDisconnected exception, reconnecting.")
async with asyncio.timeout(timeout):
await client.connect()
raise
But as I said it hanged on client.connect()
indefinitely (initially asyncio.timeout
wasn't there)
from aiosmtplib.
im also facing this issue
my idea is to keep SMTP client instance in memory because i dont want to spend time connecting & doing login to a server each time i want to send a message
my steps to reproduce are:
- create SMTP client instance
smtp_client = SMTP(...)
- connect to an SMTP server (i use mailslurper for development) and send a message
if not smtp_client.is_connected:
await smtp_client.connect(timeout=10)
smtp_client.send_message(message)
- intentionally stop SMTP server
- try to repeat step 2. when calling
await smtp_client.connect
the program hangs infinitely
from aiosmtplib.
I think that's the exact problem I had
from aiosmtplib.
i did some digging and found out that this is the place where program hangs
so we need to explicitly release _connect_lock
in order to be able to reconnect again
this code seems to work
if not smtp_client.is_connected:
if smtp_client._connect_lock and smtp_client._connect_lock.locked():
smtp_client.close()
await smtp_client.connect()
from aiosmtplib.
Related Issues (20)
- Enabling UTF-8 for Authetication HOT 5
- 4 failing tests HOT 7
- add github issues url to bug reporting docs section HOT 1
- [Debian] Please include CHANGELOG.rst in your pypi releases. HOT 2
- Please support choice of outbound IP address HOT 1
- Suggestion: Support 'TLS optional' usage HOT 3
- Add testing section to docs HOT 2
- Timed out waiting for server ready message HOT 3
- Error trying to use the mail_options or rcpt_options arguments HOT 1
- Do not receive emails using Bcc, Cc headers HOT 2
- Custom DNS resolver HOT 1
- aiosmtplib is not working. [SSL: WRONG_VERSION_NUMBER] wrong version number HOT 1
- packaging issue: deployment of tests HOT 1
- Operation-level timeout HOT 4
- Gives AttributeError when calling with when HOT 2
- Support LMTP HOT 3
- Proxy support HOT 1
- TIP: HOT 1
- Type of "send" is partially unknown HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from aiosmtplib.