Подскажите куда нужно и что нужно добавить чтобы можно было еще отправлять прикрепленые данные? вот код проги:
.......................................
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdMessageClient, IdSMTP, StdCtrls, idMessage, IdEMailAddress;
.......................................
procedure TForm1.Button1Click(Sender: TObject);
var
M: TIdMessage;
begin
M := TIdMessage.Create(Form1);
M.Body.Add('Типа первая строчка собщения');
M.Body.Add('Типа вторая строчка собщения');
M.From.Text := '"Мирор" <mail@mail.ru>'; //отправитель
M.Recipients.Add;
M.Recipients.Items[0].Text := '"Kiss" <vit@mail.ru>'; //Получатель
M.Subject := 'Мы это сделали '; //Тема письма
IdSMTP1.AuthenticationType := atLogin;
IdSMTP1.Host := 'smtp.mail.ru';
IdSMTP1.Username := 'cards';
IdSMTP1.Password := '********'; // пасс
IdSMTP1.Connect();
if IdSMTP1.Connected then
begin
IdSMTP1.Send(M);
end;
IdSMTP1.Disconnect;
end;
Отправка электроной почты
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
-
- Сообщения: 227
- Зарегистрирован: 31 авг 2006, 13:11
вот статейка по отправке там и вложения есть:
Алгоритм простой (для сторонних компонентов он принципиально ничем не отличается):
необходимо заполнить структуру PostMessage;
отправить эту структуру при помощи метода SendMail.
Структура PostMessage:
(*) FromName: string - имя отправителя;
FromAddress: string - Почтовый адресс отправителя
ReplyToAddress: string - Адрес, по которому следует ответить на письмо;
Organization: string
LocalProgram: string - Имя почтовой программы отправителя;
(*) ToAddress: TStringList - Почтовый адрес главного получателя (ей)
ToCC: TStringList - Список получателей Carbon Copy
ToBCC: TSringList - Список получателей Blind Carbon Copy
Attachments: TStringList - Список вложений
Body: TStringList - Собственно текст письма
Subject: string - Строка темы письма.
(*) - помечены обязательные поля. С остальным не сложно разобраться самому.
Также это можно сделать при помощи MAPI.
Т.е. письмо будет отправлено средствами _почтовой_программы_по_умолчанию_ - со всеми недостатками (например письмо будет помещено в папку "отправленные"). Зато без всяких там компонент и просто
Hиже готовая функция, в которой:
From - от кого
Dest - кому
Subject - тема
Text - текст письма
FileName - путь к вложению (если '', то соответственно ничего и не вкладываем)
Outlook - показывать или нет письмо перед отправкой (в твоём случае False)
Алгоритм простой (для сторонних компонентов он принципиально ничем не отличается):
необходимо заполнить структуру PostMessage;
отправить эту структуру при помощи метода SendMail.
Структура PostMessage:
(*) FromName: string - имя отправителя;
FromAddress: string - Почтовый адресс отправителя
ReplyToAddress: string - Адрес, по которому следует ответить на письмо;
Organization: string
LocalProgram: string - Имя почтовой программы отправителя;
(*) ToAddress: TStringList - Почтовый адрес главного получателя (ей)
ToCC: TStringList - Список получателей Carbon Copy
ToBCC: TSringList - Список получателей Blind Carbon Copy
Attachments: TStringList - Список вложений
Body: TStringList - Собственно текст письма
Subject: string - Строка темы письма.
(*) - помечены обязательные поля. С остальным не сложно разобраться самому.
Также это можно сделать при помощи MAPI.
Т.е. письмо будет отправлено средствами _почтовой_программы_по_умолчанию_ - со всеми недостатками (например письмо будет помещено в папку "отправленные"). Зато без всяких там компонент и просто
Hиже готовая функция, в которой:
From - от кого
Dest - кому
Subject - тема
Text - текст письма
FileName - путь к вложению (если '', то соответственно ничего и не вкладываем)
Outlook - показывать или нет письмо перед отправкой (в твоём случае False)
Код: Выделить всё
Uses MAPI;
...
function SendMail(const From, Dest, Subject, Text, FileName: PChar;
Outlook: boolean):Integer;
var
Message: TMapiMessage;
Recipient, Sender: TMapiRecipDesc;
File_Attachment: TMapiFileDesc;
function MakeMessage: TMapiMessage;
begin
FillChar(Sender, SizeOf(Sender), 0);
Sender.ulRecipClass := MAPI_ORIG;
Sender.lpszAddress := From;
FillChar(Recipient, SizeOf(Recipient), 0);
Recipient.ulRecipClass := MAPI_TO;
Recipient.lpszAddress := Dest;
FillChar(File_Attachment, SizeOf(File_Attachment), 0);
File_Attachment.nPosition := Cardinal(-1);
File_Attachment.lpszPathName := FileName;
FillChar(Result, SizeOf(Result), 0);
with Message do begin
lpszSubject := Subject;
lpszNoteText := Text;
lpOriginator := @Sender;
nRecipCount := 1;
lpRecips := @Recipient;
nFileCount := 1;
lpFiles := @File_Attachment;
end;
end;
var
SM: TFNMapiSendMail;
MAPIModule: HModule;
MAPI_FLAG: Cardinal;
begin
if Outlook then
MAPI_FLAG:=MAPI_DIALOG
else
MAPI_FLAG:=0;
MAPIModule := LoadLibrary(PChar(MAPIDLL));
if MAPIModule = 0 then
Result := -1
else
try
@SM := GetProcAddress(MAPIModule, 'MAPISendMail');
if @SM <> nil then begin
MakeMessage;
Result := SM(0, Application.Handle, Message, MAPI_FLAG, 0);
end else Result := 1;
finally
FreeLibrary(MAPIModule);
end;
end;
А вот это уже не есть хорошо, в EXE файле можно выцепить без проблем." писал(а):IdSMTP1.Password := '********'; // пасс
It's a long way to the top if you wanna rock'n'roll
-
- Сообщения: 227
- Зарегистрирован: 31 авг 2006, 13:11
и как с этим бороться?somewhere писал(а):А вот это уже не есть хорошо, в EXE файле можно выцепить без проблем.
Просуммировать "по одной букве"namomelkor писал(а):и как с этим бороться?
IdSMTP1.Password := 'P';
IdSMTP1.Password := IdSMTP1.Password + 'a';
IdSMTP1.Password := IdSMTP1.Password + 's';
IdSMTP1.Password := IdSMTP1.Password + 's';
IdSMTP1.Password := IdSMTP1.Password + 'w';
IdSMTP1.Password := IdSMTP1.Password + 'o';
IdSMTP1.Password := IdSMTP1.Password + 'r';
IdSMTP1.Password := IdSMTP1.Password + 'd';
Надеюсь, Delphi не смодет это соптимизировать и породит один оператор (тот, что предлагался изначально )