Функция net.LookupMX

Функция net.LookupMX выполняет DNS-запрос для получения MX-записей (Mail Exchange) указанного домена. В первый параметр функция принимает строку с доменным именем. Она возвращает срез структур *net.MX и ошибку. Каждая структура содержит поле Host с адресом почтового сервера и поле Pref с числовым приоритетом записи. Чем меньше значение приоритета, тем выше приоритет сервера.

Синтаксис

gomxs, err := net.LookupMX(domain)

Пример

Давайте получим MX-записи для домена "example.com":

gopackage main

import (
  "fmt"
  "net"
)

func main() {
  mxs, err := net.LookupMX("example.com")
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  for _, mx := range mxs {
    fmt.Printf("Host: %s, Pref: %d\n", mx.Host, mx.Pref)
  }
}

Результат выполнения кода:

go"Host: mx.example.com., Pref: 10"

Пример

Давайте обработаем ситуацию, когда домен не имеет MX-записей:

gopackage main

import (
  "fmt"
  "net"
)

func main() {
  mxs, err := net.LookupMX("domain-without-mx.com")
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  fmt.Println("MX records found:", len(mxs))
  for _, mx := range mxs {
    fmt.Printf("Host: %s, Pref: %d\n", mx.Host, mx.Pref)
  }
}

Результат выполнения кода:

go"Error: lookup domain-without-mx.com: no such host"

Пример

Давайте отсортируем MX-записи по приоритету и выведем их в порядке предпочтения:

gopackage main

import (
  "fmt"
  "net"
  "sort"
)

func main() {
  mxs, err := net.LookupMX("gmail.com")
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  sort.Slice(mxs, func(i, j int) bool {
    return mxs[i].Pref < mxs[j].Pref
  })

  for _, mx := range mxs {
    fmt.Printf("Host: %s, Pref: %d\n", mx.Host, mx.Pref)
  }
}

Результат выполнения кода:

go"Host: gmail-smtp-in.l.google.com., Pref: 5"
"Host: alt1.gmail-smtp-in.l.google.com., Pref: 10"
"Host: alt2.gmail-smtp-in.l.google.com., Pref: 20"
"Host: alt3.gmail-smtp-in.l.google.com., Pref: 30"
"Host: alt4.gmail-smtp-in.l.google.com., Pref: 40"

Смотрите также

  • функцию net.LookupHost,
    которая возвращает IP-адреса для указанного домена
  • функцию net.LookupIP,
    которая возвращает IP-адреса с возможностью фильтрации по версии протокола
  • функцию net.LookupNS,
    которая возвращает NS-записи для указанного домена
  • функцию net.LookupTXT,
    которая возвращает TXT-записи для указанного домена