كيف يمكنك تكوين إعدادات البريد الإلكتروني في CrashRpt لإرسال ملف تفريغ التعطل؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

بعد القراءة هذه المناقشة و هذه المناقشة حول استخدام CrashRpt لإنشاء ملف تفريغ الأعطال وإرساله بالبريد الإلكتروني إلى المطورين، فقد واجهت صعوبة في العثور على أي تعليمات/برامج تعليمية لتكوين إعدادات البريد الإلكتروني التي تستخدمها المكتبة لإرسال البريد الإلكتروني.

عند استدعاء وظيفة install() لتهيئة CrashRpt، فإنك تحدد عنوان البريد الإلكتروني الذي تريد إرسال تفريغ التعطل إليه، ولكن كيف تعرف مكتبة CrashPrt كيفية إرسال البريد الإلكتروني إلى هذا العنوان؟ألن يتعين على المكتبة معرفة إعدادات عميل البريد الإلكتروني لكل مستخدم على حدة؟

عندما يحدث عطل فادح في الكود الخاص بي، ينبثق مربع الحوار CrashRpt وعندما أقوم بإدخال عنوان بريدي الإلكتروني والنقر فوق زر الإرسال، فإنه يأخذني إلى مربع الحوار "حفظ الملف" حيث يمكنني حفظ الحزمة المضغوطة والحساب المحدد في وظيفة التثبيت () لا يتلقى بريدًا إلكترونيًا أبدًا.

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

هل كانت مفيدة؟

المحلول

ما يفعله CrashRpt لإرسال البريد الإلكتروني:

يستخدم نظام البريد الإلكتروني MAPI ببساطة لإرسال بريدك الإلكتروني.والذي سيحاول استخدام عميل البريد الافتراضي الخاص بك إذا كان لديك واحدًا، وإذا كان يدعم MAPI.قم بإلقاء نظرة على MailMsg.cpp للحصول على التفاصيل.

خبرة شخصية:

في استخدام شركتي لـ CrashRpt، قمنا بتعديله قليلاً للاتصال بخدمة ويب أنشأناها والتي ترسل تقرير الأعطال.لذلك قمنا بحذف رمز البريد الإلكتروني بالكامل من CrashRpt.وبدلاً من ذلك، لدينا في نظام تتبع الأخطاء لدينا قسم خاص بالأعطال التي تم إرسالها تلقائيًا عند حدوث الأعطال.

للعثور على مشكلتك:

ربما سأحاول تصحيح أخطاء كود CrashRpt لمعرفة سبب إعطائك مربع حوار حفظ.يجب بدلاً من ذلك فتح عميل البريد الافتراضي الخاص بك.ربما لديك إصدار أقدم من المكتبة، أو ربما تكون موارد الحوار معطلة بعض الشيء.تصحيح الكود سيخبرك بهذا بالرغم من ذلك.

على الأرجح أنه يتم استدعاء MailReport ولكنه يفشل.

تعيين نقطة توقف في الأصل كود CrashRptCrashHandler.cpp بعد DoModal مباشرةً:

 mainDlg.m_pUDFiles = &m_files;
   if (IDOK == mainDlg.DoModal())
   {
      //Put breakpoint here <---------
      if (m_sTo.IsEmpty() || 
          !MailReport(rpt, sTempFileName, mainDlg.m_sEmail, mainDlg.m_sDescription))
      {
         SaveReport(rpt, sTempFileName);
      }
   }

تحقق لمعرفة سبب عدم استدعاء MailReport.إنه إما مورد الحوار، أو أن m_sTo الخاص بك لم يتم ملؤه أو يمكنك التنقل عبر MailMsg.cpp ومعرفة مكان فشل MAPI.

الحل البديل:

الحل السهل، إذا وجدت أعلاه أنه يتم استدعاء MailReport، ولكن لم ينجح، هو بدلاً من ذلك إجراء ShellExecute وتحديد mailto:

يمكنك حتى محاولة استخدام طريقة MAPI، ولكن إذا فشل ذلك في إجراء mailto:

نصائح أخرى

ويمكنك العثور على وثائق CrashRpt، أسئلة وأجوبة، وتحميل CrashRpt V1.1 الجديد هنا HTTP: / /code.google.com/p/crashrpt/

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