ورود

View Full Version : ارسال نامه توسط Indy9



www2006
چهارشنبه 20 دی 1385, 19:39 عصر
سلام

تو یک برنامه میخوام نامه ای توسط یک نفر برای دیگری ارسال شود ...
تمام کارهای مقدماتی (مثل تعریف بانک و ساختن جدولهای مورد نیاز ، برقراری ارتباط کاربران با سرور توسط کامپوننتهای Indy و ..) انجام شده است .
هر کاربر هنگامی که به سیستم کانکت است میتواند نامه را ارسال کند (نامه را در یک RichEdit ) تنظیم میکند ..

اما مشکل و سوال من :
1- دقیقا بعد از تایپ نامه و هنگامی که کاربر دکمه ی Send را میزند ، چه اتفاقاتی باید بیفتد ؟؟
(آیا باید یک فایل save شده از نامه ی وی از طریق کامپوننتهای ftp برای سرور ارسال شود یا اینکه راه دیگری هم وجود دارد؟)

2-در بانک ،(Spl server2000) چه نوع داده ای باید برای نگهداری نامه ها ایجاد شود ؟
( من varchar(4000) ایجاد کرده ام ..)

با تشکر ...

greenway
چهارشنبه 20 دی 1385, 20:24 عصر
این مثال ارسال Email با Indy است. اضافاتش رو خودتون حذف کنید.
almail->AuthenticationType = atLogin; رو باید با توجه به نیازمندیهای سرورتون تنظیم کنید.
در مورد سوالتون ، فکر میکنم بد نباشه اگر یک Mail Server نصب کنید و کاربران همه کاراشون رو به صورت Email انجام بدهند.



void __fastcall TForm1::SendAMail(AnsiString ToWhom,AnsiString Body,
AnsiString Subject,AnsiString Body1,AnsiString Body2)
{
AnsiString From,FromName,ServerAdd,TheBody,Passwd;
TStrings *t;
TIdSMTP *almail;
TIdMessage *almsg;

BasicInfo->Open();
From = BasicInfo->Fields->FindField("REGISTERAR")->AsString;
FromName = BasicInfo->Fields->FindField("EMAILFROMNAME")->AsString;
ServerAdd = BasicInfo->Fields->FindField("SMTPSERVER")->AsString;
Passwd = BasicInfo->Fields->FindField("THEPASS")->AsString;
BasicInfo->Close();
almail = new TIdSMTP(NULL);
almsg = new TIdMessage(NULL);
almail->UserId = From;
almail->Password =Passwd;
almail->Host = ServerAdd;
almail->Port = 25;
almail->AuthenticationType = atLogin;
almail->Connect();
almail->Authenticate();
almsg->Clear();
almsg->ContentType = "text/html";
almsg->From->Address = From;
almsg->From->Name = FromName;
almsg->Recipients->EMailAddresses = ToWhom;
almsg->Subject = Subject;
TheBody = Body1 + Body + Body2;
almsg->Body->Add(TheBody);
almail->Send(almsg);
almail->Disconnect();
delete almail;
delete almsg;
return;
}

www2006
چهارشنبه 20 دی 1385, 21:51 عصر
لطفا بیشتر توضیح دهید ..


فکر میکنم بد نباشه اگر یک Mail Server نصب کنید و کاربران همه کاراشون رو به صورت Email انجام بدهند.


من یه مقاله از سایت Delphi.About.com گرفتم با نام " Sending email Messages" گرفتم که نحوه ی ارسال نامه توش توضیح داده شده ... منتها من چون هیچ تجربه ای در زمینه ی برنامه نویسی اینترنت ندارم چیز زیادی درباره ی Mail Server نمیدونم .. اگه دقیقتر و جزییتر راهنمایی کنید ممنون میشم .

یه سوال دیگه ..
حتما باید Mail Server نصب کنم ؟؟
راه دیگه ای نیست ؟

MNosouhi
چهارشنبه 20 دی 1385, 22:56 عصر
جستجو کنید ، قبلا یه برنامه با سورس قرار داده شده که همه تنظیماتی رو که میخاید انجام داده و از سرورهای یاهو و گوگل استفاده کرده.

greenway
پنج شنبه 21 دی 1385, 07:39 صبح
لطفا بیشتر توضیح دهید ..



من یه مقاله از سایت Delphi.About.com گرفتم با نام " Sending email Messages" گرفتم که نحوه ی ارسال نامه توش توضیح داده شده ... منتها من چون هیچ تجربه ای در زمینه ی برنامه نویسی اینترنت ندارم چیز زیادی درباره ی Mail Server نمیدونم .. اگه دقیقتر و جزییتر راهنمایی کنید ممنون میشم .

یه سوال دیگه ..
حتما باید Mail Server نصب کنم ؟؟
راه دیگه ای نیست ؟

Mail Server برای کنترل Mail ها بکار میره ، زمانی که شما با اینترنت کار می کنید ، تقریبا همه هاست هایی که می گیرید روشون یک Mail Server نصب هست که به شما آدرسهای POP3 و SMTP میده . حالا اگر این رو روی یک شبکه محلی نصب کنید ، انوقت کاربران شبکه اتون با تنظیم setting برنامه های Mail Reader اشون میتونند از اون برای ارسال Email داخلی به همدیگر استفاده کنند. یک Mail Server کوچیک اما قابل استفاده توسط http://www.youngzsoft.net/ نوشته شده که برای تست و آشنایی می تونید ازش استفاده کنید. اما برای کارهای حرفه ای تر می تونید از MDaemon استفاده کنید. وقتی سرور رو نصب کردید و مثلا توی یک شبکه روی یک سیستم به آدرس 192.168.1.50 اون رو نصب کردید از این IP ها میشه برای POP و SMTP برای ارسال Email داخلی استفاده کرد. امکان نصب Name Server و انتصاب یک اسم به هر IP هم وجود داره که اینجوری می تونید به هر کاربر یک اسم دومین هم بدین.
اما به نظر میرسه که شما میخواهید یک سیستم پست داخلی توی شبکه راه اندازی کنید. که پیاده سازی اون حتما نیاز به چنین سروری نداره ، کافیه که همه پیام ها رو توی دیتابیس ذخیره کنید و هر کسی که به اون دسترسی پیدا میکنه با توجه به شناسه ای که داره با یک Query روی دیتابیس پیامهایی که براش ارسال شده و یا خودش فرستاده رو ببینید. من این مقاله رو خوندم
http://delphi.about.com/od/internetintranet/l/aa020304a.htm
برای اینکه این کار رو در یک شبکه داخلی انجام بدین ، حتما باید روی یکی از سیستم هاتون Mail Server نصب کنید. من فکر میکنم که شما منظورتون بخش "پیام خصوصی" در برنامه اتون هست . در اینصورت پیاده سازیش توی DataBase بهتر به نظر میرسه. یعنی ، وقتی چیزی ارسال میشه ، اون رو توی دیتابیس ذخیره کنید و فرستنده و گیرنده اش رو هم همراهش نگهداری کنید ، زمانی هم که کسی خواست Login کنه همه رو چک کنید و اونهایی رو که به شخص Login کننده مربوطه بهش نشون بدین.

حرفه ای
پنج شنبه 21 دی 1385, 08:04 صبح
سلام

تو یک برنامه میخوام نامه ای توسط یک نفر برای دیگری ارسال شود ...

هر کاربر هنگامی که به سیستم کانکت است میتواند نامه را ارسال کند (نامه را در یک RichEdit ) تنظیم میکند ..



دوست عزیزم !
دو سبک جهت سیستم اتوماسیون اداری وجود دارد
1- تایپ متن نامه در Memo و یا RichEdit
2- تایپ متن نامه در نرم افزارهای کمکی مثل Word

که در حالت اول متن به صورت Text در بانک اطلاعاتی ذخیره شده و در صورت نیاز از بانک اطلاعاتی فراخوان می گردد
در حالت دوم متن به صورت فایل در سرور ذخیره شده و جهت نمایش باید به کامپیوتر کاربر ارسال شود . اگر از این حالت استفاده می کنید به دنبال Indy باشید و جهت اطلاعات بیشتر بهترین منبع IndyGroup در سایت Yahoo است که Sample های خوبی آنجا می توانید پیدا کنید
در SqlServer نیز من پیشنهاد می کنم از حالت Text استفاده کنید

:چشمک: :چشمک: :چشمک: :چشمک: :چشمک: :چشمک: :چشمک: :چشمک:

www2006
پنج شنبه 21 دی 1385, 16:34 عصر
جستجو کنید ، قبلا یه برنامه با سورس قرار داده شده که همه تنظیماتی رو که میخاید انجام داده و از سرورهای یاهو و گوگل استفاده کرده.
من میخواهم نامه را به سروری که توی شبکه ی Lan دارم ارسال کنم نه سروری در اینترنت .. ( فرض کنید در یک اداره کارمندان میخواهند نامه نگاری کنند و نامه ها در یک سرور مرکزی نگهداری میشود )






اما به نظر میرسه که شما میخواهید یک سیستم پست داخلی توی شبکه راه اندازی کنید
دقیقا



من فکر میکنم که شما منظورتون بخش "پیام خصوصی" در برنامه اتون هست . در اینصورت پیاده سازیش توی DataBase بهتر به نظر میرسه. یعنی ، وقتی چیزی ارسال میشه ، اون رو توی دیتابیس ذخیره کنید و فرستنده و گیرنده اش رو هم همراهش نگهداری کنید ، زمانی هم که کسی خواست Login کنه همه رو چک کنید و اونهایی رو که به شخص Login کننده مربوطه بهش نشون بدین
این دقیقا همون چیزیه که من میخوام پیاده سازی کنم .. منتها مشکلم اینه که :
1- آیا باید نامه را بصورت یک فایل به سرور ارسال کنم(یعنی نامه بعد از تایپ save شود و فایل ذخیره شده، توسط ftp ، به سرور ارسال شود؟) یا راهی برای ارسال مستقیم متن نامه وجود دارد ؟
2- در دیتا بیس این نامه چطور قرار میگیرد ؟






دو سبک جهت سیستم اتوماسیون اداری وجود دارد
1- تایپ متن نامه در Memo و یا RichEdit
2- تایپ متن نامه در نرم افزارهای کمکی مثل Word
هر کلاینت در هنگام اتصال، برای تنظیم نامه از روش اول استفاده میکند ...



که در حالت اول متن به صورت Text در بانک اطلاعاتی ذخیره شده و در صورت نیاز از بانک اطلاعاتی فراخوان می گردد
لطفا دقیقتر توضیح دهید .. منظورم اینه که دقیقا چطور این نامه به بانک وارد میشود و چطور از آن بازیابی میشود ؟



در حالت دوم متن به صورت فایل در سرور ذخیره شده و جهت نمایش باید به کامپیوتر کاربر ارسال شود . اگر از این حالت استفاده می کنید به دنبال Indy باشید و جهت اطلاعات بیشتر بهترین منبع IndyGroup در سایت Yahoo است که Sample های خوبی آنجا می توانید پیدا کنید
من فکر میکنم که راه حل دوم برای حالت اول هم جواب بدهد .. چون به هر حال متن نامه باید در سرور ذخیره شود .. درسته ..؟؟



در SqlServer نیز من پیشنهاد می کنم از حالت Text استفاده کنید
من از nvarchar استفاده کردم چون با متن فارسی مشکلی ندارد ...
آیا Text مزیت خاصی نسبت به nvarchar دارد ؟

www2006
شنبه 23 دی 1385, 17:50 عصر
کماکان منتظر راهنمایی دوستان هستم ...

ParsaNM
پنج شنبه 03 مرداد 1387, 09:53 صبح
اگر از text استفاده کني مي توني از unicode استفاده کني ....
ولی من خودم از varchar(7000) استفاده مي کنم تا حالا مشکلي ندارم از زرق و برق زيادي هم خبري نيست خيلي ساده....