-
Notifications
You must be signed in to change notification settings - Fork 48
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
client.connect() call hangs after server timeout #243
Comments
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 🙂 |
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 🤔 |
Could you explain why creating a new connection would be considered best practice by the way? |
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. |
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 |
im also facing this issue my steps to reproduce are:
smtp_client = SMTP(...)
if not smtp_client.is_connected:
await smtp_client.connect(timeout=10)
smtp_client.send_message(message)
|
I think that's the exact problem I had |
i did some digging and found out that this is the place where program hangs if not smtp_client.is_connected:
if smtp_client._connect_lock and smtp_client._connect_lock.locked():
smtp_client.close()
await smtp_client.connect() |
Describe the bug
It seems like at some point my smtp client is losing connection
client.is_connected
is None, and it hangs indefinitely if I callclient.connect()
.That problem may be related to specific SMTP server I'm using, but I don't know 🤷.
My question is: I keep SMTP instance in memory indefinitely, is that okay, or should I create a new client each time I need to send a message?
The text was updated successfully, but these errors were encountered: