تحديث التعليمات البرمجية القديمة من System.Web.Mail إلى System.Net.Mail في Visual Studio 2005:مشاكل في إرسال البريد الإلكتروني
-
09-06-2019 - |
سؤال
يعمل استخدام نظام System.Web.Mail القديم لإرسال البريد الإلكتروني بشكل جيد، وإليك مقتطف الشفرة:
Public Shared Sub send(ByVal recipent As String, ByVal from As String, ByVal subject As String, ByVal body As String)
Try
Dim Message As System.Web.Mail.MailMessage = New System.Web.Mail.MailMessage
Message.To = recipent
Message.From = from
Message.Subject = subject
Message.Body = body
Message.BodyFormat = MailFormat.Html
Try
SmtpMail.SmtpServer = MAIL_SERVER
SmtpMail.Send(Message)
Catch ehttp As System.Web.HttpException
critical_error("Email sending failed, reason: " + ehttp.ToString)
End Try
Catch e As System.Exception
critical_error(e, "send() in Util_Email")
End Try
End Sub
وهنا النسخة المحدثة:
Dim mailMessage As New System.Net.Mail.MailMessage()
mailMessage.From = New System.Net.Mail.MailAddress(from)
mailMessage.To.Add(New System.Net.Mail.MailAddress(recipent))
mailMessage.Subject = subject
mailMessage.Body = body
mailMessage.IsBodyHtml = True
mailMessage.Priority = System.Net.Mail.MailPriority.Normal
Try
Dim smtp As New Net.Mail.SmtpClient(MAIL_SERVER)
smtp.Send(mailMessage)
Catch ex As Exception
MsgBox(ex.ToString)
End Try
لقد جربت العديد من الأشكال المختلفة ويبدو أن لا شيء يعمل، لدي شعور بأن الأمر قد يكون له علاقة بـ SmtpClient، هل هناك شيء تغير في الكود الأساسي بين هذه الإصدارات؟
لا توجد استثناءات يتم إرجاعها.
المحلول
لقد اختبرت الكود الخاص بك وتم إرسال بريدي بنجاح.بافتراض أنك تستخدم نفس المعلمات للتعليمات البرمجية القديمة، أود أن أقترح أن خادم البريد الخاص بك (MAIL_SERVER) يقبل الرسالة وأن هناك تأخيرًا في المعالجة أو يعتبرها بريدًا عشوائيًا ويتجاهلها.
أود أن أقترح إرسال رسالة باستخدام طريقة ثالثة (telnet إذا كنت تشعر بالشجاعة) ومعرفة ما إذا كان ذلك ناجحًا.
يحرر:ألاحظ (من إجابتك اللاحقة) أن تحديد المنفذ ساعد إلى حد ما.لم تقل ما إذا كنت تستخدم المنفذ 25 (SMTP) أو المنفذ 587 (الإرسال) أو أي شيء آخر.إذا كنت لا تفعل ذلك بالفعل، فإن استخدام منفذ الاستلام قد يساعد أيضًا في حل مشكلتك.
نصائح أخرى
تستخدم مكتبة System.Net.Mail ملفات التكوين لتخزين الإعدادات لذا قد تحتاج فقط إلى إضافة قسم مثل هذا
<system.net>
<mailSettings>
<smtp from="test@foo.com">
<network host="smtpserver1" port="25" userName="username" password="secret" defaultCredentials="true" />
</smtp>
</mailSettings>
</system.net>
هل حاولت إضافة
smtp.UseDefaultCredentials = True
قبل الإرسال؟
وماذا يحدث أيضًا إذا حاولت تغيير:
mailMessage.From = New System.Net.Mail.MailAddress(from)
mailMessage.To.Add(New System.Net.Mail.MailAddress(recipent))
الى هذا:
mailMessage.From = New System.Net.Mail.MailAddress(from,recipent)
-- كيفن فيرتشايلد
هل تقوم بتعيين بيانات الاعتماد للبريد الإلكتروني؟
smtp.Credentials = New Net.NetworkCredential("xyz@gmail.com", "password")
لقد حدث هذا الخطأ، لكنني أعتقد أنه ألقى استثناءً.
كل ما تفعله صحيح.إليك الأشياء التي أود التحقق منها.
- تأكد مرة أخرى من أن خدمة SMTP في IIS تعمل بشكل صحيح.
- تأكد من عدم وضع علامة عليها كرسالة غير مرغوب فيها.
عادةً ما يكون هؤلاء هم أكبر المذنبين عندما نواجه مشكلات في إرسال البريد الإلكتروني.
أيضًا، لاحظت للتو أنك تقوم بـ MsgBox(ex.Message).أعتقد أنهم منعوا MessengerBox من العمل مع asp.net في حزمة الخدمة، لذلك قد يكون هناك خطأ، ربما لا تعرفه.تحقق من سجل الأحداث الخاص بك.
أضفت رقم المنفذ لخادم البريد وبدأ العمل بشكل متقطع، يبدو أن هناك مشكلة في الخادم وتأخير في إرسال الرسائل.شكرا لإجاباتك، كانت كلها مفيدة!