{************************************************ * *****************************
Este processo é usado para obter o nome do servidor de destino de entrega expressa e o número de prioridade. O parâmetro AMXList é usado para receber o valor do resultado. ********* ***************************************** ********** **********}
procedimento TQuickEMailFrm.GetMxList(AMxList: TStringList; AQName: string);
var
eu: inteiro;
começar
com IdDNSResolver faça
começar
Host := 202.102.13.141 ; { O atributo Host é usado para especificar o endereço do servidor de nomes de domínio. Este é o endereço do servidor de nomes de domínio principal onde o autor está localizado. pode ser acessado rapidamente. Você deve saber onde está. O endereço do servidor de nomes de domínio pode ser encontrado por meio do comando winipcfg no win98 e por meio de ipconfig /all no win2000. }
ReceiveTimeout := 10000; // Se nenhum feedback do servidor de nomes de domínio for obtido dentro do tempo especificado, será considerado uma falha.
ClearVars; // Limpa os registros de recursos retornados pela consulta anterior
{Construa a estrutura do cabeçalho desta consulta}
com DNSHeader faça
começar
Qr := False; // False representa a consulta Opcode := 0; // 0 representa a consulta de nome de domínio padrão RD := True; as consultas terminam;
{Construa a pergunta a ser consultada}
DNSQDList.Clear;
com DNSQDList.Add faça
começar
QName := AQName; //O nome do domínio a ser consultado QType := cMX; //QTYPE especifica o tipo de registro de recurso a ser consultado. O valor cMX representa o registro de troca de correio QClass := cIN;
fim;
ResolveDNS; //Envia uma solicitação ao servidor de nomes de domínio
{Receba o resultado do feedback do servidor de nomes de domínio e coloque o nome do servidor de email de feedback na parte Nome da lista AMXList.
O número de prioridade do servidor de correio é colocado na seção Valor. }
para i := 0 para DNSAnList.Count - 1 faça
AMxList.Add(DNSAnList[i].RData.MX.Exchange + = +
IntToStr(DNSAnList[i].RData.MX.Preference));
fim;
fim;
{Enviar e-mail de entrega quando o botão "Enviar" for clicado}
procedimento TQuickEMailFrm.btnSendClick(Sender: TObject);
var
ListaMx: ListaString;
eu: inteiro;
QName, EmboraEndereço: string;
começar
//Cria um email baseado no conteúdo preenchido pelo usuário com IdMsgSend do
começar
Body.Assign(mmContent.Lines); //Texto do e-mail From.Address := Trim(edtFrom.Text); //Endereço do remetente Recipients.EMailAddresses := Trim(edtTo.Text); Text; //Fim do assunto do email;
//Obtenha o nome de domínio do e-mail do endereço do destinatário inserido e use o processo GetMxList anterior para obter o endereço de destino QName := TrimRight(copy(edtTo.Text, Pos( @ , edtTo.Text) + 1, Length(edtTo.Text) + 1, Length(edtTo. Texto) )));
MxList := TStringList.Create;
tentar
GetMxList(MxList, QNome);
EmboraAddress := MxList.Names[0];
{O primeiro servidor com feedback é considerado o destino. Os leitores podem fazer melhorias de acordo com as necessidades reais, como considerar a prioridade do correio ou quando o servidor que você escolher estiver temporariamente impossibilitado de processar seu correio devido à ocupação, tente usar outro servidor. . tentar}
finalmente
MxList.Free;
fim;
//Enviar e-mail com IdSMTP do
começar
Host := ThoughAddress; // Atribuir Host como destino Esta é a diferença entre correio expresso e correio comum. // A porta padrão do serviço smtp é 25.
Connect; //Conecta-se ao servidor tente
Send(IdMsgSend); //Envia o e-mail recém-criado ShowMessage(Enviado concluído); //Aviso finalmente após a conclusão do envio;
Disconnect; //Desconecta o final do servidor;
fim;
fim;