PDA

View Full Version : حرفه ای: ارسال ایمیل بدون انتظار



M.T.P
چهارشنبه 10 اسفند 1390, 15:06 عصر
دوستان عزیز:

همانطور که احتمالا مستحضر هستید ، تابع زیر برای ارسال کردن ایمیل است و بدون هیچ گونه مشکلی نامه ها رو ارسال میکنه ، اما سوالی که هست اینه که دستور Send در تابع زیر مشمول چند ثانیه زمان برای ارسال هست ( حدودا 5 تا 10 ثانیه ) اگه فایل ضمیمه هم باشه که قائدتا زمان بیشتری رو نیازمند خواهد بود و این طبیعیه اما برای ما vb6 کارها که با Multi Threading مشکل داریم مدت زمان فوق رو باید برنامه صبر کنه تا ایمیل ارسال شه و در برنامه های ما از دیدگاه کاربر برنامه هنگ کرده و ممکنه کاربر از این موضوع اطلاع نداشته باشه و برنامه رو End Process کنه و یا اصلا ممکنه دوست نداشته باشیم این مدت رو منتظر بمونیم و کل برنامه معطل این پروسیجر باشه و علی رغم اینکه تابع DoEvent نمی تونه چاره ساز این موضوع باشه لذا چنانچه راهکار و یا دستور مشابه دیگری در اختیار دارید که این مشکل رو رفع کنه از شما سپاسگزار خواهم بود.


Public Function SendMail(ByVal sMailReciever As String, _
ByVal sMailSender As String, _
ByVal sMailSenderPassword As String, _
ByVal sMailSubject As String, _
ByVal sMailText As String, _
ByVal sMailAttachFile As String) As Boolean

On Error GoTo EndLine
Dim ObMsg As Object
Dim ObConf As Object
Dim Flds As Object
Dim StrSchema As String
Dim blnRet As Boolean

blnRet = False

If sMailSender = vbNullString Or sMailSenderPassword = vbNullString Then
GoTo EndLine
End If

Set ObMsg = CreateObject("CDO.Message")
Set ObConf = CreateObject("CDO.Configuration")
Set Flds = ObConf.Fields



' send one copy with Google SMTP server (with autentication)
StrSchema = "http://schemas.microsoft.com/cdo/configuration/"
Flds.Item(StrSchema & "sendusing") = 2
Flds.Item(StrSchema & "smtpserver") = "smtp.gmail.com"
Flds.Item(StrSchema & "smtpserverport") = 465
Flds.Item(StrSchema & "smtpauthenticate") = 1
Flds.Item(StrSchema & "sendusername") = sMailSender
Flds.Item(StrSchema & "sendpassword") = sMailSenderPassword
Flds.Item(StrSchema & "smtpusessl") = 1
Flds.Update

With ObMsg
.To = sMailReciever
.From = sMailSender
.Subject = sMailSubject
.HTMLBody = sMailText
.Sender = sMailSender
.Organization = "S.M.B Productions"
.ReplyTo = sMailSender
If sMailAttachFile <> vbNullString Then
.AddAttachment (sMailAttachFile)
End If
Set .Configuration = ObConf
.Send
End With

blnRet = True

EndLine:
Set ObMsg = Nothing
Set ObConf = Nothing
Set Flds = Nothing
SendMail = blnRet
End Function

kiapmc
چهارشنبه 10 اسفند 1390, 17:29 عصر
میدونی این هست و راه خاصی براش نیست تا انجایی که میدونم ولی میتوانید یک plz wait خوشگل بزاری تا 1 جوری این مشکل برطرف بشه

_behnam_
چهارشنبه 10 اسفند 1390, 20:19 عصر
چرا یه کار میشه کرد که برنامه هنگ نکنه، اما یکم پیچیده میشه
استفاده از وینسوک است،

Mr'Jamshidy
پنج شنبه 11 اسفند 1390, 00:36 صبح
البته یک کار دیگه هم میشه کرد

استفاده از یک برنامه کمکی که اطلاعات مورد نظر رو به اون ارسال کنی تا کار ارسال رو اون برات انجام بده و بسته بشه بعد هر موقع بسته شده میفهمی که کارش تموم شده

amirabdi
شنبه 12 فروردین 1391, 14:04 عصر
با سلام اگه میشه به منم بگید تو این کد بالا کجا باید ایمیلم رو بنویسم؟

MohammadGh2011
شنبه 12 فروردین 1391, 21:25 عصر
با سلام اگه میشه به منم بگید تو این کد بالا کجا باید ایمیلم رو بنویسم؟
سلام عليکم
من در لينک زير جوابتون رو دادم:
http://barnamenevis.org/showthread.php?328625-%D8%B3%D9%88%D8%B1%D8%B3-%DA%A9%D8%AF-%D8%A7%D8%B1%D8%B3%D8%A7%D9%84-%D8%A7%DB%8C%D9%85%DB%8C%D9%84-%D8%A8%D9%87-%D9%88%D8%B3%DB%8C%D9%84%D9%87-%DB%8C-%D9%88%DB%8C%DA%98%D9%88%D8%A7%D9%84-%D8%A8%DB%8C%D8%B3%DB%8C%DA%A9-6&p=1475047&viewfull=1#post1475047

موفق باشيد

xrezax
سه شنبه 16 خرداد 1391, 12:20 عصر
راهی داره که ایمیل گه یک بار فرستادیم برنامه دیگه یوزر و پسوردو واسه جیمیل ارسال نکنه و آماده ارسال ایمیل بعدی باشه ؟؟ که سرعتش بره بالا ؟؟
یعنی برنامه فقط یکبار لاگین کنه.

arenaw
سه شنبه 16 خرداد 1391, 19:17 عصر
من اگه بودم قبل اجرای کدها یه فرمی شبیه به همین فرم تو همین مختصات رو لود میکردم و فرم اصلی رو hide میکردم.
بعد از اجرا هم دوباره اونو آنلودو فرم اصلی رو show میکردم