/// <summary> /// Authenticates a socket client using the specified Username and Password. /// </summary> /// <returns>True if the client was successfully authenticated. False otherwise.</returns> private async Task <bool> AuthenticateAsync() { if (!IsConnected) { return(false); } // get the type of auth SmtpResponse response = await Socket.Send("EHLO " + Server); if (response.ContainsMessage("STARTTLS")) { SmtpResponse responseSSL = await Socket.Send("STARTTLS"); if (responseSSL.ContainsStatus(SmtpCode.ServiceReady)) { await Socket.UpgradeToSslAsync(); return(await AuthenticateAsync()); } } if (response.ContainsMessage("AUTH")) { if (response.ContainsMessage("LOGIN")) { IsAuthenticated = await AuthenticateByLoginAsync(); } else if (response.ContainsMessage("PLAIN")) { IsAuthenticated = await AuthenticateByPlainAsync(); } } else { await Socket.Send("EHLO " + Server); IsAuthenticated = true; } return(IsAuthenticated); }