كيفية إرسال بريد إلكتروني من برنامج _بدون_ باستخدام حساب موجود مسبقًا؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

أود أن يتمكن برنامجي من إرسال تقارير الأخطاء إلي عبر البريد الإلكتروني.كيف يمكنني القيام بذلك دون ترميز اسم المستخدم/كلمة المرور/خادم SMTP/إلخ.في الكود؟(سيسمح القيام بذلك للمستخدمين بتفكيك البرنامج والاستيلاء على حساب البريد الإلكتروني هذا.)

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

أنا أستخدم .NET v3.5 (C# على وجه الخصوص)، ولكنني أتخيل أن الأفكار متشابهة بدرجة كافية في معظم اللغات.طالما أنك تدرك أنني أفعل هذا من أجل تطبيق غير متصل بالإنترنت، ولا تزودني برمز PHP أو شيء من هذا القبيل، فيجب أن نكون بخير.

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

المحلول

طالما أن حسابك موجود على gmail.com، فقم بالإعداد gmail-smtp-in.l.google.com كخادم SMTP الصادر في برنامجك.لا تحتاج إلى توفير كلمة مرور لإرسال بريد إلكتروني إلى حسابات Gmail عند استخدام هذا الخادم.

نصائح أخرى

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

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

هل فكرت في استضافة نموذج http بسيط أو خدمة ويب في مكان ما، بحيث يمكنك نشر المعلومات التي تحتاجها هناك من التطبيق (لا يلزم المصادقة)، وإما حفظها للنظر إليها يدويًا لاحقًا، أو إرسال البريد الإلكتروني من ذلك الخادم؟

أعتقد أن أفضل خطة هي إرسال معلومات الخطأ إلى بعض الخدمات (في الحالة البسيطة، نموذج ويب) التي تعمل تحت سيطرتك، والتي يمكنها بعد ذلك إرسال بريد إلكتروني (أو تسجيله بطريقة أخرى مناسبة).

إذا كان من المفترض أن يكون إرسال البريد الإلكتروني مفيدًا للمستخدم النهائي، فسيكون هناك خيار آخر يتمثل في مطالبة المستخدم بإدخال خادم SMTP الخاص به (واسم المستخدم/كلمة المرور إذا لزم الأمر) - في أنظمة Unix، ربما يمكنك فقط استخدام sendmail والاعتماد على المستخدم لتكوينه بشكل صحيح.كنت أعمل على نظام يستخدم هذا الأسلوب لإرسال تقارير المستخدم عن المهام المجدولة للنظام، وقد نجح ذلك بشكل جيد.

ما عليك القيام به هو معرفة خادم SMTP الخاص بمزود خدمة الإنترنت الذي تستخدمه لأنه عند استخدام خادم SMTP الخاص بمزود خدمة الإنترنت الخاص بك، لا يتم اعتبارك تقوم بإرسال رسائل غير مرغوب فيها لترحيل البريد، لذا يمكنك المرور دون أي مصادقة.

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

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

MailMessage msg = new MailMessage("someone@foo.com", "someoneelse@bar.com");
msg.Subject = "Check it out!";
msg.Body = "Visit stackoverflow.com!";
SmtpClient client = new SmtpClient("some.smtp.server", 25);
client.Send(msg);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top