تحديث التعليمات البرمجية القديمة من System.Web.Mail إلى System.Net.Mail في Visual Studio 2005:مشاكل في إرسال البريد الإلكتروني

StackOverflow https://stackoverflow.com/questions/52321

سؤال

يعمل استخدام نظام 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 (الإرسال) أو أي شيء آخر.إذا كنت لا تفعل ذلك بالفعل، فإن استخدام منفذ الاستلام قد يساعد أيضًا في حل مشكلتك.

ويكيبيديا و rfc4409 لديك مزيد من التفاصيل.

نصائح أخرى

تستخدم مكتبة 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")

لقد حدث هذا الخطأ، لكنني أعتقد أنه ألقى استثناءً.

كل ما تفعله صحيح.إليك الأشياء التي أود التحقق منها.

  1. تأكد مرة أخرى من أن خدمة SMTP في IIS تعمل بشكل صحيح.
  2. تأكد من عدم وضع علامة عليها كرسالة غير مرغوب فيها.

عادةً ما يكون هؤلاء هم أكبر المذنبين عندما نواجه مشكلات في إرسال البريد الإلكتروني.

أيضًا، لاحظت للتو أنك تقوم بـ MsgBox(ex.Message).أعتقد أنهم منعوا MessengerBox من العمل مع asp.net في حزمة الخدمة، لذلك قد يكون هناك خطأ، ربما لا تعرفه.تحقق من سجل الأحداث الخاص بك.

أضفت رقم المنفذ لخادم البريد وبدأ العمل بشكل متقطع، يبدو أن هناك مشكلة في الخادم وتأخير في إرسال الرسائل.شكرا لإجاباتك، كانت كلها مفيدة!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top