PDA

View Full Version : سوال: ارسال sms گروهی



mahmood_s
چهارشنبه 04 اسفند 1389, 20:27 عصر
با سلام

در مورد ارسال اس ام اس گروهی با kylix مشکل دارم

وقتی می خوام اس ام اس گروهی رو مثلا در یک رنج مشخص ارسال کنم و شماره همراه هایی رو که اس ام اس ارسال شده در یک لیست باکس درج کنم و یا بشمرم سیستم تا اتمام ارسال به تمام شماره ها هیچ عکس العملی نشون نمیده و مثل اینکه هنگ کرده

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

AmirHarirbafan
چهارشنبه 04 اسفند 1389, 23:05 عصر
باید از نخ ها (Thread) استفاده کنید
http://msdn.microsoft.com/en-us/library/aa719109(v=vs.71).aspx

mahmood_s
پنج شنبه 05 اسفند 1389, 10:04 صبح
با سلام و تشكر

ميشه توضيح بديد

cnmeysam
پنج شنبه 05 اسفند 1389, 18:46 عصر
سلام

از بچه ها كسي ميتونه سورس كد برنامه ارسال SMS گروهي تو VB6 رو برام بذاره؟

mahmood_s
یک شنبه 08 اسفند 1389, 20:20 عصر
در مورد Thread میشه کمی توضیح بدید

یه مثال کوچیک؟ اگه زحمتی نیست

mahmood_s
دوشنبه 15 فروردین 1390, 10:59 صبح
خبري نيست

كمك كنيد

mahmood_s
یک شنبه 11 اردیبهشت 1390, 07:19 صبح
دوستان در مورد ارسال اس ام اس گروهي با Kylix_SMS كسي مثالي داره

راستش خودم نوشتم ولي هنگام ارسال هنگ ميكنه

niko2008
یک شنبه 11 اردیبهشت 1390, 11:30 صبح
دوستان در مورد ارسال اس ام اس گروهي با Kylix_SMS كسي مثالي داره

راستش خودم نوشتم ولي هنگام ارسال هنگ ميكنه

دوست عزیز بهترین سایت برات planet-source-code.com/vb/‏ رو پیشنهاد میکنم هم کمک میکنه هم میتونی دقیق یاد بگیری

Mahbod Rad
سه شنبه 10 خرداد 1390, 15:35 عصر
سلام دوستان اگر یک برنامه توپ ارسال و دریافت SMS میخواهید با سایت زیر مراجعه کنید
www.Abshar-System.ir (http://www.abshar-system.ir/)
نرم افزار قاصدک
از همه ویژگیهای نرم افزار به رایگان میتوانید استفاده کنید. فقط تا زمانی که خرید نکرده اید آدرس سایت فوق آخر پیامهاتون میاید
این برنامه میتونه ایده های خوبی به طراحان و برنامه نویسان بده
توی این سایت دستورات AT را هم آموزش داده
کامپوننتهای MCORE و KYLIX را هم دراختیارتون میگذاره

Mahbod Rad
سه شنبه 10 خرداد 1390, 16:53 عصر
دوستان در مورد ارسال اس ام اس گروهي با Kylix_SMS كسي مثالي داره

راستش خودم نوشتم ولي هنگام ارسال هنگ ميكنه

من این سورس(دلفی) را داخل برنامه ام گذاشته ام شاید بدردت بخورد
ابتدا یک Thread تعریف کرده ام
--------------
type
Rad_SendSMS = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
end;
--------------
پیامها را برای ارسال در یک جدول ذخیره میکنم و با یک کوری آنها را بازیابی میکنم بعد از ارسال TAG آن پیام را تغییر میدهم تا سیستم متوجه شود که قبلاً برای ارسال آن پیام اقدام شده است
اینجوری در واقع زمان ارسال را مشخص میکنم و مدیریت ارسال را در زمان آینده انجام میدهیم
if not ADOQuerySend.IsEmpty then // پيامي براي ارسال وجد دارد
begin
TimerSend.Tag:=2;// در حال ارسال پيام است این شرط را گذاشته ام تا اگر سیستم هم اکنون در حال ارسال پیام است Thread را دوباره اجرا نکند
Application.ProcessMessages; برای اینکه فرمهایم در زمان ارسال هنگ نکند
Rad_SendSMS.Create(False);// برو به مد ارسال پيام
end
------------------------
اینهم Thread که عمل ارسال را انجام میدهد:
البته بعضی از موارد فقط در برنامه من اجرا میشود و فانکشنهای برنامه من است که خودتان یا باید حذفش کنید یا بسازیدش
procedure Rad_SendSMS.Execute;
var Snd_Si:string;
Snd_Country,Snd_Mbl,Snd_Msg,Snd_WapURL,Snd_FullNum ber:string;
Snd_Wap,Snd_Flash,Snd_LongMsg :Boolean;
lSendReference,Snd_ValidIndex :integer;
CountCunter, SecSi:Integer;
begin
Try
begin //1
FrmMain.PnlReport.Caption:='شروع ارسال پيامها' ; // توضیح و اعلامی برای کاربر
FrmSMSProcces.ADOQuerySend.First; // پیامهای گروهی که در نوبت ارسال قرار گرفته اند در این کوری دیده میشوند
while not FrmSMSProcces.ADOQuerySend.Eof do
begin//2
begin // بررسي ارسال سطر جاري
Snd_Si:=FrmSMSProcces.ADOQuerySend.FieldByName('Sn dSi').AsString; سریال جدول ارسالی ها
Snd_Country:=FrmSMSProcces.ADOQuerySend.FieldByNam e('SndCountry').AsString; // کد کشور
Snd_Mbl:=FrmSMSProcces.ADOQuerySend.FieldByName('S ndNuMbl').AsString; // شماره همراه گیرنده بدون صفر ابتدای شماره ها
Snd_Flash:= FrmSMSProcces.ADOQuerySend.FieldByName('SndFlash') .AsBoolean;// آیا پیام فلش یا اضطراری است؟
/// بررسي ليست سياه برای اینکه پیام به آن ارسال نشود و آنها را به جالت ذخیره شده در سیستم تبدیل کند
if (Snd_Mbl<>'Your Spec Number') and ('شرطی که مشخص میکند آیا شماره در لیست سیاه هست یا نه') then
begin //4
FrmMain.Rad_SaveError('ارسال پيام','اين شماره: '+Snd_Mbl+' در ليست سياه ارسال قرار دارد','48');
FrmSMSProcces.PrcSend(Snd_Si,'3','0'); // شماره هاي ليست سياه در وضعيت ذخيره شده قرار بگيرند // تابعی که تگ پیام را عوض میکند تا از حالت در نوبت ارسال خارج شود
end //4
else
begin // براي ارسال اقدام شود
case FrmSMSProcces.KylixSMS.CheckConnection of/// بررسي وصل بودن به دستگاه
0:
begin// Port is not opened. ارتباط برقرار نيست تلاش شود به مودم وصل شود
// دستوراتی بنویسید تا ارتباط نرم افزار با سخت افزار برقرار شود در این صورت نیازی نیست که کاربر با ورود به نرم افزار اولین کاری که میکند ارتباط با مودم را برقرار کند
end
2: ;//WaitMessage;// در حال ارسال پيام
3: begin// ارتباط با مودم برقرار نیست فرایند ارسال خاموش شود یا قطع شود
ShowMessage('ارتباط با مودم برقرار نميشود تنظيمات و کابلهاي ارتباطي با مودم را بررسي کنيد و دوباره تلاش کنيد');
FrmSMSProcces.ADOQuerySend.Last;
FrmSMSProcces.ADOQuerySend.Tag:=0;// ارسال انجام نگردد
// ارسال اتوماتيک خاموش شود
end;
4: FrmSMSProcces.KylixSMS.EndCall ;// در حال تماس صوتی است قطع شود
end;
Snd_Msg:=FrmSMSProcces.ADOQuerySend.FieldByName('S ndMsgText').AsString; // متن پیام
Snd_ValidIndex:=FrmSMSProcces.ADOQuerySend.FieldBy Name('SndTimValidIdex').AsInteger;// مدت زمان اعتبار پیام
Snd_Wap:=FrmSMSProcces.ADOQuerySend.FieldByName('S ndWap').AsBoolean; آیا پیامک است یا WAP
Snd_WapURL:=FrmSMSProcces.ADOQuerySend.FieldByName ('SndWapURL').AsString; آدرس Wap
Snd_LongMsg:=FrmSMSProcces.ADOQuerySend.FieldByNam e('SndLongMsg').AsBoolean; آیا پیام بلند یا طولانی تر از یک اس ام اس پیوسته باشد یا خیر
Snd_FullNumber:=Snd_Country+Snd_Mbl; ساختن شماره همراه با کد کشور
FrmSMSProcces.KylixSMS.SMSValidity := Snd_ValidIndex + 1; // تنظیم مدت اعتبار پیام
if Snd_LongMsg = True then // اتصال پيام براي ارسال
FrmSMSProcces.KylixSMS.IsConcatenatedSMS := 1 // تنظیم پیام پیوسته یا مجزا
else
FrmSMSProcces.KylixSMS.IsConcatenatedSMS := 0;
if Snd_Flash = True then // تنظیم پیام اضطراری
FrmSMSProcces.KylixSMS.IsFlashSMS := 1
else
FrmSMSProcces.KylixSMS.IsFlashSMS := 0;
// -----------------------------------------------------------------
if FrmSMSProcces.AtuSend_Act.Checked=True then // اگر ارسال اتوماتيک روشن است براي ارشال اقدام شود // شما در هر لحظه میتوانید ارسالهای باقی مانده را کنسل کنید. با این چک باکس در هر ارسال این وضعیت بررسی میشود
begin
Begin //شروع ارسال پيام
if FrmSMSProcces.ADOQuerySend.Tag=1 then // ارسال آزاد است
if FrmSMSProcces.SetWapName.Checked then // آيا ارسال با عنوان است -- بعضی ها ادعا میکنند به جای شماره نام فرد را ارسال میکنند. اونها این کلک را میزنند در واقع یک WAP ارسال میکنند که جای متن و عنوان آن عوض شده است
begin
if Trim(FrmSMSProcces.SetWapOnvan.Ed.Text)='' then
begin
ShowMessage('ارسال پيام با عنوان را انتخاب کرده ايد و عنواني را مشخص نکرده ايد. فيلد عنوان شما را تکميل کنيد');
FrmSMSProcces.ADOQuerySend.Last;
FrmSMSProcces.AtuSend_Act.Checked:=False;
FrmSMSProcces.AtuSend_DisAct.Checked:=True;
FrmSMSProcces.AtuSend_DisActClick(Self);
end
else
// ارسال یک WAP که جای متن و عنوان آن عوض شده است
lSendReference := FrmSMSProcces.KylixSMS.SendWAPPush(Snd_FullNumber, Trim(FrmSMSProcces.SetWapOnvan.Ed.Text), Snd_Msg);
end
else
begin
Application.ProcessMessages; // سيستم هنگ نکند
if Snd_Wap = True then // آيا ارسال وپپوش است
lSendReference := FrmSMSProcces.KylixSMS.SendWAPPush(Snd_FullNumber, Snd_Msg, Snd_WapURL)
else // ارسال پيام ساده
lSendReference := FrmSMSProcces.KylixSMS.SendSMS(Snd_FullNumber, Snd_Msg);
end;
END;// اتمام ارسال پيام
if lSendReference < 0 then // ارسال موفقيت آميز نبوده است
begin
FrmSMSProcces.Rad_SaveErrorObjSms(Snd_Mbl);// یک فانکشن که خطاها را ذخیره میکند
FrmSMSProcces.PrcSend(Snd_Si,'0','0'); // یک فانکشن که TAG پیام را از حالت در نوبت ارسال به حالت ارسال نشده تغییر میدهد
end
else // ارسال موفق به اس ام اس سندر
begin
FrmSMSProcces.PrcSend(Snd_Si,'1',IntToStr(lSendRef erence)); // یک فانکشن که TAG پیام از حالت در نوبت ارسال به ارسال شده تبدیل میکند و سریال رفرنس ارسال را هم برای پیگیری دلیوری ذخیره میکند
FrmMain.PnlReport.Caption:='ارسال موفق به شماره: '+Snd_Mbl+ ' انجام شد'; // اعلام به کاربر که این پیام ارسال شد
end;
end
else //ارسال اتوماتيک خاموش است
FrmMain.PnlReport.Caption:='ارسال اتوماتيک خاموش شده است';
FrmSMSProcces.NumberInUse.Ed.Text:='';
end; // پايان اقدام براي ارسال
end; // پايان بررسي ارسال سطر جاري
if FrmSMSProcces.AtuSend_DisAct.Checked=True then FrmSMSProcces.ADOQuerySend.Last; // ارسال اتوماتيک خاموش است // احتمالاً توسط کاربر در حین ارسال خاموش شده است و کار قطع شده است
FrmSMSProcces.ADOQuerySend.Next;// رکورد بعدي
end; //گردش در حلقه ارسال
if FrmSMSProcces.AtuSend_Act.Checked=True then // هنوز ارسال اتوماتیک روشن است
FrmMain.PnlReport.Caption:='ارسال پيامها به اتمام رسيد'// اعلام به کاربر که همه پیامهای گروهی ارسال شده اند
else
FrmMain.PnlReport.Caption:='ارسال اتوماتيک خاموش شده است';
end;// خالي شدن کوري ارسال
except
FrmMain.PnlReport.Caption:='اشکال در ارسال پيامها' ;
end;
Rad_SendSMS.Create(True);// بستن تريت
end;

-------------------------
من مقداری برنامه را حذف کرده ام اگر بعضی جاها Begin و end آن صحیح نیست دقت کنید
اگر برنامه را میخواهی به سایت زیر مراجعه کن و به رایگان دانلودش کن
www.Abshar-System.ir (http://www.Abshar-System.ir)