Delphi. Кто знает?
И еще, кто-нить знает как работать с Аутлуком в Делфи?
А может хоть кто-то знает компоненту TSendMail и как с ней обходиться?
А как послать мессагу др. компу?
Я как-то в своё время делал коиент-серверное приложение опроса пользователей интернет-клуба (электронная анкета) на Delphi, так я пользовался сокетами. Говорят ещё Indy можно использовать (это я к вопросу о том, как послать мессагу компу)
ооо ! ты умеешь работать с сетью. замечательно. у тебя есть что-нить для сетей в Дельфи ? а то у меня в какую книжку не копни - одни базы данных..
А книшка у меня тоже по базам данных
Вроде TWinSock компонент, не помню, давно это было
Для 7-ых - TIdSMTP
Смотришь помощь и там ОЧЕНЬ ПОДРОБНЫЕ ПРИМЕРЫ.
А вот тебе "корявый" вариант NetSend-а...
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, shellapi, ComCtrls, Grids;
type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
Edit2: TEdit;
Label2: TLabel;
Button1: TButton;
RichEdit1: TRichEdit;
Label3: TLabel;
Edit3: TEdit;
Button2: TButton;
StringGrid1: TStringGrid;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
st,st1:string;
zFileName, zParams, zDir: array[0..255] of Char;
begin
if Edit2.Text='' then exit;
st:='send '+Edit1.Text+' '+'"'+Edit2.Text+'"';
st:=inttostr(shellexecute(Application.Handle,nil,
StrPCopy(zFileName, 'net' StrPCopy(zParams, st
StrPCopy(zDir,'.' sw_hide;
if st<>'0' then begin
st1:=datetimetostr(now)+' ';
if Edit3.Text>'' then st1:=st1+'['+Edit3.Text+'] '
else st1:=st1+'['+Edit1.Text+'] ';
st1:=st1+edit2.Text;
RichEdit1.Lines.Insert(1,st1);
edit2.Text:='';
ShowMessage('Отправлено');
end
else ShowMessage('Ошибка при отправке');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
{Richedit2.Lines.Insert(0,Edit1.Text+' '+Edit3.Text);}
StringGrid1.Cells[0,stringGrid1.RowCount-1]:=Edit1.Text;
StringGrid1.Cells[1,stringGrid1.RowCount-1]:=Edit3.Text;
stringGrid1.RowCount:=stringGrid1.RowCount+1;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
f:textfile;
st:string;
begin
assignfile(f,'Ips.txt');
{$i-}
reset(f);
{$i+}
if ioresult=0 then begin
while not eof(f) do begin
readln(f,st);
if st>'' then begin
StringGrid1.Cells[0,stringGrid1.RowCount-1]:=copy(st,1,pos(' ',st)-1);
delete(st,1,pos(' ',st;
StringGrid1.Cells[1,stringGrid1.RowCount-1]:=st;
stringGrid1.RowCount:=stringGrid1.RowCount+1;
end;
end;
closefile(f);
if StringGrid1.RowCount>1 then begin
Edit1.Text:=StringGrid1.Cells[0,0];
Edit3.Text:=StringGrid1.Cells[1,0];
end;
end;
assignfile(f,'history.txt');
{$i-}
reset(f);
{$i+}
if ioresult=0 then begin
while not eof(f) do begin
readln(f,st);
if st>'' then begin
RichEdit1.Lines.Add(st);
end;
end;
closefile(f);
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
var
f:textfile;
i:integer;
begin
assignfile(f,'Ips.txt');
{$i-}
rewrite(f);
{$i+}
if ioresult=0 then begin
if StringGrid1.RowCount>1 then
for i:=0 to StringGrid1.RowCount-2 do begin
writeln(f,StringGrid1.Cells[0,i]+' '+StringGrid1.Cells[1,i]);
end;
closefile(f);
end;
assignfile(f,'history.txt');
{$i-}
rewrite(f);
{$i+}
if ioresult=0 then begin
for i:=0 to Richedit1.Lines.Count-1 do begin
writeln(f,Richedit1.Lines[i]);
end;
closefile(f);
end;end;
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
begin
Edit1.Text:=StringGrid1.Cells[0,ARow];
Edit3.Text:=StringGrid1.Cells[1,ARow];
end;
end.
сюда. Вот один способ от чела под ником Di_wind с rsdn.ru. Могут быть проблемы с кодировками, но я тестил с The Bat - работало. Этот способ прокатит не со всеми smtp серверами, т. к. компонент Indy, который использован здесь, не знает других способов авторизации, кроме AUTH LOGIN. Будет работать, например, с pop3.rambler.ru (это у них так smtp называется) и smtp.hotbox.ru. Если нужно, можно в письмо вложить файл (файлы). Собиралось под Delphi 6.
unit smtp;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdMessageClient, IdSMTP, IdMessage, StdCtrls;
type
TMainForm = class(TForm)
SendButton: TButton;
procedure SendButtonClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
procedure TMainForm.SendButtonClick(Sender: TObject);
var
MyMail: TIdSMTP;
NewMessage:TIdMessage;
NewAttach:TIdAttachment;
begin
MyMail := TIdSMTP.Create(MainForm);
//---------------НЕОБХОДИМО ДЛЯ АВТОРИЗАЦИИ SMTP-------------------
try
MyMail.Host := 'pop3.rambler.ru'; //Тут свой адрес сервера исходящей почты
MyMail.Password := '123'; //пароль
MyMail.UserId := 'fizfuck'; //Свой почтовый адрес
MyMail.AuthenticationType := atLogin;
//-----------------------------------------------------------------
MyMail.Port := 25;
MyMail.Connect;
NewMessage:=TidMessage.Create(self);
NewMessage.From.Name:='guess who';
NewMessage.From.Address:='rambler.ru';
NewMessage.IsEncoded:=true;
// Если надо слать вложения, раскомментить это
//NewAttach:=TidAttachment.Create(NewMessage.MessageParts,'e:\attachment.txt');
NewMessage.Body.Add('Message body (Тело сообщения)');
NewMessage.Subject := 'Cool subj (Реальная тема)';
NewMessage.Recipients.EMailAddresses:='rambler.ru'; //Адрес получателя
MyMail.Send(NewMessage);
except
Application.MessageBox('Лажа', 'Случилась');
end;
end;
end.
Отправить e-mail можно много какими способами, см., например, unit smtp;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdMessageClient, IdSMTP, IdMessage, StdCtrls;
type
TMainForm = class(TForm)
SendButton: TButton;
procedure SendButtonClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
procedure TMainForm.SendButtonClick(Sender: TObject);
var
MyMail: TIdSMTP;
NewMessage:TIdMessage;
NewAttach:TIdAttachment;
begin
MyMail := TIdSMTP.Create(MainForm);
//---------------НЕОБХОДИМО ДЛЯ АВТОРИЗАЦИИ SMTP-------------------
try
MyMail.Host := 'pop3.rambler.ru'; //Тут свой адрес сервера исходящей почты
MyMail.Password := '123'; //пароль
MyMail.UserId := 'fizfuck'; //Свой почтовый адрес
MyMail.AuthenticationType := atLogin;
//-----------------------------------------------------------------
MyMail.Port := 25;
MyMail.Connect;
NewMessage:=TidMessage.Create(self);
NewMessage.From.Name:='guess who';
NewMessage.From.Address:='rambler.ru';
NewMessage.IsEncoded:=true;
// Если надо слать вложения, раскомментить это
//NewAttach:=TidAttachment.Create(NewMessage.MessageParts,'e:\attachment.txt');
NewMessage.Body.Add('Message body (Тело сообщения)');
NewMessage.Subject := 'Cool subj (Реальная тема)';
NewMessage.Recipients.EMailAddresses:='rambler.ru'; //Адрес получателя
MyMail.Send(NewMessage);
except
Application.MessageBox('Лажа', 'Случилась');
end;
end;
end.
Кто-нить знает как прочитать текст из файла *.doc, а то стандартно если читать гавно какое-то получается.
В ворде походу своя кодировка
юзай automation
Работало
(текст + файлы)
procedure Send(ShortInfo, Adress, Topic: string; AttachFiles: TStringList);
var i : integer;
cmdLine : string;
cmdGood : string;
TxtFile : TStringList;
begin
TxtFile:=TStringList.Create;
TxtFile.Text:=ShortInfo; //saving text
TxtFile.SaveToFile(UserPath+'tmp.txt');
TxtFile.Free;
cmdLine:='/MAIL'+'U='+theBatUser+';'+'P='+theBatPassword+';'; //calling the Bat U=USER, P=PASSWORD
cmdLine:=cmdLine+'TO='+Adress+';'; //adding address
cmdLine:=cmdLine+'S='+Topic+';'; //subject
cmdLine:=cmdLine+'TEXT='+UserPath+'tmp.txt'+';'; //including text
for i:=0 to AttachFiles.Count-1 do //attaching files A=FILE
cmdLine:=cmdLine+'A='+AttachFiles.Strings[i]+';';
cmdLine:=cmdLine+'EDIT'; //open editor
cmdGood:='';
for i:=1 to length(cmdLine) do
if cmdLine[i]=' ' then cmdGood:=cmdGood+'" "' // _ ==> "_"
else if cmdLine[i]='"' then cmdGood:=cmdGood+'''' // " ==> '
else if cmdLine[i]='''' then cmdGood:=cmdGood+'''''' // ' ==> ''
else cmdGood:=cmdGood+cmdLine[i];
ShellExecute(Handle,'open',PChar(theBatExePChar(cmdGoodnil,SW_Show)
end;
правил кое-что прямо здесь
но вроде все верно
код
word:=createOleObject('word.basic');
word.fileopen('...');
capt:=....
в capt должна оказаться первая строка.
просто хелпов нет, а я в этой теме ЛОХ
И более корректный код:
var MsWord: Variant;
begin
try
MsWord := GetActiveOleObject('Word.Application');
except
try
MsWord := CreateOleObject('Word.Application');//либо 'Word.Basic'
MsWord.Visible := false;
except
ShowMessage('Не могу запустить Microsoft Word');
Exit;
end;
end;
end;
а использовать Word в качестве имени переменной - дурной тон. В конце-концов этот тип ещё никто не отменял.
..копать, вроде, нужно в сторону MsWord.ReadLine или MsWord.read
Есть msWord.Text и msWord.GetText, но я не знаю параметров
Оставить комментарий
stm5999302
Кто знает как из делфи послать e-mail?