Отправка почты с помощью Indy без использования внешнего сервера - PullRequest
2 голосов
/ 21 декабря 2011

Мои приложения отправляют электронные письма, используя клиентский компонент Indy TiDSMTP.Однако в некоторых ситуациях клиенты не могут или не хотят настраивать SMTP-серверы и порты, имена пользователей и т. Д., Поэтому я хотел бы предложить решение, которое отправляет электронные письма, не требуя, чтобы кто-либо что-либо настраивал.

Я попробовал демо-версию TIDSMTPRelay, но мне нужно явно ввести IP-адрес DNS-сервера (и когда я это сделал, произошел сбой в "Project SMTPRelay.exe поднял класс исключений EIdHostRequired с сообщением ''").Я надеялся на решение Indy, которое не требует от пользователя ввода каких-либо настроек - такого, которое будет работать «из коробки», пока у него есть доступ к Интернету.

Что еще мне нужнопредоставить?

TIA, R

1 Ответ

10 голосов
/ 21 декабря 2011

Вы должны отправлять электронные письма непосредственно на почтовые серверы получателя.Это требует выполнения поиска DNS для получения записей MX для каждого домена получателя.Компонент Indy TIdSMTPRelay обрабатывает это для вас (используя внутренний компонент TIdDNSResolver).

Не существует независимого от платформы способа запроса текущей конфигурации DNS машины.Это требует специфичных для платформы API.В Indy сейчас нет ничего для автоматизации этого, хотя я полагаю, что это не выходит за рамки возможного в будущем выпуске.

Исключение, которое вы видите, вызвано TIdTCPClient.Connect().Вы не должны вызывать это вручную при использовании TIdSMTPRelay.Он вызывается изнутри после определения, к какому Host подключаться для каждого домена получателя.Все, что вам нужно сделать, это установить свойство DNSServer, опционально установить свойство RelaySender, а затем вызвать метод Send().Больше ничего.

...