Текущий архив: 2004.07.04;
Скачать: CL | DM;
Вниз
Отправка почты с помощью winsock Найти похожие ветки
← →
LanCoder (2004-04-07 02:49) [0]Уважаемые форумчане, столкнулся с проблемой, при добавлении в свой проект IdSMTP и IDMessages, размер откомпилированного файла увеличивается с 47 Кб до 235Кб, что очень не желательно в моём случае. Именно поэтому я решил попробовать отправлять почту с помощью сокетов, но все мои старания заканчивались неудачами и вот теперь приходится просить о помощи у вас. Возможно у когото завалялся фрагментик программы реализующий отправку почты на 1 адрес, через smtp, а также с несколькими аттачментами. Буду очень признателен за оказанную вами помощь.
← →
Rouse_ © (2004-04-07 09:31) [1]Вопрос вот в чем: что ты такое пишешь, с таким маленьким размером да еще с поддержкой отправки почты?!
← →
Digitman © (2004-04-07 09:44) [2]
> решил попробовать отправлять почту с помощью сокетов
а IdSMTP, по-твоему, это не "сокет" ? это "шмокет" ?
> все мои старания заканчивались неудачами
ну показывай ... свои "старания" ..
← →
LanCoder (2004-04-13 02:41) [3]Удалено модератором
Примечание: Создание пустых сообщений...
← →
Alexis © (2004-04-13 13:54) [4]2 Rouse-судя по мейлу автора, троян :)
← →
AndersoNRules © (2004-04-13 22:33) [5]Shas naydu :
vot,derji:
unit Mapi;
interface
uses Windows,Sysutils,Classes;
function SendMail(RecName,Address,Subject,Attachment:String):boolean;
function IsOnline:boolean;
implementation
uses Mapi;
function SendMail(RecName,Address,Subject,Attachment:string):boolean;
var MapiMessage:TMapiMessage;
MapiFileDesc:TMapiFileDesc;
MapiRecipDesc:TMapiRecipDesc;
i:integer; s:string;
begin
MapiRecipDesc.ulReserved:=0;
MapiRecipDesc.ulRecipClass:=MAPI_TO;
MapiRecipDesc.lpszName:=PChar(RecName);
MapiRecipDesc.lpszAddress:=PChar(Address);
MapiRecipDesc.ulEIDSize:=0;
MapiRecipDesc.lpEntryID:=nil;
MapiFileDesc.ulReserved:=0;
MapiFileDesc.flFlags:=0;
MapiFileDesc.nPosition:=0;
MapiFileDesc.nPosition:=PChar(Attachment);
MapiFileDesc.lpszFileName:=nil;
MapiFileDesc.lpFileType:=nil;
MapiMessage.ulReserved:=0;
MapiMessage.lpszSubject:=nil;
MapiMessage.lpszNoteText:=Pchar(Subject);
MapiMessage.lpszMessageType:=nil;
MapiMessage.lpszDateReceived:=nil;
MapiMessage.lpszConversationID:=nil;
MapiMessage.flFlags:=0;
MapiMessage.lpOriginator:=nil;
MapiMessage.nRecipCount:=1;
MapiMessage.lpRecips:=@MapiRecipDesc;
if Length(Attachment)>0 then
begin
MapiMessage.nFileCount:1;
MapiMessage.lpFiles:=@MapiFileDesc;
end
else
begin
MapiMessage.nFileCount:=0;
MapiMessage.lpFiles:=nil;
end;
Result:=MapiSendMail(0,0,MapiMessage,MAPI_DIALOG or MAPI_LOGON_UI or MAPI_NEWSESSION,0)=SUCCESS_SUCCESS;
end;
function IsOnline:boolean;
var RASConn: TRASConn; dwSize,dwCount: DWORD;
begin
RASConns.dwSize:= SizeOf(TRASConn);
dwSize:= SizeOf(RASConns);
Res:!RASEnumConnectionsA(@RASConns, @dwSize, @dwCount);
Result:= (Res = 0) and (dwCount > 0);
end;
end.
esli budet rabotati,s tebya pivo :) joke
← →
Rouse_ © (2004-04-13 22:50) [6]
unit Mapi;
...
uses Mapi;
верх гениальности...
Res:!RASEnumConnectionsA(@RASConns, @dwSize, @dwCount);
Это тоже юмор...
← →
AndersoNRules © (2004-04-14 15:51) [7]Unit ya potom sluchayno nazval Mapi.
← →
LanCoder (2004-04-23 07:56) [8]Спасибо за внимание!!!
Если не секрет, почему не работает ниже приведённый пример, ведь по идее всё правильно, единственное, что я не когда не создавал сам это классы и объекты, я поглядел в Дэлфовый Хэлп там вроде так, как у меня? И ещё вопрос может можно обойтись без всей этой лабуды, а то я создавал класс TMain только для того чтобы работали события TClientSocketa. Кстати визуальный аналог, отлично работает, присылая мне при этом письмо с аттачментом, а этот даже не коннектится к серверу.
==========================================
program Project3;
uses
Classes, Dialogs,ScktComp,sysutils;
type
TMain = class(TComponent)
cl:TClientSocket;
Procedure SendMail(CFrom,CTo,Csmtp,Ctext:string);
Procedure clRead(Sender: TObject; Socket: TCustomWinSocket);
Procedure clConnect(Sender: TObject; Socket: TCustomWinSocket);
end;
{==================CONSTANTS==========================}
const z = "Content-Type: text/html;"+
"charset="koi8-r""+
"Content-Transfer-Encoding: quoted-printable"+
"<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">"+
"<HTML><HEAD>"+
"<META http-equiv=3DContent-Type content=3D"text/html; charset=3Dkoi8-r">"+
"<META content=3D"MSHTML 6.00.2800.1264" name=3DGENERATOR>"+
"<STYLE></STYLE>"+
"</HEAD>"+
"<BODY bgColor=3D#ffffff><STRONG><FONT face=3D"Bodoni MT" size=3D2>"+
"<DIV>"+
"<HR>"+
"</DIV>"+
"<DIV></FONT></STRONG><FONT size=3D2>>>from Kasper with=20"+
"Love...<BR>>>Watch my WebCam online @ <A=20"+
"href=3D"http://www.fromUA.net/web/">http://www.fromUA.net/web/</A></FONT>="+
"</DIV>"+
"<DIV><STRONG><FONT face=3D"Bodoni MT" ="+
"size=3D2></FONT></STRONG> </DIV>"+
"<DIV><FONT size=3D2>Legal Restrictions<BR>Copyright =BF 2001-2003 ="+
"kasperUA™. All=20"+#10+
"rights reserved.<BR>Except as otherwise indicated elsewhere in this ="+
"publication,=20"+#10+
"with respect to a particular portion, file, or document, any person is ="+
"hereby=20"+#10+
"authorized to view, copy, print, and distribute this document subject to ="+
"the=20"+#10+
"following conditions:<BR>The document may be used for informational,=20"+
"non-commercial purposes only.</FONT></DIV></BODY></HTML>";
{=======================CONSTANTS========================}
var SFrom,STo,smtp,text,k:string;
Main:TMain;
Procedure TMain.clRead(Sender: TObject; Socket: TCustomWinSocket);
begin
k:=socket.ReceiveText;
showmessage(k);
end;
Procedure TMain.clConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
socket.SendText("HELO "+Smtp+#10);
sleep(500);
socket.SendText("MAIL FROM:"+SFrom+#10);
sleep(500);
socket.SendText("RCPT TO:"+STo+#10);
sleep(500);
socket.SendText("DATA"+#10);
sleep(500);
socket.SendText(Text+#10);
sleep(500);
socket.SendText("."+#10);
end;
Procedure TMain.SendMail(CFrom,CTo,Csmtp,Ctext:string);
begin
SFrom:=CFrom;
STo:=CTo;
Smtp:=CSmtp;
text:=CText;
try
cl:=TClientSocket.Create(Main);
cl.OnRead:=clRead;
cl.OnConnect:=clConnect;
if cl.Active then begin
cl.Close;
Exit;
end;
cl.Host:=Smtp;
cl.Port:=25;
cl.active:=true;
cl.Open;
except
cl.Close;
cl.Active:=false;
cl.Destroy;
end;
end;
begin
Main:=TMain.Create(nil);
Main.sendmail("my@mail.ru", "my@mail.ru","smtp.mymail.ru",z);
repeat
until k <> "";
Main.cl.Close;
Main.cl.Active:=false;
Main.cl.Destroy;
end.
==========================================
← →
Polevi © (2004-04-23 08:05) [9]cl:=TClientSocket.Create(Main);
cl.OnRead:=clRead;
cl.OnConnect:=clConnect;
if cl.Active then begin //вот это зачем ?????
cl.Close;
Exit;
end;
cl.active:=true; //это тоже зачем ?
cl.Open;
неправыильно отслыать чтото в OnConnect
это нужно делать в OnWrite и без всяких sleep(500)
и вообще, зачем использовать асинхронный режим елси не понимаешь его сути ? это не самый простой способ, используй блокирующий
← →
LanCoder (2004-04-23 16:00) [10]Я не сильно разбираюсь в этом, объясни если не трудно или дай ссылку на доку
← →
LanCoder (2004-04-23 17:13) [11]И главная проблема не в этом, это всё просто напросто не работает в консольном приложении, почему может ктото знает ответ?
← →
Polevi © (2004-04-23 18:37) [12]потомучто ты не выбираешь сообщения из очереди потока
← →
LanCoder (2004-04-24 07:05) [13]Polevi ©, объясни пожалуйста поподробнее, а то чё не делаю не помогает.
← →
Polevi © (2004-04-24 09:31) [14]var
Msg:TMsg;
begin
Main:=TMain.Create(nil);
Main.sendmail("my@mail.ru", "my@mail.ru","smtp.mymail.ru",z);
while GetMessage(msg,0,0,0) do
DispatchMessage(msg);
Main.Free;
end;
← →
0gnev.sky (2004-05-06 08:49) [15]LanCoder: если ты пишешь с использованием TServer/ClientSocket"a -- у тебя, имхо, размерчик должен и так подскочить :)) только API может реализовать маленький размер, а ты маленький, что б на нем программить ...
← →
Klev (2004-05-07 22:04) [16]>Rouse_ © (07.04.04 09:31) [1]
Маленький размер - это 8-20 кб, а 47 - это уже много.
Страницы: 1 вся ветка
Текущий архив: 2004.07.04;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.041 c