멀더입니다.
Q&A에도 가끔씩 올라오는 질문이어서, 시간을 내어 데모프로그램을 작성했습니다.
사실 모사이트의 Delphi예제를 BCB로 변환하였습니다.
프로그램을 설명하자면 아래의 함수가 MX Host를 Query하는 함수로 가장 중요합니다.
Internet Mail을 아시는 분이라면, MX Host가 몬지도 알겠지요. MX호스트는
실제메일을 수신하는 서버를 뜻합니다.
다음으 예를 들자면
xxx@hanmail.net 으로 메일을 보내면 실제로는
mx1.hanmail.net 부터 .. mx10.hanmail.net의 10개의 호스트
중 1개 한데 메일을 보내야 받을수 있습니다. 여기서 mx1, ... mx10 까지의 호스트를 mx host라 합니다.
즉, 메일을 Relay SMTP서버 없이 보내실려면, 먼저 MX Host를 구한후
그중 적당한 놈에게 메일을 보내시면 됩니다.
아래가 MX Host를 구하는 함수입니다...
그외는 IdSMTP 를 이용해서 메일을 보내는 일반적인 예제입니다.
//
// Desc Get MxHost
//
// Param @AMxList : mxhost = weight
// Param @AQName : query domain
//
void __fastcall TForm1::GetMxList(TStringList* AMxList,AnsiString AQName)
{
int i;
IdDNSResolver->Host = edDNSSvr->Text;
IdDNSResolver->ReceiveTimeout = 10000;
IdDNSResolver->ClearVars();
IdDNSResolver->DNSHeader->Qr = false;
IdDNSResolver->DNSHeader->Opcode = 0;
IdDNSResolver->DNSHeader->RD = true;
IdDNSResolver->DNSHeader->QDCount = 1;
IdDNSResolver->DNSQDList->Clear();
TQuestionItem* ci = IdDNSResolver->DNSQDList->Add();
ci->QName = AQName;
ci->QType = cMX;
ci->QClass = cIN;
IdDNSResolver->ResolveDNS();
for(i=0; i<IdDNSResolver->DNSAnList->Count; i++)
{
AMxList->Add(AnsiString(IdDNSResolver->DNSAnList->Items[i]->RData.MX.Exchange)
+ "=" + IntToStr(IdDNSResolver->DNSAnList->Items[i]->RData.MX.Preference));
}
}
마지막으로 이런 P2P메일방송으 문제점이 있다는걸 말씀드리자면,
우리나라의 일부 대형 웹메일사이트(다음,네이버, ...)는 이런방식으로 보내시려면
한가지 고려점이 있는데,
받는서버가 보내는 서버가 실제로 메일발송 서버인지를 Check한다는 겁니다.
이걸 유의하셔서 보내셔야 문제가 발생하지 않지요...
그럼 즐플하세요.
|