agronholm / agronholm/smtpproto

Multiple problems trying to send email

オープン
#35 コメント 7 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Python
スター
19
フォーク
3
PR マージ指標
30日以内にマージされた PR はありません

説明

Hello! I'm testing this library in my pet project, and I'm having quite a number of problems trying to send email.

To start with, the configuration is as follows:
- host "smtp.mail.ru"
- port 465
- the server tells to use "tls/ssl"

Now, some of these problems may come from the non-standard server, but here is my story nonetheless.

First of all, the initial waiting hangs and ends after timeout: https://github.com/agronholm/smtpproto/blob/master/src/smtpproto/client.py#L82

I looked in and discovered, that connect_tcp function accepts ssl_context as argument, but it is not passed (though, the client might be instantiated with it). https://github.com/agronholm/smtpproto/blob/master/src/smtpproto/client.py#L79
So I passed `ssl.SSLContext()`, and connected. I know, that TLSWrapper is applied later, but for some reason I couldn't even pass this line to get it.

Then I failed trying to authenticate with `LoginAuthenticator`. The exception was:
```
ValueError: Unhandled question: VXNlcm5hbWU6
```
which is "Username:" when decoded. So, essentially the problem is the semicolon. I don't know, whether it's a violation of standard or not, but maybe make an additional check here? https://github.com/agronholm/smtpproto/blob/master/src/smtpproto/auth.py#L72
Like, instead for strict equality, check that `question[:8] == "username"` or something?

Also, correct me if I'm wrong, but `question` is never decoded from bytes https://github.com/agronholm/smtpproto/blob/master/src/smtpproto/auth.py#L71 So the latter checks don't make sense.

After I fix all that, I get the final nail in the coffin with
```
smtpproto.protocol.SMTPProtocolViolation: Tried to send a command before the previous one received a response
```

To be honest, I don't understand, under which circumstances this error should popup at all? Shouldn't we wait for response, before sending the next command?

----------

P.S. After all that, I tried sending a mail with standard Django smtp EmailBackend for comparison. And you know what? It hanged out completely :-) Maybe its the kind of problem, that Nathaniel Smith wrote here about `select.select`... https://vorpus.org/blog/control-c-handling-in-python-and-trio/#how-does-the-python-interpreter-pull-it-off

P.P.S. aiosmtplib implementation works without problems.

But anyway, there are definitely some questions to smtpproto as well. Could you check them out, please?

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。