هذا الكتيب يشرح بروتوكول SMTP
مع التطبيق العملي على إرسال البريد
بكود فيجيوال بيزيك دوت نت
إعداد:
محمد حمدي غانم
الكتيب مرفق
هذا الكتيب يشرح بروتوكول SMTP
مع التطبيق العملي على إرسال البريد
بكود فيجيوال بيزيك دوت نت
إعداد:
محمد حمدي غانم
الكتيب مرفق
ملاحظة أخي
يجب تثبيت SMTP Server
عن طريق قرص الويندوز
أو نقوم بتثبيت سيرفر IIS بالكامل
مع شكري
طيب و إلي عمل smtp server يعمل أيه لازم يثبت ال Ms smtp server برضه :P
هو فيه من حق عاوز أعرفه أزي نتحكم في الوقت بتاع الأرسال في ال MS SMTP SERVER ???
السلام عليكم
ارسال رسائل عن طريق ال smtp بسيط جدا و هو ان نعرف متغير من نوع system.web.smtpserver
ثم نكتب :
dim smtp as smtpserver smtp.smtpserver.insert(0,"127.0.0.1") smtp.send(message)
و اعتقد كلكم يعرف هذه الطريقة لكن هناك طريقة عن طريق ال tcpclient اقوم بالاتصال بسيرفر ال smtp و اقوم بارسال معلومة معلومة عن الرسالة و لكن المشكلة يعرض لي رسالة خط و هي كالتالي :
the requested name is valid and was found in the database, but it doesn't have the correct associated data being resolved for
و هذه الرسالة ايضا في ايميل الpop3 تظهر ايضا فارجوكم توضيح هذه المشكلة
شرح مفصل لل ftp و معالجة الملفات مع سيرفر ال ftp
my E-mail : ihsanfuzzy@yahoo.com
maayah:
ليس شرطا.. الكود يستخدم بروتوكولات الالتصال لتطبييق SMTP خطوة خطوة، ولا يستخدم السيرفر الافتراضي الخاص بالـ IIS.
تحياتي
R0OT
الكتاب يشرح البروتوكول نفسه بالتفصيل، وليس استخدام أداة جاهزة تنفذه.. هذا مهم لمن يريد أن يقطع شوطا في برمجة الشبكات، وليس مجرد أن يرسل بريدا. بأداة جاهزة.
ihsan_ahmed
الرسالة التي ذكرتها كانت تظهر لي عند استخدام IP خاطئ
أرجو أن تنظر في الكود المرفق في الكتاب، لتتعرف على كيفية الحصول على الـ IP الخاص بالـ SMTP الخاص بهوتميل، حيث يمكنك تعميم الطريقة.
تحياتي
بالنسبة لسرعة ارسال الميل في الثانية ففعلا دي قدرة تختلف من سيرفر لسيرفر و من منتج لاخر و كنت قريت فيها علشان كده حفتي و اقلي فيها
الفكرة كلها قدره المنتج على عمل اكثر thread و كل thread تكون قادرة على ارسال البريد بحد ذاتها تقريبا ال exchange بيعمل 16 بس مش فاكر قريتها فين
الحاجة التانية الي بتأثر في الميل و سرعته هو وجود برنامج لبحث الايميل و ال DNS لانه الايميل كله DNS
Mahmoud Magdy
MVP - Exchange Server. MCITP (Windows Server 2008, Exhcange Server 2010,/2007),CCNP, MCTS(OCS 2007 R2, SCCM 2007)
Tech Lead
Ingazat Information Technology
Follow me on twitter: http://www.twitter.com/_busbar
my blog: http://autodiscover.wordpress.com
Link with me on linkedin: http://www.linkedin.com/profile?viewProfile=&key=71027694
or on experts-exchange.com: http://www.experts-exchange.com/M_1426100.html
busbar أنا قصدي مش كام ميل أنا قصدي ممكن يتبعت بعد 4 : 12 ساعة ده طبعا في حالة أستخدام ال smtp بتاع الويندوز يعني Ms smtp server
السلام عليكم
يا اخوان انا اولا لم استخدم الدالة الجاهزة ثانيا بدل الاي بي يمكنك وضع عنوان الموقع بدون www مثلا بالنسبة للياهو نضع في مكان ال smtpserver التالي (yahoo.com) فقط و بالنسبة لبرنامجي فقد استخدمت الكود التالي :
Sub send()
Try
lstlog.Items.Clear()
Dim smtpserver As New TcpClient()
smtpserver.Connect(txtsmtpserver.Text, 25)
lstlog.Items.Add("connection established with smtpserver.com")
Dim writestream As NetworkStream = smtpserver.GetStream
Dim readstream As StreamReader = New StreamReader(smtpserver.GetStream)
'عندما نتصل بالسسيرفر يرد لنا جوابا بالنجاح او فشل الاتصال و نحن نقرا الجواب و نخزنه في المتغير الاتي
s = readstream.ReadLine
Dim sendstring As String = "HELO" & "yahoo.com"
Dim dataToSend() As Byte = Encoding.ASCII.GetBytes(sendstring)
'الان نضيف الجواب لل لست بوكس
lstlog.Items.Add(s)
'الان نرسل ايميلي الى السيرفر
sendstring = "MAIL FROM: " & "<" & txtfrom.Text & ">\r\n"
dataToSend = Encoding.ASCII.GetBytes(sendstring)
writestream.Write(dataToSend, 0, dataToSend.Length)
'الان نتلقى الجواب و نضيفه لل لستبوكس
s = readstream.ReadLine
lstlog.Items.Add(s)
'الان نرسل ايميل المرسل اليه الى السيرفر
sendstring = "RCPT TO: " & "<" & txtto.Text & ">\r\n"
dataToSend = Encoding.ASCII.GetBytes(sendstring)
writestream.Write(dataToSend, 0, dataToSend.Length)
'الان نتلقى الجواب و نضيفه لل لستبوكس
s = readstream.ReadLine
lstlog.Items.Add(s)
'send data
sendstring = "DATA " & "\r\n"
dataToSend = Encoding.ASCII.GetBytes(sendstring)
writestream.Write(dataToSend, 0, dataToSend.Length)
'الان نتلقى الجواب و نضيفه لل لستبوكس
s = readstream.ReadLine
lstlog.Items.Add(s)
'send message subject and text
sendstring = "SUBJECT: " & txtsubject.Text & "\r\n" & txtmsg.Text & "\r\n" & "." & "\r\n"
dataToSend = Encoding.ASCII.GetBytes(sendstring)
writestream.Write(dataToSend, 0, dataToSend.Length)
'الان نتلقى الجواب و نضيفه لل لستبوكس
s = readstream.ReadLine
lstlog.Items.Add(s)
'send disconnect message to server
sendstring = "QUIT " & "\r\n"
dataToSend = Encoding.ASCII.GetBytes(sendstring)
writestream.Write(dataToSend, 0, dataToSend.Length)
'الان نتلقى الجواب و نضيفه لل لستبوكس
s = readstream.ReadLine
lstlog.Items.Add(s)
'now close all open resource
writestream.Close()
readstream.Close()
smtpserver.Close()
Catch exc As Exception
MsgBox(Err.Description)
End Try
thr.Abort()
End Sub
Private Sub bttnconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bttnconnect.Click
Try
oPOP.connectPOP(txtserver.Text, txtuser.Text, txtpass.Text)
Catch exc As Exception
MsgBox(Err.Description)
txterror.Text = txterror.Text & oPOP.exc & vbCrLf
End Try
End Sub
Private Sub bttndisconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bttndisconnect.Click
Try
oPOP.DisconnectPOP()
Catch exc As Exception
MsgBox(Err.Description)
txterror.Text = txterror.Text & oPOP.exc & vbCrLf
End Try
End Sub
و برنامجي مرفق
و مشكلتي الان يكتب لي unable to read data
جربوه و ارجو اجابتي
اما بالنسبة للاي بي فيمكنني ان احصل عليه لاي موقع كالاتي:
Dim ip As System.Net.IPHostEntry
ip = System.Net.Dns.GetHostByName("www.yahoo.com)شرح مفصل لل ftp و معالجة الملفات مع سيرفر ال ftp
my E-mail : ihsanfuzzy@yahoo.com
شكرا اخي علي الكود
لا حول و لا قوة الا بالله العلي العظيم
مشروع المخازن و حسابات العملاء و الموردين مع التحليل بطريقة احترافية
السلام عليكم
حقيقة الكود السابق هو اصله من لغة ال c#.net و قد ترجمته الى vb.net و لكن اعتقد انه غير دقيق واعتقد الكود التالي اضبط و ادق
Public Class Class1
Dim _SMTPserverIP As String
Private Shared _errmsg As String = ""
Private Shared _ServerResponse As String = ""
Shared _Identity As String = ""
Shared _MailFrom As String = ""
Shared _MailTO As String = ""
Shared _Subject As String = ""
Shared _MailData As String = ""
Public Shared WriteOnly Property subject() As String
Set(ByVal Value As String)
_Subject = Value
End Set
End Property
Public Shared WriteOnly Property Identity() As String
Set(ByVal Value As String)
_Identity = Value
End Set
End Property
Public Shared WriteOnly Property MailFrom() As String
Set(ByVal Value As String)
_MailFrom = Value
End Set
End Property
Public Shared WriteOnly Property MailTo() As String
Set(ByVal Value As String)
_MailTO = Value
End Set
End Property
Public Shared WriteOnly Property MailData() As String
Set(ByVal Value As String)
_maildata = Value
End Set
End Property
Public Property SMTPserverIP() As String
Get
Return _SMTPserverIP
End Get
Set(ByVal Value As String)
_SMTPserverIP = Value
End Set
End Property
Public Shared ReadOnly Property ErrMsg() As String
Get
Return _errmsg
End Get
End Property
Public Shared ReadOnly Property ServerResponse() As String
Get
Return _ServerResponse
End Get
End Property
Public Shared SMTPserver As String
Dim connectionok As Boolean
Dim responsecode() As String = {"220", "250", "354", "221"}
Public Shared Waiting As Integer = 30
Dim tcp As SMTPclient
Dim stream As System.Net.Sockets.NetworkStream
Public Sub SendMail()
Try
Dim bytes() As Byte
Dim ServerResponse As String
connectionok = False
tcp = New SMTPclient()
tcp.NoDelay = True
tcp.SendTimeout = Waiting * 1000
tcp.ReceiveTimeout = Waiting * 1000
tcp.SendBufferSize = 1042
tcp.Connect(_SMTPserverIP, 25)
connectionok = True
ServerResponse = tcp.GetServerResponse
ServerResponse = stream.Read(bytes, 0, bytes.Length)
If ServerResponse.StartsWith("220") = False Then
tcp.Close()
Return
End If
If SMTP(String.Concat("HELO", vbCrLf), False) = False Then
tcp.Close()
Return
End If
If SMTP(String.Concat("MAIL FROM:", _MailFrom, vbCrLf), False) = False Then
tcp.Close()
Return
End If
If SMTP(String.Concat("RCPT TO:", _MailTO, vbCrLf), True) = False Then
tcp.Close()
Return
End If
If SMTP(String.Concat("DATA:", vbCrLf), False) = False Then
tcp.Close()
Return
End If
Dim StrTemp As String = ""
If _Identity = "" Then
StrTemp = ""
Else
StrTemp = String.Concat("FROM:", _Identity, vbCrLf)
End If
StrTemp = String.Concat(StrTemp, "TO:", _MailTO, vbCrLf)
StrTemp = String.Concat(StrTemp, "SUBJECT:", _Subject, vbCrLf)
StrTemp = String.Concat(StrTemp, _MailData, vbCrLf)
StrTemp = String.Concat(StrTemp, ".", vbCrLf)
If SMTP(StrTemp, False) = False Then
tcp.Close()
Return
End If
Catch SE As System.Net.Sockets.SocketException
_errmsg = SE.Message
tcp.Close()
Catch E As System.Exception
_errmsg = E.Message
tcp.Close()
End Try
End Sub
Function SMTP(ByRef command As String, ByVal check As Boolean) As Boolean
Dim ServerResponse As String
tcp.sendcommandtoserver(command)
ServerResponse = tcp.getserverresponse
If check Then
If ServerResponse.StartsWith("550") OrElse ServerResponse.StartsWith("553") Then
Return True
ElseIf ServerResponse.StartsWith("250" + _MailFrom) Then
Return True
Else : Return False
End If
Return True
End If
Dim a As Integer
For a = 0 To responsecode.Length - 1
If ServerResponse.StartsWith(responsecode(a)) Then
If check = False OrElse responsecode(a) <> "221" Then
Exit For
End If
End If
Next
If a = responsecode.Length Then
Return False
End If
Return True
End Function
Public Class SMTPclient
Inherits System.Net.Sockets.TcpClient
Public Property isConnected() As Boolean
Get
Return active
End Get
Set(ByVal Value As Boolean)
active = Value
End Set
End Property
Public Sub SendCommandToServer(ByVal command As String)
Dim ns As System.Net.Sockets.NetworkStream = Me.GetStream
Dim WriteBuffer() As Byte
WriteBuffer = System.Text.Encoding.Default.GetBytes(command)
ns.Write(WriteBuffer, 0, WriteBuffer.Length)
End Sub
Public Function GetServerResponse() As String
Dim streamsize As Integer, x As String
Dim ReadBuffer(1023) As Byte
Dim ns As System.Net.Sockets.NetworkStream = Me.GetStream
streamsize = ns.Read(ReadBuffer, 0, ReadBuffer.Length)
x = System.Text.Encoding.Default.GetString(ReadBuffer)
Return x
End Function
End Class
End Class
اما استعمالها فكما يلي :
Dim A As New Class1() A.MailFrom = txtfrom.Text A.MailTo = txtto.Text A.subject = txtsubject.Text A.MailData = txtmsg.Text Dim ip As System.Net.IPHostEntry ip = Dns.GetHostByName(txtsmtpserver.Text) A.SMTPserverIP = ip.AddressList(0).ToString A.SendMail()
شرح مفصل لل ftp و معالجة الملفات مع سيرفر ال ftp
my E-mail : ihsanfuzzy@yahoo.com
يا اخوان رغم ان الكود لارسال ايميل موجود لكن ما لا نعرفه هو سيرفر الياهو .. فارجو ممن يعرفه ان يكتبه لنا
شرح مفصل لل ftp و معالجة الملفات مع سيرفر ال ftp
my E-mail : ihsanfuzzy@yahoo.com
باستخدام بروتوكول SMTP وبروتوكولات الاتصال والـ Thgreading كنت كتبت برنامجا يرسل 2 مليون بريد في الساعة!
لكن بعد فترة من استخدامه أغلق هوتميل الطريق أمامي، وأصبح لا يوصل الرسائل إلى أصحابها، فصرت أستخدم البرنامج للتحقق من صحة البريد وليس للإرسال
بالنسبة لياهوو، فهو يطلب اسم المستخدم وكلمة المرور، لهذا لم أستطع الإرسال عبره.
شكرا لمن ساهموا في إثراء هذا الموضوع.
تحياتي
لاباس اذا طلب اسم المستخدم و كلمة السر ولكن ماذا اكتب في الحقل smtpserver بالنسبة للياهو؟؟
شرح مفصل لل ftp و معالجة الملفات مع سيرفر ال ftp
my E-mail : ihsanfuzzy@yahoo.com
الياهو لا يقبل أستخدام ال smtp أو pop3 سوي للمشتركين فيه يعني عشرين دولار تقريبا سنويا :( و الهوت ميل فعل مثله
أذا ما هو الحل ؟؟؟
gmail و لكنها حتي الأن لم تفتح رسميا :( و المشكلة الأكبر أنها تتعامل مع البرتكولات من منطق ال SSl :(
عمرو عيسي
طيب انا مثلا عملت برنامج و اريد ان يرسل لي تقرير بين فترة واخرى كرسالة الى الايميل الا توجد طريقة لارسال تقرير الى ايميلي .. غير معقول لاتوجد طريقة بهذه اللغة الكبيرة
شرح مفصل لل ftp و معالجة الملفات مع سيرفر ال ftp
my E-mail : ihsanfuzzy@yahoo.com
للحوصل على خاد البريد على ياهوو:
Dim hostInfo As IPHostEntry, IP as String
hostInfo = Dns.GetHostByName("mta1.grp.scd.yahoo.com")
IP= hostInfo.AddressList(0).ToString
ihsan_ahmed:
المشكلة ليست في لغة البرمجة.. المشكلة في خادم البريد، فياهوو وهوتميل أغلقوا الطريق علينا.. لكن لو لديك خدمة بريد على موقع خاص بك، فيمكنك الإرسال عبره.. نحن نرسل البريد من موقعنا أدباء دوت كوم www.odbaa.com حيث نرسل باسم البريد odbaa@odbaa.com برمجيا بدون مشاكل، علما باننا برمجنا الموقع بـ ASP.net
أيوه يا عم dreammaker ;) دعاية في نص الطريق كده ;)
يعني سيرفر الياهو هو mta1.grp.scd.yahoo.com ??
شرح مفصل لل ftp و معالجة الملفات مع سيرفر ال ftp
my E-mail : ihsanfuzzy@yahoo.com
شكرا جزيلا أخي على الموضوع :lol:
هذا الموضوع مغلق.