public async Task RejectInvalidMailbox() { var channel = new MockSmtpChannel(); var mail = new SmtpMailMessage(new SmtpPath("*****@*****.**")); var builder = new MockMailBuilder { PendingMail = mail }; var command = new RecipientCommand( builder, channel, TestHelpers.MakeSettings( "test.vaettir.net", new[] { new SmtpAcceptDomain("test.vaettir.net") }) ); command.Initialize("TO:<no-at>"); await command.ExecuteAsync(CancellationToken.None); SmtpTestHelper.AssertResponse(channel, SmtpReplyCode.InvalidArguments); Assert.Same(mail, builder.PendingMail); }
// '' <summary> // '' send mail with integrated retry mechanism // '' </summary> public bool SendMail(SmtpMailMessage mail) { var intRetryInterval = 333; try { SendMailInternal(mail); } catch (Exception ex) { _intRetries++; if (_blnDebugMode) { Debug.WriteLine("--> SendMail Exception Caught"); Debug.WriteLine(ex.Message); } if ((_intRetries <= _intMaxRetries)) { //Thread.CurrentThread.Sleep(intRetryInterval); Thread.Sleep(intRetryInterval); SendMail(mail); } else { throw; } } if (_blnDebugMode) { Debug.WriteLine(("sent after " + _intRetries)); } _intRetries = 1; return(true); }
public async Task AcceptRelayDomain() { var channel = new MockSmtpChannel(); var mail = new SmtpMailMessage(new SmtpPath("*****@*****.**")); var builder = new MockMailBuilder { PendingMail = mail }; var command = new RecipientCommand( builder, channel, TestHelpers.MakeSettings( "test.vaettir.net", relayDomains: new[] { new SmtpRelayDomain("test.vaettir.net", "elsewhere.vaettir.net") }) ); command.Initialize("TO:<*****@*****.**>"); await command.ExecuteAsync(CancellationToken.None); SmtpTestHelper.AssertResponse(channel, SmtpReplyCode.Okay); Assert.Same(mail, builder.PendingMail); Assert.Single(mail.Recipents); Assert.Equal("*****@*****.**", mail.Recipents[0]); }
public async Task MailInProgressRejected() { var channel = new MockSmtpChannel(); var message = new SmtpMailMessage(new SmtpPath(null)); var builder = new MockMailBuilder { PendingMail = message }; var user = new MockUserStore(false); var command = new MailCommand( channel, builder, TestHelpers.MakeSettings( "test.vaettir.net", new[] { new SmtpAcceptDomain("test.vaettir.net") }), user); command.Initialize("FROM:<*****@*****.**>"); await command.ExecuteAsync(CancellationToken.None); SmtpTestHelper.AssertResponse(channel, SmtpReplyCode.BadSequence); Assert.Same(message, builder.PendingMail); }
// '' <summary> // '' send an email via trivial SMTP implementation // '' </summary> private void SendMailInternal(SmtpMailMessage mail) { IPHostEntry iphost; var tcp = new TcpClient(); // -- resolve server text name to an IP address try { iphost = Dns.GetHostByName(_strServer); } catch (Exception e) { throw new Exception(("Unable to resolve server name " + _strServer), e); } // -- attempt to connect to the server by IP address and port number try { tcp.Connect(iphost.AddressList[0], _intPort); } catch (Exception e) { throw new Exception(("Unable to connect to SMTP server at " + (_strServer + (":" + _intPort))), e); } // -- make sure we get the SMTP welcome message Command(tcp, string.Empty, "220"); Command(tcp, ("HELO " + Environment.MachineName)); // -- // -- authenticate if we have username and password // -- http://www.ietf.org/rfc/rfc2554.txt // -- if (((_strUserName + _strUserPassword).Length > 0)) { Command(tcp, "auth login", "334 VXNlcm5hbWU6"); // VXNlcm5hbWU6=base64'Username:'******'Password:' Command(tcp, ToBase64(_strUserPassword), "235"); } if (string.IsNullOrWhiteSpace(mail.From)) { if (IsWebHosted()) { mail.From = (HttpContext.Current.Request.ServerVariables["server_name"] + ("@" + _strDefaultDomain)); } else { mail.From = ( AppDomain.CurrentDomain.FriendlyName.ToLower() + ("." + (Environment.MachineName.ToLower() + ("@" + _strDefaultDomain)))); } } Command(tcp, ("MAIL FROM: <" + (mail.From + ">"))); // -- send email to more than one recipient var strRecipients = mail.To.Split(_strAddressSeperator.ToCharArray()); foreach (var strRecipient in strRecipients) { Command(tcp, ("RCPT TO: <" + (strRecipient + ">"))); } Command(tcp, "DATA", "354"); var sb = new StringBuilder(); // With... // -- write common email headers sb.Append(("To: " + (mail.To + Environment.NewLine))); sb.Append(("From: " + (mail.From + Environment.NewLine))); sb.Append(("Subject: " + (mail.Subject + Environment.NewLine))); if (_blnPlainTextOnly) { // -- write plain text body sb.Append(Environment.NewLine + (mail.Body + Environment.NewLine)); } else { // -- typical case; mixed content will be displayed side-by-side var strContentType = "multipart/mixed"; if ((!string.IsNullOrWhiteSpace(mail.Body)) && (!string.IsNullOrWhiteSpace(mail.BodyHTML))) { strContentType = "multipart/alternative"; } sb.Append(("MIME-Version: 1.0" + Environment.NewLine)); sb.Append(("Content-Type: " + (strContentType + ("; boundary=\"NextMimePart\"" + Environment.NewLine)))); sb.Append(("Content-Transfer-Encoding: 7bit" + Environment.NewLine)); // -- default content (for non-MIME compliant email clients, should be extremely rare) sb.Append(("This message is in MIME format. Since your mail reader does not understand " + Environment.NewLine)); sb.Append(("this format, some or all of this message may not be legible." + Environment.NewLine)); // -- handle text body (if any) if (!string.IsNullOrWhiteSpace(mail.Body)) { sb.Append((Environment.NewLine + ("--NextMimePart" + Environment.NewLine))); sb.Append(("Content-Type: text/plain;" + Environment.NewLine)); sb.Append((Environment.NewLine + (mail.Body + Environment.NewLine))); } // -- handle HTML body (if any) if (!string.IsNullOrWhiteSpace(mail.BodyHTML)) { sb.Append((Environment.NewLine + ("--NextMimePart" + Environment.NewLine))); sb.Append(("Content-Type: text/html; charset=iso-8859-1" + Environment.NewLine)); sb.Append((Environment.NewLine + (mail.BodyHTML + Environment.NewLine))); } // -- handle attachment (if any) if (!string.IsNullOrWhiteSpace(mail.AttachmentPath)) { sb.Append(FileToMimeString(mail.AttachmentPath, mail.AttachmentFilename)); } if (!string.IsNullOrWhiteSpace(mail.AttachmentText)) { sb.Append(ToMimeString(mail.AttachmentText, mail.AttachmentFilename)); } } // -- <crlf>.<crlf> marks end of message content sb.Append(Environment.NewLine + ("." + Environment.NewLine)); Command(tcp, sb.ToString()); Command(tcp, "QUIT", string.Empty); tcp.Close(); }
public ISenderService ComposeMessage(string from, string cc = "", string bcc = "", string readReceipt = "", bool htmlBody = false) { var message = new SmtpMailMessage(from, cc, bcc, readReceipt, null, htmlBody); return(new EMailServiceSender(_smtpClient, message)); }
public EMailServiceSender(ISmtpClient smtpClient, SmtpMailMessage message) { _smtpClient = smtpClient; _message = message; }