Как в Delphi 7 отправлять сообщения? С компонентом TIdPop3 я не смог разобраться, помогите, или дайте ссылку на компоненты FastNet.
Извини, но через POP3 почта только принимается, а отправлять надо через SMTP:
На тебе пример на IDSMTP Я тебе шлю всё разберёшься а то времени нет выкусывать только то что связано с SMTP.
Код:
unit FrmSend;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, Buttons, cxControls, cxContainer, cxEdit,
cxTextEdit, cxMaskEdit, cxButtonEdit, ExtCtrls, IdMessage,
IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdMessageClient, IdSMTP, cxProgressBar, IdEmailAddress, StrUtils,
IdCoderHeader, AppEvnts;
type
Tsend_frm = class(TForm)
lvBirthDate: TListView;
lbCaptionlv: TLabel;
lbDate: TLabel;
Shape1: TShape;
Label1: TLabel;
pathTextFile: TcxButtonEdit;
Label2: TLabel;
pathBukletFile: TcxButtonEdit;
btnSend: TBitBtn;
btnCancel: TBitBtn;
odFile: TOpenDialog;
pbStatus: TcxProgressBar;
smtp: TIdSMTP;
msg: TIdMessage;
lbStatus: TLabel;
lbSubject: TLabel;
edSubject: TcxTextEdit;
ApplicationEvents1: TApplicationEvents;
procedure FormShow(Sender: TObject);
procedure textPathPropertiesButtonClick(Sender: TObject;
AButtonIndex: Integer);
procedure patchBukletFilePropertiesButtonClick(Sender: TObject;
AButtonIndex: Integer);
procedure btnCancelClick(Sender: TObject);
procedure lvBirthDateSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
procedure btnSendClick(Sender: TObject);
procedure msgInitializeISO(var VTransferHeader: TTransfer;
var VHeaderEncoding: Char; var VCharSet: String);
procedure ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
send_frm: Tsend_frm;
implementation
uses FrmBirthDate, mdlGlobal;
{$R *.dfm}
procedure Tsend_frm.FormShow(Sender: TObject);
var
item : TListItem;
begin
try
lbDate.Caption := DateToStr(Date());
//Çàïîëíåíèå äàííûìè ëèñò âèåâà
birthdate_frm.setBirthdate.First();
while (not birthdate_frm.setBirthdate.Eof) do
begin
//Åñëè ââåä¸í ìàèë è â í¸ì åñòü "ñîáàêà"!
if ((trim(birthdate_frm.setBirthdate.FieldByName('Email').AsString) <> '') and
(Pos('@', birthdate_frm.setBirthdate.FieldByName('Email').AsString) > 0) and
(StrToDate(birthdate_frm.setBirthdate.FieldByName('birthdate').AsString) = date()))
then
begin
item := lvBirthDate.Items.Add();
item.Caption := birthdate_frm.setBirthdate.FieldByName('Name').AsString +
' ' + birthdate_frm.setBirthdate.FieldByName('Name1').AsString +
' ' + birthdate_frm.setBirthdate.FieldByName('Name2').AsString;
item.SubItems.Add(birthdate_frm.setBirthdate.FieldByName('Email').AsString);
item.SubItems.Add(birthdate_frm.setBirthdate.FieldByName('birthdate').AsString);
end;
birthdate_frm.setBirthdate.Next();
end;
if (lvBirthDate.Items.Count > 0) then
begin
btnSend.Enabled := true;
lvBirthDate.SelectAll();
end;
smtp.Host := AppInfo.mailOptions.serverName;
smtp.Password := AppInfo.mailOptions.password;
smtp.Username := AppInfo.mailOptions.userName;
pathTextFile.Text := AppInfo.mailOptions.defTxtFile;
pathBukletFile.Text := AppInfo.mailOptions.defBukletFile;
edSubject.Text := AppInfo.mailOptions.defSubject;
msg.From.Address := AppInfo.mailOptions.backAddr;
msg.From.Name := AppInfo.hotelInfo.name;
except
on e : Exception do
ShowErrorMessage(e.Message, 5000);
end;
end;
procedure Tsend_frm.textPathPropertiesButtonClick(Sender: TObject;
AButtonIndex: Integer);
begin
odFile.Filter := 'Òåêñòîâûå ôàéëû (*.txt)|*.txt';
if (odFile.Execute) then
begin
pathTextFile.Text := odFile.FileName;
end;
end;
procedure Tsend_frm.patchBukletFilePropertiesButtonClick(Sender: TObject;
AButtonIndex: Integer);
begin
odFile.Filter := 'Âñå ôàéëû (*.*)|*.*';
if (odFile.Execute) then
begin
pathBukletFile.Text := odFile.FileName;
end;
end;
procedure Tsend_frm.btnCancelClick(Sender: TObject);
begin
Close();
end;
procedure Tsend_frm.lvBirthDateSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
begin
if (lvBirthDate.SelCount > 0) then btnSend.Enabled := true else
btnSend.Enabled := false;
end;
procedure Tsend_frm.btnSendClick(Sender: TObject);
var
i : word;
fio : string;
email : string;
adr : TIdEMailAddressItem;
text : TStringList;
begin
try
SetCurrentDirectory(PChar(extractFileDir(Application.ExeName)));
text := TStringList.Create();
msg.MessageParts.Clear();
lbStatus.Visible := true;
lbStatus.Caption := '';
lbStatus.Caption := 'Ñîåäèíåíèå...';
Application.ProcessMessages();
try
smtp.Connect(5000);
except
MessageBox(handle, PChar('Íå ìîãó ñîåäèíèòüñÿ ñ ñåðâåðîì ' + smtp.Host),
'Îøèáêà!!', MB_OK or MB_ICONERROR);
lbStatus.Visible := true;
lbStatus.Caption := '';
exit;
end;
lbStatus.Caption := 'Îòïðàâêà...';
//
if (trim(pathTextFile.Text) <> '') then
begin
text.LoadFromFile(pathTextFile.Text);
end;
if (trim(pathBukletFile.Text) <> '') then
TIdAttachment.Create(msg.MessageParts, pathBukletFile.Text);
for i := 0 to lvBirthDate.Items.Count - 1 do
begin
//Åñëè âûäåëåí òî îòïðàâëÿåì åìó ïîçäðàâëåíèå!
if (lvBirthDate.Items[i].Selected) then
begin
fio := lvBirthDate.Items[i].Caption;
email := lvBirthDate.Items[i].SubItems[0];
adr := msg.Recipients.Add();
adr.Address := email;
adr.Name := email;
lbStatus.Caption := 'Îòïðàâëåíî ' + IntToStr(i) + ' èç ' + IntToStr(lvBirthDate.SelCount);
//Ïðîèçâîäèì çàìåíó øàáëîíîâ
msg.Body.Text := AnsiReplaceStr(text.Text, '###FIO###', fio);
msg.Body.Text := AnsiReplaceStr(msg.Body.Text, '###HOTELNAME###', AppInfo.hotelInfo.name);
msg.Body.Text := AnsiReplaceStr(msg.Body.Text, '###DATE###', DateToStr(date()));
msg.Body.Text := AnsiReplaceStr(msg.Body.Text, '###PHONES###', AppInfo.hotelInfo.phones);
msg.Body.Text := AnsiReplaceStr(msg.Body.Text, '###URL###', AppInfo.hotelInfo.url);
msg.Subject := AnsiReplaceStr(edSubject.Text, '###FIO###', fio);
msg.Subject := AnsiReplaceStr(msg.Subject, '###HOTELNAME###', AppInfo.hotelInfo.name);
msg.Subject := AnsiReplaceStr(msg.Subject, '###DATE###', DateToStr(date()));
msg.Subject := AnsiReplaceStr(msg.Subject, '###PHONES###', AppInfo.hotelInfo.phones);
msg.Subject := AnsiReplaceStr(msg.Subject, '###URL###', AppInfo.hotelInfo.url);
msg.Subject := Copy(msg.Subject, 1, 40);
//==========================
Application.ProcessMessages();
smtp.Send(msg);
pbStatus.Position := round(((i + 1) * 100) / lvBirthDate.SelCount);
Application.ProcessMessages();
end;
end;
lbStatus.Visible := false;
MessageBox(Handle, 'Ñîîáùåíèÿ óñïåøíî îòïðàâëåíû!', 'Îòïðàâêà ïî÷òû',
MB_OK or MB_ICONINFORMATION);
smtp.Disconnect();
text.Destroy();
Close();
except
on e : Exception do
begin
lbStatus.Caption := '';
ShowErrorMessage(e.Message, 5000);
text.Destroy();
smtp.Disconnect();
end;
end;
end;
procedure Tsend_frm.msgInitializeISO(var VTransferHeader: TTransfer;
var VHeaderEncoding: Char; var VCharSet: String);
begin
VCharSet := 'windows-1251';
VHeaderEncoding := 'B';
end;
procedure Tsend_frm.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if (msg.message = WM_KEYDOWN) and (msg.wParam = VK_ESCAPE) and (self.Active) then Close();
end;
end.
__________________
---------------------------------------------
Программирование - не профессия, а стиль жизни