الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ارسال email من خلال كود

بدأه strjool في 2 أبريل 2005 · 27 رد · 11,400 مشاهدة · في برمجة الشبكات والتطبيقات الموزعة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اخوتي الاعزاء

لقد طلب مني بناء برنامج احدى الوضائف التي ينبغي ان تتوفر

فيه هي ارسال بريد الكتروني من خلال البرنامج

ودون الاعتماد على الاوتولوك او خدمة البريد الالكتروني التي توفرها

المواقع المشهورة

هل هناك مثل هذه الامكانية وكيف

مع شكري الجزيل

اخوكم strjool

والحمد لله رب العالمين

#2

السلام عليكم

أولاً لابد أن تضيف مرجع Add Reference للحاوية system.web بهذا الشكل

AddSystemWeb.gif

ثم تقوم بإدراج الكائنات التي فيه لتكون متوفرة عند كتابة النصوص البرمجية بهذا الشكل

Imports System.Web.Mail

ثم تقوم بعملية إستنساخ للقالب MailMessage بهذا الشكل

 Dim msg As New MailMessage

ثم مثلاً في الضغط على الزر تضع النصوص البرمجية التالية

 Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click
        Try
            With msg
                .From = txtFrom.Text
                .To = txtTo.Text
                .Subject = txtSubject.Text
                .BodyFormat = MailFormat.Text
                .Body = txtBody.Text
                .Priority = MailPriority.Normal
            End With

            If txtServer.Text <> "" Then
                SmtpMail.SmtpServer = txtServer.Text
            Else
                MsgBox("Please enter a valid SMTP server", MsgBoxStyle.Critical, _
                "SMTP Server Error")
                Exit Sub
            End If
            SmtpMail.SmtpServer = "localhost"
            SmtpMail.Send(msg)
            MessageBox.Show("Message Sent sccessfully")
        Catch ex As Exception
            MessageBox.Show(ex.Message)
            Debug.WriteLine(ex.Message)

        End Try


    End Sub

النصوص البرمجية سهله وواضحة وأسماء عناصر الـ MailMessage تدل على مضامينها

الخطوة الأخيرة و المهمة أن تقوم بتهيئة الـ SMTP بهذا الشكل

أولاً الذهاب إلى الـ IIS عن طريق الـ Adminstrator Tools ثم شاهد الصورة المرفقة

SMTPConfig_2420053440.6954767.gif

والله أعلم

Sending Email in.zip

في المثال يتضح المقال

#3

السلام عليكم

اخي العزيز الغملاسي لقد قمت بكل الخطوات التي اوصيت بها

ولكن واثناء التنفيذ يعترض تاركا هذه الرسالة

The server rejected one or more recipient addresses. The server

response wase : 550 5.7.1 Unable to relay for my@yahoo.com

فما العمل

مع شكري الجزيل ايها الاخ الفاضل لتكلفكم عناء الرد والاهتمام

strjool

#4

السلام عليكم

لا عليك هذه الرسالة تأتي من الـ SmtpMail.SmtpServer وتعني رفض عنوان المستقبل للرسالة

وينتج عن ذلك ربما أنك لم تقوم بتعديل الـ txtTo.Text = "YourEmail@hotmail.com" يجب أن تضع بريدك لتصل إليك

الرسالة أو أنك حددت قيم لا تتوافق مع تركيبة البُرد الإلكترونية مثلاً myEmailHotmail.com

أو الـ txtFrom.Text = "sender@hotmail.com"

لابد أن يكون به بريد إلكتروني صالح Valid Email أو تأكد أن لديك صلاحية بأن ترسل بريد ألكتروني في الوب سيرفر IIS

شاهد الصورة التالية

SMTPpremissionAdded.gif

أو إعطاء صلاحية للـ MailMessage.From ليعول على الـ SMTP Server ولا تخرج عن هذا النطاق والله أعلم

أكتب الرسالة التي ظهرت لك في محركات البحث و ستجد الحلول إن شاء الله .

في المثال يتضح المقال

#5

السلام عليكم

الاخ الغملاسي لقد حاولت انزال الكاونت الخاص بي كما اوصيت

ولقد طلب مني username , password فادخلت له عنوان اليميل وكلمت السر الخاصة به

ولكنه يظهر لي صندوق حوار فيه هذه المسج An object named "DOWNLOAD\myAccount" cannot be found. Check the selected object types and location for accuracy and ensure that you typed the object name correctly, or remove this object from the selection.

ويقترح علي اما تصحيح المضوع او ازالته

فماذا يعني ذالك

ان موضوع ارسال ايميل من خلال كود البرنامج مهم جدا بالنسبة لي

اعتذر عن الالحاح

مشكور ايها الاخ على جهودك معي وتحملك اياي

والحمد لله رب العالمين

#6

السلام عليكم

لا عليك إن شاء الله الأخوة و أنا معك وهي مشكلتنا جميعاً حتى نحلها بإذن الله

فقط أعطني فكرة عن التالي

1 - هل الجهاز شخصي الذي تود إرسال البريد الألكتروني منه أم أنت تعمل على شبكة ؟

2 - ماهي الصلاحية التي تملكها (User - Adminstrator ) ؟

3 - ما هو نظام التشغيل لديك XP or Window 2000 ؟

4 - ما هي النسخة للـ Web Server IIS الذي تملكهُ ؟ 5.0 أو 6.0

5 - هل قمت بتحديث نظام التشغيل لديك للخدمة SP2 اي Window XP Service Pack 2 ?

ملاحظة في الـ Security Tab لا تضع بريدك الإلكتروني و إنما حسابك اسم المستخدم و كلمة المرور ..

أنتظر النتيجة .. بالتوفيق .

في المثال يتضح المقال

#7

السلام عليكم

الاخ الغملاسي

اولا اقدم شكري الجزيل على اهتمامك بمشكلتي

واتمنى ان لا اثقل عليك بالحاحي على الموضع

ياخي العزيز

هذه المعلومات التي سالت عنها

1 - الجهاز يعمل على شبكة(مقهى) ؟

2 - الصلاحية ( Adminstrator )

3 - نظام التشغيل XP

4 - نسخة ال Web Server IIS هو 5.1

5 - نظام التشغيل هوWindow XP Service Pack 2

مالذي تعني ب (ملاحظة في الـ Security Tab لا تضع بريدك الإلكتروني و إنما حسابك اسم المستخدم و كلمة المرور .. )

فما المقصود الحساب واي كلمة مرور واسم مستخدم فالامور مختلطة لدي

مع اعتذاري مرة اخرى

والحمد لله رب العالمين

strjool

#8

السلام عليكم

أتمنى أولاً أنك حليت مشكلة البريد الإلكتروني و أنك لا تحتاج لما سأكتب

وسامحنى على التأخير بسبب الإمتحان وتعرف ما يسبقه من تحضير .

عزيزي أولاً أقصد بحسابك هو الـ Account لكل مستخدم وهو عبارة عن UserName و Password

وهذا معلوم لديك إن شاء الله .

وهنالك كذلك أمر مهم لابد أن تتأكد منه وهو هل الـ SMTP Server يعتمد الوثوقية من الوندز أم لا وهل يقبل أي مستخدم أم لا

وهذا كله تجده في التبويبة Access Tab شاهد الصورة

Authontication.gif

الأمر الثاني وهو إذا كان الـ Web Server IIS ليس على الجهاز الحالي الذي تستخدمه فلابد أن تخول هذا الجهاز

بإستخدام الـ SMTP Server from IIS عن طريق كتابة عنوان جهازك فيه IP Address وهو على الشكل التالي

AccessServer.gif

ثالثاً لابد أن تعطي الإتصال صلاحية إستخدام الـ SMTP Server عن طريق الـ FireWall بالشكل التالي

FireWall1.gif

أخيراً يحفظك الله إذا تم إرسال البريد بنجاح ولم تصلك الرسالة

سيحدث هذا إذا كنت عملت تمكين Enabled للـ junk mail في الياهو أو الهوتميل

ولحل المشكلة قم بتمكين المرسل من إستقبال رسائله , التعليمات تجدها في مزودات خدمة البُرد الإلكترونية

والله يوفق الجميع لما فيه الخير و البركة .. السلام عليكم

في المثال يتضح المقال

#9

لاحظت أن هذه الطريقة تعمل على dotNet 1.0/1.1 فقط، ولا تعمل على dotNet 2.0

اقتباس
ثم تقوم بإدراج الكائنات التي فيه لتكون متوفرة عند كتابة النصوص البرمجية بهذا الشكل

Imports System.Web.Mail

ثم تقوم بعملية إستنساخ للقالب MailMessage بهذا الشكل

Dim msg As New MailMessage

ثم مثلاً في الضغط على الزر تضع النصوص البرمجية التالية

Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click

Try

With msg

.From = txtFrom.Text

.To = txtTo.Text

.Subject = txtSubject.Text

.BodyFormat = MailFormat.Text

.Body = txtBody.Text

.Priority = MailPriority.Normal

End With

If txtServer.Text <> "" Then

SmtpMail.SmtpServer = txtServer.Text

Else

MsgBox("Please enter a valid SMTP server", MsgBoxStyle.Critical, "SMTP Server Error")

Exit Sub

End If

SmtpMail.SmtpServer = "localhost"

SmtpMail.Send(msg)

MessageBox.Show("Message Sent sccessfully")

Catch ex As Exception

MessageBox.Show(ex.Message)

Debug.WriteLine(ex.Message)

End Try

End Sub

وذلك لأنSystem.Web.Mail لم يعد مضمنا في DotNet 2.0

كلاسات ودوال لم تعد مضمنة في DotNet 2.0 وبدائلها

بالنسبة للكود أعلاه فهذا هو الكود البديل:

في أعلى الملف ضع السطر التالي:

Imports System.Net.Mail

كود إرسال الإيميل:

Dim myEmailMessage As New MailMessage()

		Dim fromAddress As New MailAddress("some_email@some_domain.net")
		Dim toAddress As New MailAddress("another_email@another_domain.com")

		Try
			With myEmailMessage
				.From = fromAddress
				.To.Add(toAddress)

				.Subject = "Trying sending emails using System.Net.Mail"
				.Body = "This email is just for trying sending emails using System.Net.Mail"
				.Priority = MailPriority.Normal

				Dim smtp As New SmtpClient()
				smtp.Host = "localhost"

				smtp.Send(myEmailMessage)

				MsgBox("Email sent successfully", MsgBoxStyle.Information)

			End With

		Catch ex As Exception
			MsgBox(ex.Message, MsgBoxStyle.Exclamation)
		End Try

لاحظ السطر :

				.To.Add(toAddress)

يمكن بهذا السطر إرسال الإيميل لأكثر من جهة، وبنفس الطريقة عبر CC وBCC.

ولإضافة attachement ملف word مثلا:

 Dim filePath As String="C:\document.doc"
.Attachments.Add(New Attachment(filePath))

ويوضع في أي مكان قبل سطر إرسال الإيميل.

فكر بطريقة أخرى

#10

يعني انا مضطر لأن انزل IIS لكل عميل يستخدم برنامجي؟؟

هل هناك حل للاستغناء عنه؟

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#11

هل من المعقول علشان نرسل رساله ايميل نحول الجهاز ل server ؟

انا شايف انها طريقه زى قلتها مع احترامى .

اخى الكريم هناك طرق عديده و ابسط من تلك الطريقه بل و اسرع فى الارسال فقط حاول البحث فسوف تجد العديد من الطرق

انا عن نفسى دائما بستخدم الاتصال بملفات اكواد ال php لكى ارسل ايميل من خلال برنامجى و تعتبر طريقه مضمونه عن غيرها و ايضا سرعه فى الارسال

لو تريد استخدام مثل تلك الامثال قولى و انا اضعلك مثال .

#12

تمااااااااااااااااااااام جزاكم الله خير

#13

افدنا بارك الله فيك

اذا فيه طريقة افضل

تم تعديل هذه المشاركة بواسطة ابوطلال في 23 أغسطس 2006 في 23:22

#14

السلام عليكم ورحمة الله وبركاته

مع أني احب الفيجوال بيسك دوت نيت الا في مجال أرسال بريد والكومنكيشن تعتبر صعبة نوعاً ما ومعقدة

يعني لي يومين احاول اخذ قيم من السيريال بورت بإستخدام serialport الكنترول بشكل مصفوفة بايتات مو عارف !

انصح بالنسبه لإرسال بريد وضع كود PHP ونداء الصفحة

لأنه سهل جداً وفعّال

اطيب تحيه للكل

#15
حــ@ـــد كتب:
انصح بالنسبه لإرسال بريد وضع كود PHP ونداء الصفحة لأنه سهل جداً وفعّال

هل تقصد نداء الصفحة هكذا:

dim pageToCall as string
pageToCall="http://www.mysite.com/sendemail.php?from=someone@somewhere.com&To=somebody@someplace.com"
pageToCall&="&title=someTitle&body=MessageBody"

System.Diagnostics.Process.Start(pageToCall)

لكن كيف سيكون إرسال الattachements بهذه الطريقة؟

Romantic_touch كتب:
يعني انا مضطر لأن انزل IIS لكل عميل يستخدم برنامجي؟؟

هل هناك حل للاستغناء عنه؟

هناك حل آخر باستعمال رقم IP أو اسم SMTP server بدلا من localhost كSMTP Host في هذا السطر:

smtp.Host = "localhost"

فكر بطريقة أخرى

#16
walcom كتب:

هل تقصد نداء الصفحة هكذا:

dim pageToCall as string
pageToCall="http://www.mysite.com/sendemail.php?from=someone@somewhere.com&To=somebody@someplace.com"
pageToCall&="&title=someTitle&body=MessageBody"

System.Diagnostics.Process.Start(pageToCall)

لكن كيف سيكون إرسال الattachements بهذه الطريقة؟

السلام عليكم

System.Diagnostics.Process.Start(pageToCall)

اعتقد بأنه يكفي هذا الكود مجرد نداء للصفحة

بالنسبة لتوابع البريد يكون كود PHP اذا تاخذها من باراميتر الصفحات او تخزن الرساله و رابط الattachements في ملف وتناديه من ال PHP مباشرة

لكن هل يتوجب رفع صفحة PHP على الانترنت ام IIS المحلي يكفي لتمكين PHP من ارسال الرساله عبر الانترنت ؟

#17
اقتباس
بالنسبة لتوابع البريد يكون كود PHP اذا تاخذها من باراميتر الصفحات او تخزن الرساله و رابط الattachements في ملف وتناديه من ال PHP مباشرة

أبدا، هذا لا يكفي

إذا كنت سترسل الإيميل من صفحة مرفوعة على موقع فلابد من رفع الattachement إلى الموقع.

اقتباس
لكن هل يتوجب رفع صفحة PHP على الانترنت ام IIS المحلي يكفي لتمكين PHP من ارسال الرساله عبر الانترنت ؟

بالتأكيد ستحتاج لرفع صفحة الPHP على الانترنت طالما أنك لاتريد تنزيل IIS وSMTP على الأجهزة، وفي حال استعمال IIS المحلي لابد من تأكد إمكانية استعمال PHP للSMTP الخاص بIIS.

:^)

فكر بطريقة أخرى

#18
walcom كتب:

أبدا، هذا لا يكفي

إذا كنت سترسل الإيميل من صفحة مرفوعة على موقع فلابد من رفع الattachement إلى الموقع.

بالتأكيد ستحتاج لرفع صفحة الPHP على الانترنت طالما أنك لاتريد تنزيل IIS وSMTP على الأجهزة، وفي حال استعمال IIS المحلي لابد من تأكد إمكانية استعمال PHP للSMTP الخاص بIIS.

:^)

طيب بما أن الرساله ستكون مهمه الى هذا الحد حيث سيكون فيها اتاشمنت ما المشكلة من تثبيت ISS ووضع ملف PHP في الجهاز المحلي و مناداته عن طريق الدوت نيت

لا أعتقد بأنه هنالك هذه الأهمية الكبرى في الأتاشمنت بحد ذاته

ولكن الشئ المحير أن الدوت نيت ذات امكانيه هائلة جداً الا في هذا المجال لا أعرف ما سبب التعقيد في ذلك ؟

طيب سؤال يا أخون !

لماذا لا تحاولوا في أستخدام دوال ال Outlock في الدوت نيت ؟

اطيب تحيه لكم

#19
اقتباس
لا أعتقد بأنه هنالك هذه الأهمية الكبرى في الأتاشمنت بحد ذاته

بالعكس، أحيانا يكون مضمون الإيميل في الأتاشمنت، يعني الأتاشمنت أهم من نص الإيميل نفسه ;)

اقتباس
لماذا لا تحاولوا في أستخدام دوال ال Outlock في الدوت نيت ؟

جاري دراسة الموضوع. :^)

فكر بطريقة أخرى

#20

السلام عليكم ورحمة الله وبركاته

بحث عن كيفية استخدام Outlock في الدوت نيت

ووجدت كود ولكن بـ C#

بمعرفتي البسيطه بلغة السي حولت الكود للدوت نيت لأن ليس هنالك فرق كبير

لكن الكود لم تتم تجربته لضيق الوقت

حتى المثال لم يكن فيه عن الأتاشمنت ولكني اضف سطر ان شاء الله يكون فعال واعتقد انه سيكون كذلك

Imports System.Reflection

Public Class Form1

	Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
		Dim oApp As New Outlook.Application
		Dim oNS As Outlook.NameSpace = oApp.GetNamespace("mapi")

		oNS.Logon(Missing.Value, Missing.Value, True, True)

		Dim oMsg As Outlook.MailItem = CType(oApp.CreateItem(Outlook.OlItemType.olMailItem), Outlook.MailItem)

		oMsg.Subject = "Send Using OOM in VB.net"
		oMsg.Attachments.Add("c:")

		Dim sHtml As String
		sHtml = "<HTML>\n" & _
				"<HEAD>\n" & _
				"<TITLE>Sample GIF</TITLE>\n" & _
				"</HEAD>\n" & _
				"<BODY><P>\n" & _
				"<h1><Font Color=Green>Inline graphics</Font></h1></P>\n" & _
				"</BODY>\n" & _
				"</HTML>"

		oMsg.HTMLBody = sHtml
		Dim oRecips As Outlook.Recipients = CType(oMsg.Recipients, Outlook.Recipients)
		Dim oRecip As Outlook.Recipient = CType(oRecips.Add("doctor_maias@yahoo.com"), Outlook.Recipient)
		oRecip.Resolve()
		oMsg.Send()
		oNS.Logoff()

		oRecip = Nothing
		oRecips = Nothing
		oMsg = Nothing
		oNS = Nothing
		oApp = Nothing

	End Sub

End Class

طبعا لا بد من اضافة reference للأوت لوك

في tab COM

Microsoft outlock

واخبروني عن تجربة هذا الكود

اطيب تحيه لكم

#21

السلام عليكم ورحمة الله وبركاته

عندي مشكلة في ارسال بريد الكتروني مع اني قمت بتعديل

على خصائص Server IIS كما في الصور المرفقة.

لكن المشكلة هي انه يتم الارسال بنجاح لكن الرسالة لا تصل

حتى لو وضعت اسم للـ SMTP خطأ يعطي انه ارسلة الرسالة

ولكن الرسالة لا تصل بل تذهب الى المجلد

C:\Inetpub\mailroot\Queue

ما المشكلة ما الحل مع اني ودون مبالغة ابحث عن طريقة

ارسال بريد الكتروني بنجاح لي اكثر من اربع سنوات ولم

اجد حل.

وتكملة سؤالي ايهما افضل استخدام مكتبة system.web لارسال

بريد الكتروني او استخدام مكتبة system.net وما الفرق بينهما.

مع شكري للجميع...

Send_Email_IIS_Server.zip

#22

نفس مشكلة maayah

يتم الارسال بنجاح لكن عند فتح بريدي لا اجد رسائل

مع العلم اني استخدم نفس بريدي على الهوتميل كمرسل ومستقبل

موضوع مهم ورائع نرجو الافادة عن المشكلة

وشكرا

#23

راجع : برنامج ارسال بريد الكترونى مباشرتاً بالمرفقات والصور

تم تعديل هذه المشاركة بواسطة Eng. Usama El-Mokadem في 21 نوفمبر 2007 في 13:10

Eng. Usama El-Mokadem

Nothing is impossible, the word impossible itself says that: I M - Possible

#24

السلام عليكم ورحمة الله وبركاتة:

بصراحة انا مش فاهمة اشي لكن بقدر اسال سؤال وياريت اتجاوبوني عليه سواء كان اله علاقة بالموضوع اولا

سؤالي كيف بقدر ارفض مسج على ايميلي اذا كان subjectمابدي اياه

يعني مثلا اذا كان subject 1010بقبل المسج وغير هيك مابقبلها

ومشكورين

اللهم صلي وسلم وبارك على سيدنا اشرف خلقك محمدا صلى الله عليه وآله وسلم تسليما كثيرا

post-108028-1175910337_thumb.gif

#25

شكراً لك يـ الشهاب الحارق

وبارك الله فيك

تم تعديل هذه المشاركة بواسطة روح الفيجوال بيسك نت في 8 يوليو 2007 في 17:45

if You.needhelp = true then

msgbox ("Never Ever Ask dam Question  Before Searching in google")

Else 

msgbox ("You are Doing Good")

End if

مواضيع مشابهة