How to Send Email Messages using DNS inside C# & VB.NET Apps

This technical tip explains how to send an email messages using DNS inside .NET applications. Sometimes sending mails using an SMTP server is not feasible for a project’s requirement. We may want to utilize the MX record of the recipient’s domain name. Aspose.Email for .NET is a set of components allowing developers to easily implement email functionality within their ASP.NET web applications, web services & Windows applications. Following is a quick sample that shows how to send mails using mail servers of recipient’s domain.
//your code here...//The sample code below sends email messages using DNS. //[C# Code Sample] static void Main(string[] args) { try { MailMessage msg = new MailMessage("", "", "test", "this is a test"); msg.CC.Add(new MailAddress("", "CC Display Name")); DnsSendMessage(msg); } catch (Exception e) { Console.WriteLine(e.Message); } Console.WriteLine("Program finished. Press any key to exit...."); Console.ReadKey(); } /// <summary> /// Use for sent message /// </summary> /// <param name="msg">message to send</param> /// <returns></returns> private static void DnsSendMessage(MailMessage msg) { // Get all the recipients in to, cc and bcc in one collection MailAddressCollection addresses = new MailAddressCollection(); foreach (MailAddress to in msg.To) { addresses.Add(to); } foreach (MailAddress cc in msg.CC) { addresses.Add(cc); } foreach (MailAddress bcc in msg.Bcc) { addresses.Add(bcc); } // send mail using DNS to each address foreach (MailAddress addr in addresses) { //Find mail exchange servers with the help of DnsClient DnsClient dnsClient = new DnsClient(); Question mxQuestion = new Question(addr.Host, QueryType.MX); if (dnsClient.Resolve(mxQuestion)) { // try to send a message foreach (ResourceRecord record in dnsClient.ReceivedMessage.Answers) { MXResourceRecord cnRecord = record as MXResourceRecord; if (cnRecord != null) { try { // Send message SmtpClient client = new SmtpClient(); client.AuthenticationMethod = SmtpAuthentication.None; client.Host = cnRecord.ExchangeName; client.Port = 25; client.Send(msg); Console.WriteLine("Mail sent to " + addr.Address); } catch (SmtpException e) { Console.WriteLine(cnRecord.ExchangeName + ": " + e.Message + Environment.NewLine); continue; } } } } } } //[VB.NET code Sample] Sub Main(ByVal args As String()) Try Dim msg As MailMessage = New MailMessage("", "", "test", "this is a test") msg.CC.Add(New MailAddress("", "CC Display Name")) DnsSendMessage(msg) Catch e As Exception Console.WriteLine(e.Message) End Try Console.WriteLine("Program finished. Press any key to exit....") Console.ReadKey() End Sub ''' <summary> ''' Use for sent message ''' </summary> ''' <param name="msg">message to send</param> ''' <returns></returns> Private Sub DnsSendMessage(ByVal msg As MailMessage) ' Get all the recipients in to, cc and bcc in one collection Dim addresses As MailAddressCollection = New MailAddressCollection() For Each [to] As MailAddress In msg.To addresses.Add([to]) Next to For Each cc As MailAddress In msg.CC addresses.Add(cc) Next cc For Each bcc As MailAddress In msg.Bcc addresses.Add(bcc) Next bcc ' send mail using DNS to each address For Each addr As MailAddress In addresses 'Find mail exchange servers with the help of DnsClient Dim dnsClient As DnsClient = New DnsClient() Dim mxQuestion As Question = New Question(addr.Host, QueryType.MX) If dnsClient.Resolve(mxQuestion) Then ' try to send a message For Each record As ResourceRecord In dnsClient.ReceivedMessage.Answers Dim cnRecord As MXResourceRecord = TryCast(record, MXResourceRecord) If Not cnRecord Is Nothing Then Try ' Send message Dim client As SmtpClient = New SmtpClient() client.AuthenticationMethod = SmtpAuthentication.None client.Host = cnRecord.ExchangeName client.Port = 25 client.Send(msg) Console.WriteLine("Mail sent to " & addr.Address) Catch e As SmtpException Console.WriteLine(cnRecord.ExchangeName & ": " & e.Message & Environment.NewLine) Continue For End Try End If Next record End If Next addr End Sub


Language: C# | User: Sheraz Khan | Created: Nov 11, 2015 | Tags: send email messages using DNS Send Email Client inside .NET Apps component emails SMTP server mail to multiple address