using System; #if !NETSTANDARD1_3 using System.Net.Mail; #else using Exceptions; #endif namespace Unosquare.Swan.Networking { /// /// Use this class to store the sender session data. /// internal class SmtpSender { private readonly String _sessionId; private String _requestText; public SmtpSender(String sessionId) => this._sessionId = sessionId; public String RequestText { get => this._requestText; set { this._requestText = value; $" TX {this._requestText}".Debug(typeof(SmtpClient), this._sessionId); } } public String ReplyText { get; set; } public Boolean IsReplyOk => this.ReplyText.StartsWith("250 "); public void ValidateReply() { if(this.ReplyText == null) { throw new SmtpException("There was no response from the server"); } try { SmtpServerReply response = SmtpServerReply.Parse(this.ReplyText); $" RX {this.ReplyText} - {response.IsPositive}".Debug(typeof(SmtpClient), this._sessionId); if(response.IsPositive) { return; } String responseContent = String.Empty; if(response.Content.Count > 0) { responseContent = String.Join(";", response.Content.ToArray()); } throw new SmtpException((SmtpStatusCode)response.ReplyCode, responseContent); } catch { throw new SmtpException($"Could not parse server response: {this.ReplyText}"); } } } }