status_t AutoConfig::GetInfoFromMailAddress(const char* email, provider_info *info) { BString provider = ExtractProvider(email); // first check the database if (LoadProviderInfo(provider, info) == B_OK) return B_OK; // fallback try to read MX record if (GetMXRecord(provider.String(), info) == B_OK) return B_ENTRY_NOT_FOUND; // if no MX record received guess a name GuessServerName(provider.String(), info); return B_ENTRY_NOT_FOUND; }
/* * MXレコードを取得して、そのメールサーバーに接続して * メール送信をする */ BOOL GetMXAndSendMail(HWND hDlg,MAILDATA *mdat,BOOL attach_exist) { MXRECORD mx[20]; LPMXRECORD lpmx; char domain[256]=""; char dns_addr[256]=""; lpmx = mx; /*送信先アドレスからMXレコードを取得*/ GetDlgItemText(hDlg,IDC_DNSSERVER,dns_addr,sizeof(dns_addr)); SplitDomainName(mdat->to,domain); StringTableSendMessage(hDlg,WM_SENDMAIL,IDS_QUERY_DNS_SERVER); Sleep(300); /*かっこよく見せるため、抜かしても構わない。*/ if(GetMXRecord(domain,dns_addr,lpmx) != GETMX_ERROR_SUCCESS){ StringTableSendMessageBeep(hDlg,WM_SENDMAIL, IDS_ERROR_DNS_SERVER,MB_ICONEXCLAMATION); return FALSE; } /*MXレコードを頼りに1つずつ順番にメール送信、成功したらループを抜ける*/ while(lpmx->flag != FALSE){ StringTableSendMessage(hDlg,WM_SENDMAIL,IDS_SENDING_MAIL); if(SendMail(lpmx->domain,mdat,attach_exist,"===SMILE===") == SENDMAIL_ERROR_SUCCESS){ StringTableSendMessageBeep(hDlg,WM_SENDMAIL, IDS_SUCCESS_SENDMAIL,MB_OK); return TRUE; } lpmx++; } /*ここに処理がくるということは、失敗した時*/ StringTableSendMessageBeep(hDlg,WM_SENDMAIL, IDS_ERROR_SENDMAIL,MB_ICONEXCLAMATION); return FALSE; }