Как читать почту с сервера обмена с помощью протокола Pop3 в VS2022C#

Место общения программистов C#
Ответить
Anonymous
 Как читать почту с сервера обмена с помощью протокола Pop3 в VS2022

Сообщение Anonymous »

Я использовал приведенный ниже код C# в Visual Studio 2022 для чтения писем из папки testmail сервера обмена и получал ошибку как ERR Ошибка входа в систему: неизвестное имя пользователя или неверный пароль в строке ниже. telnet работает, и даже та же учетная запись, которую я добавил в Microsoft Outlook 365, поэтому пароль также правильный

Код: Выделить всё

  string statCommand = $"STAT\r\n";
SendCommand(sslStream, statCommand);
Полный код приведен ниже

Код: Выделить всё

   string pop3Server = "pop3.test.corp.ae"; // Replace with your POP3 server
int pop3Port = 995; // SSL port
string username = "testmail@test.com";
string password = "1234ere";

// Path to the client certificate
string certificatePath = @"D:\test\test.crt";
string certificatePassword = "";

//    System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
//    Pop3Client pop3Client = new Pop3Client();
//pop3Client.Connect(pop3Server, pop3Port, true);
//pop3Client.Authenticate(username, password);
// Load the client certificate
X509Certificate2 clientCertificate = new X509Certificate2(certificatePath);//certificatePassword);

// Connect to the POP3 server
using (TcpClient client = new TcpClient(pop3Server, pop3Port))
using (SslStream sslStream = new SslStream(
client.GetStream(),
false,
new RemoteCertificateValidationCallback(ValidateServerCertificate),
null))
{
// Authenticate using SSL with the client certificate
sslStream.AuthenticateAsClient(pop3Server, new X509CertificateCollection { clientCertificate }, System.Security.Authentication.SslProtocols.Tls12, false);

// Send POP3 commands to authenticate and retrieve emails
string loginCommand = $"USER {username}\r\n";
SendCommand(sslStream, loginCommand);

string passCommand = $"PASS {password}\r\n";
SendCommand(sslStream, passCommand);
}
static void SendCommand(SslStream sslStream, string command)
{
byte[] buffer = Encoding.ASCII.GetBytes(command);
sslStream.Write(buffer, 0, buffer.Length);
sslStream.Flush();

// Read server response (if needed)
byte[] responseBuffer = new byte[2048];
int bytesRead = sslStream.Read(responseBuffer, 0, responseBuffer.Length);
string response = Encoding.ASCII.GetString(responseBuffer, 0, bytesRead);

Console.WriteLine(response);
}
РЕДАКТИРОВАТЬ
Возникла проблема с интерполяцией строк, мне пришлось заменить @ на $...
Итак, теперь

Код: Выделить всё

string loginCommand = $"USER {username}\r\n";
я получаю ответ +OK. Служба POP3 Microsoft Exchange готова
и для строки passCommand = $"PASS {password}\r\n";
Я получаю ответ +ОК
но для строки statCommand = $"STAT\r\n";
Я получение ответа в виде -ERR Ошибка входа в систему: неизвестное имя пользователя или неверный пароль

Подробнее здесь: https://stackoverflow.com/questions/790 ... -in-vs2022
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»