protected override async Task SendMessageAsyncInternal(MailMessageDto message) { if (message == null) { throw new ArgumentNullException(nameof(message)); } // Get MIME message var msg = message.ToMimeMessage(); // Send message using (var mx = new SmtpClient()) { await mx.ConnectAsync(this.HostName, this.Port, AllowSsl?SecureSocketOptions.Auto : SecureSocketOptions.None); if (this.AllowSsl) { mx.ServerCertificateValidationCallback = this.ServerCertificateValidationCallback; } if (!string.IsNullOrEmpty(this.UserName) && !string.IsNullOrEmpty(this.Password)) { await mx.AuthenticateAsync(this.UserName, this.Password); } await mx.SendAsync(msg); await mx.DisconnectAsync(true); } }
protected override async Task SendMessageAsyncInternal(MailMessageDto message) { if (message == null) { throw new ArgumentNullException(nameof(message)); } // Convert to message var msg = message.ToMimeMessage(); // Write to temp file to avoid pickup of incomplete message var tempFileName = this.TempFileNameFactory(); using (var sw = File.CreateText(tempFileName)) { // Write envelope sender await sw.WriteLineAsync($"X-Sender: <{message.From.Address}>"); // Write envelope receivers var receivers = message.To .Union(message.Cc) .Union(message.Bcc); foreach (var item in receivers.Select(x => x.Address)) { await sw.WriteLineAsync($"X-Receiver: <{item}>"); } // Flush data and write rest of message await sw.FlushAsync(); msg.WriteTo(sw.BaseStream); } // Move the file to final destination var msgFileName = Path.Combine(this.PickupFolderName, string.Join(".", DateTime.Now.ToString("yyyyMMdd-HHmmss"), Guid.NewGuid().ToString("N"), "eml")); File.Move(tempFileName, msgFileName); }