net.mail asp.net - توجيه جميع رسائل البريد الإلكتروني إلى عنوان بريد إلكتروني مختلف في وضع التصحيح

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

  •  10-07-2019
  •  | 
  •  

سؤال

وهناك على أية حال أن يكون جميع رسائل البريد الإلكتروني تذهب إلى عنوان مختلف عندما System.Web.HttpContext.Current.IsDebuggingEnabled غير صحيح؟ أو أحتاج إلى الطبقة الجديدة التي يمكنني استخدامها لارسال البريد الالكتروني في كل مكان؟

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

المحلول

ونحن نستخدم حل مماثل لطريقة MailProxy تفصيلها حسب tvanfosson. ولكن لدينا بعض الاختلافات التي أشعر تستحق الذكر. الأول هو أننا ببساطة توسيع الطبقة SmtpClient وتجاوز الأساليب إرسال عندما تكون في تطوير أو اختبار بيئة. نحن نستخدم ملف التكوين لتحديد البيئة. نحن بعد ذلك استخدام هذه الفئة في أي وقت نحن في حاجة الى ارسال رسائل البريد الإلكتروني. وهذه الفئة تحديد الذين تم تسجيل دخوله حاليا في التطبيق وتوجيه جميع رسائل البريد الإلكتروني ولدت لهم، مع فشل إلى قائمة موحدة من المتلقين إذا قاموا بتسجيل الدخول غير متوفر لأي سبب من الأسباب. وهذا يساعد إذا كان لديك العديد من الأشخاص الذين اختبار أو تطوير لأنها سوف تحصل فقط على رسائل البريد الإلكتروني التي ولدت. نحن أيضا إلحاقها المستلمين الأصلي للرسالة إلى نص الرسالة. هذا هو مفيدة مرة أخرى عند اختبار الرسائل نوع العمل للتأكد من أنهم ذاهبون إلى الأفراد الصحيح. وأخيرا، أجد أنه من المفيد إضافة علامة [DEV] أو [QA] لموضوع الرسالة حتى أتمكن من إعداد قاعدة في بلدي عميل البريد للتعامل مع جميع الرسائل الاختبار.

نصائح أخرى

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

هل يمكن إما وضع هذا في التعليمات البرمجية في كل مكان استخدامه:

if (System.Web.HttpContext.Current.IsDebuggingEnabled)
{
 mail.To = "debug@debug.com";
}
else
{
 mail.To = recipientAddress;
}

وأو مجرد بناء مجمع بسيط للحصول على عناوين البريد الإلكتروني (حتى شيء في جالبة للطريقة لعناوين المتلقي ستعمل) أو مجمع لsmtpclient أو mailmessage كلها الدرجة.

ويجب أن أكون صادقا يمكنني استخدام حسن البالغ من العمر

#if DEBUG
    Mail.To("debug@debugaddress.com");
#else
    Mail.To("actualrecipient@destinationaddress.com");
#endif

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

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

public class MailProxy
{
     private bool IsDebug { get; set; }
     private string DebugAddress { get; set; }
     private SmtpClient Client { get; set; }

     public MailProxy( SmtpClient client,
                       bool debugging,
                       string debugAddress )
     {
         this.IsDebug = debugging;
         this.DebugAddress = debugAddress;
     }

     public void Send( MailMessage message )
     {
         if (this.IsDebug)
         {
             message.To = new MailAddress(this.DebugAddress);
         }
         this.Client.Send( message );
     }

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