Tôi có một SmtpClient đơn giản:Làm thế nào để xử lý chính xác System.Net.Mail.SmtpException?
var smtp = new SmtpClient { Host = host, ...};
smtp.Send(message);
tôi có thể có một máy chủ khác nhau: smtp.gmail.com
, smtp.yandex.ru
, vv
Khi smtp.Send(message);
thực hiện Tôi có ngoại lệ khác nhau (phụ thuộc vào máy chủ) do cùng một vấn đề - Xác minh 2 yếu tố bị tắt.
Đối với gmail của mình System.Net.Mail.SmtpException: The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required.
Đối với yahoo và Yandex của nó System.Net.Mail.SmtpException depth 0: The operation has timed out. (0x80131500)
tôi làm không phải bây giờ về những người khác gửi các nhà cung cấp ngoại lệ nhưng làm thế nào để ngoại lệ chính xác ném ("bạn cần phải bật xác minh 2 yếu tố") chỉ một lần? Có thể không? Hoặc làm thế nào để giảm thiểu trùng lặp mã?
'host' đó là một tham số trong phương pháp này: 'công cộng void Send (chuỗi host) ' –
Vì vậy, thay vì gửi tên máy chủ như là một chuỗi trong phương thức, bạn sẽ gửi triển khai SmtpClient. Điều này thường được thực hiện bằng cách sử dụng Dependency Injection. Bạn cũng có thể làm điều đó bằng cách tạo lớp khách hàng SmtpClass thích hợp (ví dụ: YahooSmtpClass) trong 'chuyển đổi' hoặc' if' dựa trên cấu hình của bạn hoặc điều kiện khác. – Graham
Không cần cho các khách hàng khác nhau. Nhưng một lớp bộ xử lý lỗi có thể chọn bởi tên miền máy chủ (từ tệp cấu hình) sẽ hoạt động – TomTom