summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaine Makelainen <raine.makelainen@jolla.com>2019-07-23 11:44:27 +0300
committerChris Adams <chris.adams@qinetic.com.au>2021-04-09 11:35:50 +1000
commitc6f7f4603cad31c2185bf6cd437c45397e27f064 (patch)
treed2bbc235f924d5baa5913c489688dfc536e18b0c
parenta32d3378f342a1d3b289d71e11a1f68a94d5891e (diff)
Use socket's local address for HELO and EHLO messages
Prefer first local domain name if we have one. After that if we have host address that is valid for any interface, then use it. Change-Id: I91acc9329b68f2146a7158eedc49d7a506b48376 Reviewed-by: Christopher Adams <chris.adams@jolla.com> Reviewed-by: David Llewellyn-Jones <david.llewellyn-jones@jolla.com>
-rw-r--r--src/plugins/messageservices/smtp/smtpclient.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/plugins/messageservices/smtp/smtpclient.cpp b/src/plugins/messageservices/smtp/smtpclient.cpp
index 71c7fb0c..ea45ca8e 100644
--- a/src/plugins/messageservices/smtp/smtpclient.cpp
+++ b/src/plugins/messageservices/smtp/smtpclient.cpp
@@ -74,11 +74,16 @@ static QByteArray messageId(const QByteArray& domainName, quint32 addressCompone
'>').toLatin1();
}
-static QByteArray localName()
+static QByteArray localName(const QHostAddress &hostAddress)
{
+
QByteArray result(QHostInfo::localDomainName().toLatin1());
if (!result.isEmpty())
return result;
+ if (hostAddress.protocol() == QAbstractSocket::IPv6Protocol)
+ return "[IPv6:" + hostAddress.toString().toLatin1() + "]";
+ else if (!hostAddress.isNull())
+ return "[" + hostAddress.toString().toLatin1() + "]";
QList<QHostAddress> addresses(QNetworkInterface::allAddresses());
if (addresses.isEmpty())
return "localhost.localdomain";
@@ -262,7 +267,7 @@ void SmtpClient::connected(QMailTransport::EncryptType encryptType)
#ifndef QT_NO_SSL
if ((smtpCfg.smtpEncryption() == QMailTransport::Encrypt_TLS) && (status == TLS)) {
// We have entered TLS mode - restart the SMTP dialog
- QByteArray ehlo("EHLO " + localName());
+ QByteArray ehlo("EHLO " + localName(transport->socket().localAddress()));
sendCommand(ehlo);
status = Helo;
}
@@ -405,7 +410,7 @@ void SmtpClient::nextAction(const QString &response)
capabilities.clear();
// We need to know if extensions are supported
- QByteArray ehlo("EHLO " + localName());
+ QByteArray ehlo("EHLO " + localName(transport->socket().localAddress()));
sendCommand(ehlo);
status = Helo;
} else {
@@ -417,7 +422,7 @@ void SmtpClient::nextAction(const QString &response)
{
if (responseCode == 500) {
// EHLO is not implemented by this server - fallback to HELO
- QByteArray ehlo("HELO " + localName());
+ QByteArray ehlo("HELO " + localName(transport->socket().localAddress()));
sendCommand(ehlo);
} else if (responseCode == 250) {
if (domainName.isEmpty()) {