Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi и сети
Войти
Регистрация
Восстановить пароль
 
 
Алексей_2012
0 / 0 / 1
Регистрация: 26.04.2014
Сообщений: 119
#1

Не отправляется текст из TStringList'a на почту - Delphi

28.07.2014, 17:32. Просмотров 1044. Ответов 24
Метки нет (Все метки)

Здравствуйте, у меня такой к Вам вопрос, написал программу, которая по кнопке должна отправить текст из Tstringlist'a на почту, указанную мной в программном коде, все отлично работает до строчки

Код
   IdSMTP1.Connect; // соединение с почтовым сервером
Пинговал яндекс, потерь пакетов нет, все отлично работает, пинговал ip-адрес, указанный в коде, выставлял разные порты (587, 25,...)

http://www.cyberforum.ru/delphi-networks/thread1596630.html

все без толку, вот полный код программы.

Код
var
  IdMessage1: TIdMessage;
begin    
  with TStringlist.Create do
  try
    form1.Position := poScreenCenter;
    IdMessage1 := TIdMessage.Create(self);
    Text := 'какой-то '+chr(13)+'текст';
    Add('Файл отправлен в: ' + timetostr(time));
    IdSMTP1.Host := '93.158.134.11'; // адрес почтового сервера
    IdSMTP1.Port := 25; // порт по которому будет осуществляться подключение       //
    IdSMTP1.AuthenticationType := atnone; // тип подключения к серверу - без авторизации
    IdMessage1.Recipients.EMailAddresses := 'ip-man2013@yandex.ru'; // майл получателя письма
    IdMessage1.Subject := 'HeLo!!'; // тема письма
    IdMessage1.Body.Text := Text; // передача данных в компонент IdMessage, для последующей отправки
    IdSMTP1.Connect; // соединение с почтовым сервером
    if idSMTP1.Connected then
      idSMTP1.Send(IdMessage1);
    idSMTP1.Disconnect();

  finally
    Free;
    FreeAndNil(IdMessage1);
  end;
end;
В чем может быть проблема?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2014, 17:32
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Не отправляется текст из TStringList'a на почту (Delphi):

Как можно сделать так, чтобы написанный текст пересылался на почту?
Помогите пожалуйста зделать так, чтобы писали текс и он пересылался на почту, в...

Не отправляется IP на почту
Кусок кода: WebClient wc = new WebClient(); string mr =...

Не отправляется письмо на почту
Здравствуйте. Помогите пожалуйста. Есть форма восстановления пароля по e-mail:...

Не отправляется сообщение на почту
Почему не отправляется сообщение на почту? код : <!DOCTYPE html PUBLIC...

Не отправляется сообщение на почту
Здравствуйте! На странице html есть простая форма <form...

24
droider
Universal
Эксперт Pascal/Delphi
4383 / 2431 / 762
Регистрация: 04.10.2012
Сообщений: 8,847
28.07.2014, 17:39 #2
Алексей_2012, попробуйте сопоставить http://www.cyberforum.ru/delphi-networks/thread1234494.html


Delphi
1
IdSMTP1.AuthenticationType := atnone; // тип подключения к серверу - с авторизацией
Нет. Это как раз без авторизации.
Вот
Delphi
1
IdSMTP1.AuthenticationType  :=atLogin;//это с авторизацией
1
Алексей_2012
0 / 0 / 1
Регистрация: 26.04.2014
Сообщений: 119
28.07.2014, 17:46  [ТС] #3
Мне как раз и нужно в своей программе сделать пункт: "отзыв", то есть пользователь пишет что-то, нажимает отправить, и его отзыв приходит ко мне на мыло. Так что авторизации не требуется, или может быть в программу добавить какое-нибудь левое мыло с левым паролем?

Да, и еще, у меня ОС Windows7 X64 Максимальная, Среда разработки: delphi 7 lite.


З.ы. СТавил до сноса винды DElphi XE5, не очень привычно там оказалось работать, до и занимал более 10ГБ, меня это сильно удивило

Вот исправил код, указанный droider'ом, поставил таймер 15000 в коннекте, и по истечении этих 15 секунд
появился результат работы блока except...end; в общем пишет что время вышло, а если ограничитель не ставить, то программа будет пытаться подключаться к серверу до бесконечности.

Код
procedure TForm1.Button1Click(Sender: TObject);
var idMessage1: TIdMessage;
begin
  idMessage1 := TIdMessage.Create(self);
  idMessage1.Clear;
  with idSmtp1 do
  begin
    Host := 'smtp.yandex.ru';
    Port := 25;
    AuthenticationType := atNone;
  end;
  with idMessage1 do
  begin
    CharSet := 'koi8-r'; //для корректного отображения кириллицы
    Subject := 'Test'; // тема
    Recipients.EMailAddresses := 'ip-man2013@yandex.ru';
    Body.Text := Memo1.Text; // текст сообщения
  end;

  try
    try
      idSmtp1.Connect(15000);
      idSmtp1.Send(idMessage1);
      ShowMessage('Письмо отправлено!');
    except on E: Exception do
      begin
        ShowMessage('Статус отправки: ERROR - ' + E.Message + #10#9 + 'Письмо не отправлено');
      end;
    end;
  finally
    if idSmtp1.Connected
      then idSmtp1.Disconnect;
    FreeAndNil(idMessage1);
  end;
end;
0
Изображения
 
Алексей_2012
0 / 0 / 1
Регистрация: 26.04.2014
Сообщений: 119
28.07.2014, 23:43  [ТС] #4
Ребят, сколько версий кодов с посторонних сайтов я не перепробовал-все безтолку, в чем может быть дело? Может быть компонент какой-нибудь скачать для этого, есть ли такой бесплатный? Есть ли что-то подобное в TMS PAck?
0
Новичок
Модератор
1480 / 946 / 457
Регистрация: 17.07.2012
Сообщений: 4,888
Завершенные тесты: 3
28.07.2014, 23:52 #5
Алексей_2012, не знаю, была подобная проблема. Почта не отправлялась. Но, что интересно когда установил Delphi XE2(была Delphi 7) все заработало!
0
droider
Universal
Эксперт Pascal/Delphi
4383 / 2431 / 762
Регистрация: 04.10.2012
Сообщений: 8,847
29.07.2014, 00:57 #6
Цитата Сообщение от Новичок Посмотреть сообщение
когда установил Delphi XE2(была Delphi 7) все заработало
Возможно, у 7-ки косяк в Indy библиотеке. Я этой версией не особо пользуюсь сейчас.
0
northener
пофигист широкого профиля
3251 / 2303 / 628
Регистрация: 15.07.2013
Сообщений: 13,589
29.07.2014, 01:55 #7
Цитата Сообщение от Алексей_2012 Посмотреть сообщение
Мне как раз и нужно в своей программе сделать пункт: "отзыв", то есть пользователь пишет что-то, нажимает отправить, и его отзыв приходит ко мне на мыло. Так что авторизации не требуется
Это как это не требуется? Т.е. smtp-сервер на Яндексе по-вашему не требует авторизации?
0
Алексей_2012
0 / 0 / 1
Регистрация: 26.04.2014
Сообщений: 119
02.08.2014, 03:36  [ТС] #8
ТОгда не понимаю для чего тогда это:

Код
idSmtp1.AuthenticationType := atNone;
Делфи XE2 не столь массивна чем делфи ХЕ5? А на 10-ой версии кто-нибудь тестил прогу?
0
NIKOLAYY
819 / 717 / 339
Регистрация: 22.09.2012
Сообщений: 4,994
02.08.2014, 09:16 #9
Алексей_2012,
У меня свой код всегда собщения на яндекс почту, да и на любую другую отправляло, но у меня чуть другой код, ваш непробовал потому что думаю ваш код вряд ли заработает. И еще я неувидел у вас ни где строки в коде:
Delphi
1
IdSMTP1.Password := 'pass'; // пароль
Я так понимаю вы с какого-то ящика на какой-то должны слать и от вашего ящика пароль должен быть прописан, иначе оно вряд ли и заработает даже! Незнаю я это нетестил конечно но думаю так оно и будет!
0
Алексей_2012
0 / 0 / 1
Регистрация: 26.04.2014
Сообщений: 119
03.08.2014, 20:51  [ТС] #10
А какой пароль там нужно указывать? От почты?
0
droider
Universal
Эксперт Pascal/Delphi
4383 / 2431 / 762
Регистрация: 04.10.2012
Сообщений: 8,847
03.08.2014, 22:15 #11
Алексей_2012, да
1
NIKOLAYY
819 / 717 / 339
Регистрация: 22.09.2012
Сообщений: 4,994
03.08.2014, 23:45 #12
Цитата Сообщение от Алексей_2012 Посмотреть сообщение
А какой пароль там нужно указывать? От почты?
Да обычный пароль, вот рабочий код в сборе:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  IdSMTP1.AuthenticationType := atLogin;
  IdSMTP1.Username := '******@yandex.ru'; //ëîãèГ* Г*Г* ñåðâåðå
  IdSMTP1.Password := '******'; // ГЇГ*ðîëü
  IdSMTP1.Host := 'smtp.yandex.ru'; // URL smtp
 
  IdMessage1.Body.Text := 'Ìîé ГІГҐГЄГ±ГІ ГЇГЁГ±ГјГ¬Г*';
  IdMessage1.From.Text := '******@yandex.ru'; //  Г®ГІГЇГ°Г*âèòåëü
  IdMessage1.Recipients.EMailAddresses := '******@yandex.ru'; // ïîëó÷Г*òåëü
  IdMessage1.Subject := 'Tema'; // ГІГҐГ¬Г*
  TIdAttachment.Create(IdMessage1.MessageParts, 'C:\\test.zip'); //присоединяем файл если надо
  try
    IdSMTP1.Connect();
    IdSMTP1.Send(IdMessage1);
  except
    ShowMessage('Ïèñüìî Г*ГҐ îòïðГ*âëåГ*Г®.');
  end;
  IdSMTP1.Disconnect();
1
Алексей_2012
0 / 0 / 1
Регистрация: 26.04.2014
Сообщений: 119
26.08.2014, 02:45  [ТС] #13
все отлично работает на 587 порту, а вот код

Код
 TIdAttachment.Create(IdMessage1.MessageParts, 'C:\\test.zip'); //присоединяем файл если надо
почему-то не работает, программа даже не компилируется

подключил модуль IdAttachment
выдает такую ошибку:

W1020 Constructing instance of 'TIdAttachment' containing abstract method 'TIdAttachment.OpenLoadStream'
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25598 / 17151 / 6821
Регистрация: 22.10.2011
Сообщений: 30,350
Записей в блоге: 6
26.08.2014, 10:07 #14
Алексей_2012, значит, версия Indy другая. Замени IdAttachment в Uses на IdAttachmentFile, а саму строку - на
Delphi
1
TIdAttachmentFile.Create(IdMessage1.MessageParts, 'C:\test.zip'); // присоединяем файл
1
droider
Universal
Эксперт Pascal/Delphi
4383 / 2431 / 762
Регистрация: 04.10.2012
Сообщений: 8,847
26.08.2014, 10:50 #15
Алексей_2012,
Delphi
1
2
3
uses IdAttachmentFile;
....
TIdAttachmentFile.Create(IdMessage.MessageParts, 'c:\Xxx.xxx');
Добавлено через 44 секунды
Припоздал чуть
1
Алексей_2012
0 / 0 / 1
Регистрация: 26.04.2014
Сообщений: 119
26.08.2014, 11:27  [ТС] #16
Ребят, а есть ли ограничения по размеру передаваемого файла? Допустим я пытаюсь передать видео *.mp4, вес 170 МБ-не передает, но другие файлы передает на ура.

Кстати, ребят, почему код висит в процессах после исполнения? Application.terminate; должно ведь полностью уничтожить форму.

Код
uses
  Controls, Forms,dialogs, idmessage, idsmtp,IdAttachmentFile;

procedure TForm1.FormCreate(Sender: TObject);
var
  idsmtp1: tidsmtp;
  idmessage1: TIdMessage;
  opendialog1:TOpenDialog;

begin
  try
    idsmtp1 := tidsmtp.create(self);
    idmessage1 := TIdMessage.create(self);
      opendialog1:=TOpenDialog.Create(self);
    idsmtp1.AuthType := satDefault;
    idsmtp1.Port:=587;
    idsmtp1.Username := ''; // логин на сервере
    idsmtp1.Password := ''; // пароль
    idsmtp1.Host := 'smtp.yandex.ru'; // URL smtp

    idmessage1.CharSet:='koi8-r';

    idmessage1.Body.Text := 'Что-то';
    idmessage1.From.Text := ''; // отправитель
    idmessage1.Recipients.EMailAddresses := 'ip-man2013@yandex.ru';
    idmessage1.Subject := 'Тема'; // тема
    if opendialog1.Execute then
     TIdAttachmentFile.Create(IdMessage1.MessageParts, opendialog1.FileName);

    try
      idsmtp1.Connect();
      idsmtp1.Send(idmessage1);
    except
      begin
      end;
    end;
  finally
    if idsmtp1.Connected then       idsmtp1.Disconnect();
    idsmtp1.Free;
    idmessage1.Free;
    opendialog1.Free;
    opendialog1:=nil;
    idsmtp1 := nil;
    idmessage1 := nil;
    Application.Terminate;
  end;
end;
И сам вес программы меня не очень радует, пробую переделать под консоль, вес 1.3МБ, писал на delphi 2010
0
droider
Universal
Эксперт Pascal/Delphi
4383 / 2431 / 762
Регистрация: 04.10.2012
Сообщений: 8,847
26.08.2014, 12:56 #17
Цитата Сообщение от Алексей_2012 Посмотреть сообщение
все отлично работает на 587 порту
по 25-му тоже все прекрасно работает. Проверено не раз. По логике должен быть этот порт. Проверяйте, не занят ли он.

Цитата Сообщение от Алексей_2012 Посмотреть сообщение
есть ли ограничения по размеру передаваемого файла? Допустим я пытаюсь передать видео *.mp4, вес 170 МБ-не передает
Есть. Если не ошибаюсь, свыше 100 Мб. Отправляйте ссылки на большие файлы в письме для их последующего скачивания адресатом.
0
Pauk666
0 / 0 / 1
Регистрация: 18.06.2014
Сообщений: 13
26.08.2014, 17:28 #18
Цитата Сообщение от Алексей_2012 Посмотреть сообщение
И сам вес программы меня не очень радует, пробую переделать под консоль, вес 1.3МБ, писал на delphi 2010
используй ASPack
0
droider
Universal
Эксперт Pascal/Delphi
4383 / 2431 / 762
Регистрация: 04.10.2012
Сообщений: 8,847
26.08.2014, 17:39 #19
Алексей_2012, а если компилировать в release?
0
Pauk666
0 / 0 / 1
Регистрация: 18.06.2014
Сообщений: 13
26.08.2014, 17:41 #20
droider, 1.3 метра, я думаю, и есть релиз, в дебаге все 10 было бы.
0
26.08.2014, 17:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.08.2014, 17:41
Привет! Вот еще темы с решениями:

Не отправляется письмо на почту
Перепробовал несколько разных версий кода, гуглил, но все равно у меня не хочет...

Не отправляется на почту письмо
Доброго времени суток господа. Такая проблема. Не отправляется на почту...

Не отправляется письмо на почту
Всем привет! Написал калькулятор расчета стоимости выбранного продукта. скрипт...

Не отправляется html на почту
скажите кто нибудь, пожалуйста, как отправить html-код на почту? чего только не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru