mirror of
https://github.com/chatmail/core.git
synced 2026-05-19 23:06:32 +03:00
feat: request smtp ALPN for SMTP TLS connections
Even though SMTP ALPN is not officially registered (unlike IMAP), it is an obvious choice that will allow to multiplex SMTP and other protocols on the same TLS port.
This commit is contained in:
@@ -120,7 +120,7 @@ impl Smtp {
|
|||||||
let socks5_stream = socks5_config
|
let socks5_stream = socks5_config
|
||||||
.connect(context, hostname, port, SMTP_TIMEOUT, strict_tls)
|
.connect(context, hostname, port, SMTP_TIMEOUT, strict_tls)
|
||||||
.await?;
|
.await?;
|
||||||
let tls_stream = wrap_tls(strict_tls, hostname, &[], socks5_stream).await?;
|
let tls_stream = wrap_tls(strict_tls, hostname, &["smtp"], socks5_stream).await?;
|
||||||
let buffered_stream = BufStream::new(tls_stream);
|
let buffered_stream = BufStream::new(tls_stream);
|
||||||
let session_stream: Box<dyn SessionBufStream> = Box::new(buffered_stream);
|
let session_stream: Box<dyn SessionBufStream> = Box::new(buffered_stream);
|
||||||
let client = smtp::SmtpClient::new().smtp_utf8(true);
|
let client = smtp::SmtpClient::new().smtp_utf8(true);
|
||||||
@@ -144,7 +144,7 @@ impl Smtp {
|
|||||||
let client = smtp::SmtpClient::new().smtp_utf8(true);
|
let client = smtp::SmtpClient::new().smtp_utf8(true);
|
||||||
let transport = SmtpTransport::new(client, BufStream::new(socks5_stream)).await?;
|
let transport = SmtpTransport::new(client, BufStream::new(socks5_stream)).await?;
|
||||||
let tcp_stream = transport.starttls().await?.into_inner();
|
let tcp_stream = transport.starttls().await?.into_inner();
|
||||||
let tls_stream = wrap_tls(strict_tls, hostname, &[], tcp_stream)
|
let tls_stream = wrap_tls(strict_tls, hostname, &["smtp"], tcp_stream)
|
||||||
.await
|
.await
|
||||||
.context("STARTTLS upgrade failed")?;
|
.context("STARTTLS upgrade failed")?;
|
||||||
let buffered_stream = BufStream::new(tls_stream);
|
let buffered_stream = BufStream::new(tls_stream);
|
||||||
@@ -179,7 +179,7 @@ impl Smtp {
|
|||||||
strict_tls: bool,
|
strict_tls: bool,
|
||||||
) -> Result<SmtpTransport<Box<dyn SessionBufStream>>> {
|
) -> Result<SmtpTransport<Box<dyn SessionBufStream>>> {
|
||||||
let tcp_stream = connect_tcp(context, hostname, port, SMTP_TIMEOUT, false).await?;
|
let tcp_stream = connect_tcp(context, hostname, port, SMTP_TIMEOUT, false).await?;
|
||||||
let tls_stream = wrap_tls(strict_tls, hostname, &[], tcp_stream).await?;
|
let tls_stream = wrap_tls(strict_tls, hostname, &["smtp"], tcp_stream).await?;
|
||||||
let buffered_stream = BufStream::new(tls_stream);
|
let buffered_stream = BufStream::new(tls_stream);
|
||||||
let session_stream: Box<dyn SessionBufStream> = Box::new(buffered_stream);
|
let session_stream: Box<dyn SessionBufStream> = Box::new(buffered_stream);
|
||||||
let client = smtp::SmtpClient::new().smtp_utf8(true);
|
let client = smtp::SmtpClient::new().smtp_utf8(true);
|
||||||
@@ -200,7 +200,7 @@ impl Smtp {
|
|||||||
let client = smtp::SmtpClient::new().smtp_utf8(true);
|
let client = smtp::SmtpClient::new().smtp_utf8(true);
|
||||||
let transport = SmtpTransport::new(client, BufStream::new(tcp_stream)).await?;
|
let transport = SmtpTransport::new(client, BufStream::new(tcp_stream)).await?;
|
||||||
let tcp_stream = transport.starttls().await?.into_inner();
|
let tcp_stream = transport.starttls().await?.into_inner();
|
||||||
let tls_stream = wrap_tls(strict_tls, hostname, &[], tcp_stream)
|
let tls_stream = wrap_tls(strict_tls, hostname, &["smtp"], tcp_stream)
|
||||||
.await
|
.await
|
||||||
.context("STARTTLS upgrade failed")?;
|
.context("STARTTLS upgrade failed")?;
|
||||||
let buffered_stream = BufStream::new(tls_stream);
|
let buffered_stream = BufStream::new(tls_stream);
|
||||||
|
|||||||
Reference in New Issue
Block a user