Отправка электронной почты с использованием TIdSMTP и TIdMessage

Я использую действие из моего ActionManager, чтобы отправить электронное письмо клиенту в моем DBGrid.

Я выбираю row с данными клиента в моем DBGrid, щелкаю правой кнопкой мыши, появляется Popupactionbar, я нажимаю действие отправки почты, и почта должна быть отправлена.

Это код действия отправки почты:

procedure TForm2.actSendEmailExecute(Sender: TObject);
begin
IdSMTP1.Host := 'smtp.mail.yahoo.com';
IdSMTP1.Port := 465;

//setup mail message
IdMessage1.From.Address := 'my email address is here';
IdMessage1.Recipients.EMailAddresses := DBGrid1.DataSource.DataSet['email'];
IdMessage1.Subject   := 'test subject';
IdMessage1.Body.Text := 'test email body' + DBGrid1.DataSource.DataSet['details'];

//send mail try
IdSMTP1.Connect ;
IdSMTP1.Send(IdMessage1) ;
IdSMTP1.Disconnect;
end;

Я использую TIdSMTP и TIdMessage (компоненты Indy). Я также установил имя хоста, порт, имя пользователя и пароль в свойствах TIdSMTP с помощью Object Inspector, все данные указаны в том виде, в котором Yahoo предоставил их на своем веб-сайте (имя хоста, порт, мой адрес электронной почты для входа в систему и мой пароль электронной почты)

В строке, которую я выбираю в DBGrid, есть поле с именем электронная почта, которое содержит почтовый адрес клиента, следовательно, туда должно отправляться электронное письмо. Кроме того, я добавляю некоторую информацию, содержащуюся в поле с именем details, которое должно находиться в разделе тела сообщения электронной почты (см. код выше).

Как только я запускаю свое программное обеспечение, выбираю строку в DBGrid и нажимаю «Отправить» на кнопке действия, программное обеспечение зависает (не отвечает) примерно на 20-40 секунд, после чего возвращает сообщение об ошибке: «Соединение закрыто корректно».

Я использую yahoo smtp просто для проверки, в конечном итоге я буду использовать smtp от моего хостинг-провайдера, на котором размещен мой веб-сайт (и где также находится база данных)

Версия Indy 10.6.2.5311 Использование Delphi 10 Seattle

Любые мысли о том, что я делаю неправильно до сих пор?


person t1f    schedule 09.10.2016    source источник


Ответы (1)


Может ли это быть связано с отсутствующими библиотеками SSL? Я просто отмечаю, что вы используете порт 465; разве это не для SSL-соединений?

Я никогда не работал с компонентом TIdSMTP, но я видел аналогичную ситуацию с компонентом TIdHTTP (время ожидания соединения истекло без каких-либо явных указаний на то, почему) при попытке использовать SSL-соединение, если не были установлены соответствующие библиотеки DLL. сделал доступным. Они не являются неотъемлемой частью Indy (я полагаю, что это юридический вопрос, связанный с использованием шифрования в некоторых странах), но они свободно доступны в других местах.

Изменить: Компонент также имеет свойство UseTLS, которое могло быть не задано.

person Owen    schedule 09.10.2016
comment
Не знаю, я использую этот порт, потому что это то, что Yahoo говорит использовать для этого имени хоста. Вполне может быть, есть мысли о том, где взять эти библиотеки и куда мне их нужно поместить? - person t1f; 10.10.2016
comment
Собственный веб-сайт Indy содержит ссылки на один набор, который вы можете скачать: indyproject.org/sockets/ssl.en .aspx. Они будут работать из каталога с исполняемым файлом. Либо так, либо выберите местоположение и добавьте его в пути по умолчанию. - person Owen; 10.10.2016
comment
Есть идеи, какой из этого огромного списка использовать? Я получил последний в списке, и это не помогло. Моя версия Indy — 10.6.2.5311. Я использую Delphi 10 Seattle, пробовал с 1.0.2h и 1.0.2j. Кроме того, я заметил параметр UseTLS, в настоящее время он установлен по умолчанию на utNoTLSSupport. Если я попробую любой из других параметров (явный, неявный или требуемый), он немедленно выдаст ошибку в IDE, говоря: для этого параметра требуется SSL IOHandler. - person t1f; 10.10.2016
comment
IOHandler по умолчанию не поддерживает SSL, поэтому он ищет такой компонент, как TIdSSLIOHandlerSocketOpenSSL. Вам нужно будет добавить его и установить свойство IOHandler компонента TIdSMTP, чтобы использовать его. - person Owen; 10.10.2016
comment
Что касается используемой версии OpenSSL: это зависит от вашей целевой платформы. Для 32-разрядной версии Windows требуется версия библиотек DLL i386, для 64-разрядной версии Windows требуется версия x64. Я бы взял самые последние версии из этого списка, на данный момент это v1.0.2j. - person Owen; 10.10.2016
comment
Здравствуйте, Оуэн, извините за поздний ответ. Действительно, это казалось проблемой, по крайней мере, IOHandler добавил компонент и установил его в TIdSMTP, и он работает как шарм - понятия не имею, помогли ли 2 драйвера или нет, но я также включил их. Спасибо за помощь, я принял ваш ответ. Если хотите, отредактируйте его и добавьте эти дополнительные детали из последних 2 комментариев, чтобы больше людей могли их увидеть, если они когда-нибудь наткнутся на это. Привет дружище, удачи. - person t1f; 10.10.2016